11b362b15af34006e6a11974088a46d42b903418eJohann;
21b362b15af34006e6a11974088a46d42b903418eJohann;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
31b362b15af34006e6a11974088a46d42b903418eJohann;
41b362b15af34006e6a11974088a46d42b903418eJohann;  Use of this source code is governed by a BSD-style license
51b362b15af34006e6a11974088a46d42b903418eJohann;  that can be found in the LICENSE file in the root of the source
61b362b15af34006e6a11974088a46d42b903418eJohann;  tree. An additional intellectual property rights grant can be found
71b362b15af34006e6a11974088a46d42b903418eJohann;  in the file PATENTS.  All contributing project authors may
81b362b15af34006e6a11974088a46d42b903418eJohann;  be found in the AUTHORS file in the root of the source tree.
91b362b15af34006e6a11974088a46d42b903418eJohann;
101b362b15af34006e6a11974088a46d42b903418eJohann
111b362b15af34006e6a11974088a46d42b903418eJohann
121b362b15af34006e6a11974088a46d42b903418eJohann%include "vpx_ports/x86_abi_support.asm"
131b362b15af34006e6a11974088a46d42b903418eJohann
141b362b15af34006e6a11974088a46d42b903418eJohann;void vp8_short_inv_walsh4x4_mmx(short *input, short *output)
151b362b15af34006e6a11974088a46d42b903418eJohannglobal sym(vp8_short_inv_walsh4x4_mmx) PRIVATE
161b362b15af34006e6a11974088a46d42b903418eJohannsym(vp8_short_inv_walsh4x4_mmx):
171b362b15af34006e6a11974088a46d42b903418eJohann    push        rbp
181b362b15af34006e6a11974088a46d42b903418eJohann    mov         rbp, rsp
191b362b15af34006e6a11974088a46d42b903418eJohann    SHADOW_ARGS_TO_STACK 2
201b362b15af34006e6a11974088a46d42b903418eJohann    ; end prolog
211b362b15af34006e6a11974088a46d42b903418eJohann
221b362b15af34006e6a11974088a46d42b903418eJohann    mov         rdx, arg(0)
231b362b15af34006e6a11974088a46d42b903418eJohann    mov         rax, 30003h
241b362b15af34006e6a11974088a46d42b903418eJohann
251b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm0, [rdx + 0]    ;ip[0]
261b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm1, [rdx + 8]    ;ip[4]
27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    movq        mm7, rax
281b362b15af34006e6a11974088a46d42b903418eJohann
291b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm2, [rdx + 16]   ;ip[8]
301b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm3, [rdx + 24]   ;ip[12]
311b362b15af34006e6a11974088a46d42b903418eJohann    punpcklwd   mm7, mm7          ;0003000300030003h
321b362b15af34006e6a11974088a46d42b903418eJohann    mov         rdx, arg(1)
331b362b15af34006e6a11974088a46d42b903418eJohann
341b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm4, mm0
351b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm5, mm1
361b362b15af34006e6a11974088a46d42b903418eJohann
371b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm4, mm3          ;ip[0] + ip[12] aka al
381b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm5, mm2          ;ip[4] + ip[8] aka bl
391b362b15af34006e6a11974088a46d42b903418eJohann
401b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm6, mm4          ;temp al
411b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm4, mm5          ;al + bl
421b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm6, mm5          ;al - bl
431b362b15af34006e6a11974088a46d42b903418eJohann
441b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm0, mm3          ;ip[0] - ip[12] aka d1
451b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm1, mm2          ;ip[4] - ip[8] aka c1
461b362b15af34006e6a11974088a46d42b903418eJohann
471b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm5, mm0          ;temp dl
481b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm0, mm1          ;dl + cl
491b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm5, mm1          ;dl - cl
501b362b15af34006e6a11974088a46d42b903418eJohann
511b362b15af34006e6a11974088a46d42b903418eJohann    ; 03 02 01 00
521b362b15af34006e6a11974088a46d42b903418eJohann    ; 13 12 11 10
531b362b15af34006e6a11974088a46d42b903418eJohann    ; 23 22 21 20
541b362b15af34006e6a11974088a46d42b903418eJohann    ; 33 32 31 30
551b362b15af34006e6a11974088a46d42b903418eJohann
561b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm3, mm4          ; 03 02 01 00
571b362b15af34006e6a11974088a46d42b903418eJohann    punpcklwd   mm4, mm0          ; 11 01 10 00
581b362b15af34006e6a11974088a46d42b903418eJohann    punpckhwd   mm3, mm0          ; 13 03 12 02
591b362b15af34006e6a11974088a46d42b903418eJohann
601b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm1, mm6          ; 23 22 21 20
611b362b15af34006e6a11974088a46d42b903418eJohann    punpcklwd   mm6, mm5          ; 31 21 30 20
621b362b15af34006e6a11974088a46d42b903418eJohann    punpckhwd   mm1, mm5          ; 33 23 32 22
631b362b15af34006e6a11974088a46d42b903418eJohann
641b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm0, mm4          ; 11 01 10 00
651b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm2, mm3          ; 13 03 12 02
661b362b15af34006e6a11974088a46d42b903418eJohann
671b362b15af34006e6a11974088a46d42b903418eJohann    punpckldq   mm0, mm6          ; 30 20 10 00 aka ip[0]
681b362b15af34006e6a11974088a46d42b903418eJohann    punpckhdq   mm4, mm6          ; 31 21 11 01 aka ip[4]
691b362b15af34006e6a11974088a46d42b903418eJohann
701b362b15af34006e6a11974088a46d42b903418eJohann    punpckldq   mm2, mm1          ; 32 22 12 02 aka ip[8]
711b362b15af34006e6a11974088a46d42b903418eJohann    punpckhdq   mm3, mm1          ; 33 23 13 03 aka ip[12]
721b362b15af34006e6a11974088a46d42b903418eJohann;~~~~~~~~~~~~~~~~~~~~~
731b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm1, mm0
741b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm5, mm4
751b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm1, mm3          ;ip[0] + ip[12] aka al
761b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm5, mm2          ;ip[4] + ip[8] aka bl
771b362b15af34006e6a11974088a46d42b903418eJohann
781b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm6, mm1          ;temp al
791b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm1, mm5          ;al + bl
801b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm6, mm5          ;al - bl
811b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm1, mm7
821b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm6, mm7
831b362b15af34006e6a11974088a46d42b903418eJohann    psraw       mm1, 3
841b362b15af34006e6a11974088a46d42b903418eJohann    psraw       mm6, 3
851b362b15af34006e6a11974088a46d42b903418eJohann
861b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm0, mm3          ;ip[0] - ip[12] aka d1
871b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm4, mm2          ;ip[4] - ip[8] aka c1
881b362b15af34006e6a11974088a46d42b903418eJohann
891b362b15af34006e6a11974088a46d42b903418eJohann    movq        mm5, mm0          ;temp dl
901b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm0, mm4          ;dl + cl
911b362b15af34006e6a11974088a46d42b903418eJohann    psubw       mm5, mm4          ;dl - cl
921b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm0, mm7
931b362b15af34006e6a11974088a46d42b903418eJohann    paddw       mm5, mm7
941b362b15af34006e6a11974088a46d42b903418eJohann    psraw       mm0, 3
951b362b15af34006e6a11974088a46d42b903418eJohann    psraw       mm5, 3
961b362b15af34006e6a11974088a46d42b903418eJohann;~~~~~~~~~~~~~~~~~~~~~
971b362b15af34006e6a11974088a46d42b903418eJohann
981b362b15af34006e6a11974088a46d42b903418eJohann    movd        eax, mm1
991b362b15af34006e6a11974088a46d42b903418eJohann    movd        ecx, mm0
1001b362b15af34006e6a11974088a46d42b903418eJohann    psrlq       mm0, 32
1011b362b15af34006e6a11974088a46d42b903418eJohann    psrlq       mm1, 32
1021b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*0], ax
1031b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*1], cx
1041b362b15af34006e6a11974088a46d42b903418eJohann    shr         eax, 16
1051b362b15af34006e6a11974088a46d42b903418eJohann    shr         ecx, 16
1061b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*4], ax
1071b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*5], cx
1081b362b15af34006e6a11974088a46d42b903418eJohann    movd        eax, mm1
1091b362b15af34006e6a11974088a46d42b903418eJohann    movd        ecx, mm0
1101b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*8], ax
1111b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*9], cx
1121b362b15af34006e6a11974088a46d42b903418eJohann    shr         eax, 16
1131b362b15af34006e6a11974088a46d42b903418eJohann    shr         ecx, 16
1141b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*12], ax
1151b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*13], cx
1161b362b15af34006e6a11974088a46d42b903418eJohann
1171b362b15af34006e6a11974088a46d42b903418eJohann    movd        eax, mm6
1181b362b15af34006e6a11974088a46d42b903418eJohann    movd        ecx, mm5
1191b362b15af34006e6a11974088a46d42b903418eJohann    psrlq       mm5, 32
1201b362b15af34006e6a11974088a46d42b903418eJohann    psrlq       mm6, 32
1211b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*2], ax
1221b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*3], cx
1231b362b15af34006e6a11974088a46d42b903418eJohann    shr         eax, 16
1241b362b15af34006e6a11974088a46d42b903418eJohann    shr         ecx, 16
1251b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*6], ax
1261b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*7], cx
1271b362b15af34006e6a11974088a46d42b903418eJohann    movd        eax, mm6
1281b362b15af34006e6a11974088a46d42b903418eJohann    movd        ecx, mm5
1291b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*10], ax
1301b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*11], cx
1311b362b15af34006e6a11974088a46d42b903418eJohann    shr         eax, 16
1321b362b15af34006e6a11974088a46d42b903418eJohann    shr         ecx, 16
1331b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*14], ax
1341b362b15af34006e6a11974088a46d42b903418eJohann    mov         word ptr[rdx+32*15], cx
1351b362b15af34006e6a11974088a46d42b903418eJohann
1361b362b15af34006e6a11974088a46d42b903418eJohann    ; begin epilog
1371b362b15af34006e6a11974088a46d42b903418eJohann    UNSHADOW_ARGS
1381b362b15af34006e6a11974088a46d42b903418eJohann    pop         rbp
1391b362b15af34006e6a11974088a46d42b903418eJohann    ret
1401b362b15af34006e6a11974088a46d42b903418eJohann
141