1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%include "vpx_ports/x86_abi_support.asm" 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_short_inv_walsh4x4_sse2(short *input, short *output) 15f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_short_inv_walsh4x4_sse2) PRIVATE 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_short_inv_walsh4x4_sse2): 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 2 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov rcx, arg(0) 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov rdx, arg(1) 24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov rax, 30003h 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm0, [rcx + 0] ;ip[4] ip[0] 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm1, [rcx + 16] ;ip[12] ip[8] 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org pshufd xmm2, xmm1, 4eh ;ip[8] ip[12] 31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm3, xmm0 ;ip[4] ip[0] 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm0, xmm2 ;ip[4]+ip[8] ip[0]+ip[12] aka b1 a1 34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psubw xmm3, xmm2 ;ip[4]-ip[8] ip[0]-ip[12] aka c1 d1 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm4, xmm0 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm0, xmm3 ;d1 a1 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckhqdq xmm4, xmm3 ;c1 b1 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm1, xmm4 ;c1 b1 41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm4, xmm0 ;dl+cl a1+b1 aka op[4] op[0] 42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psubw xmm0, xmm1 ;d1-c1 a1-b1 aka op[12] op[8] 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; 13 12 11 10 03 02 01 00 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; 33 32 31 30 23 22 21 20 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; 49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm3, xmm4 ; 13 12 11 10 03 02 01 00 50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org punpcklwd xmm4, xmm0 ; 23 03 22 02 21 01 20 00 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org punpckhwd xmm3, xmm0 ; 33 13 32 12 31 11 30 10 52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm1, xmm4 ; 23 03 22 02 21 01 20 00 53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org punpcklwd xmm4, xmm3 ; 31 21 11 01 30 20 10 00 54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org punpckhwd xmm1, xmm3 ; 33 23 13 03 32 22 12 02 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd xmm0, eax 57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org pshufd xmm2, xmm1, 4eh ;ip[8] ip[12] 58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm3, xmm4 ;ip[4] ip[0] 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org pshufd xmm0, xmm0, 0 ;03 03 03 03 03 03 03 03 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm4, xmm2 ;ip[4]+ip[8] ip[0]+ip[12] aka b1 a1 63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psubw xmm3, xmm2 ;ip[4]-ip[8] ip[0]-ip[12] aka c1 d1 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm5, xmm4 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm4, xmm3 ;d1 a1 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckhqdq xmm5, xmm3 ;c1 b1 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movdqa xmm1, xmm5 ;c1 b1 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm5, xmm4 ;dl+cl a1+b1 aka op[4] op[0] 71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psubw xmm4, xmm1 ;d1-c1 a1-b1 aka op[12] op[8] 72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm5, xmm0 74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org paddw xmm4, xmm0 75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psraw xmm5, 3 76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psraw xmm4, 3 77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd eax, xmm5 79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd ecx, xmm4 80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm5, 4 81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm4, 4 82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*0], ax 83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*2], cx 84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr eax, 16 85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr ecx, 16 86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*4], ax 87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*6], cx 88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd eax, xmm5 89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd ecx, xmm4 90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm5, 4 91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm4, 4 92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*8], ax 93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*10], cx 94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr eax, 16 95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr ecx, 16 96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*12], ax 97167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*14], cx 98167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 99167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd eax, xmm5 100167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd ecx, xmm4 101167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm5, 4 102167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org psrldq xmm4, 4 103167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*1], ax 104167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*3], cx 105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr eax, 16 106167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr ecx, 16 107167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*5], ax 108167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*7], cx 109167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd eax, xmm5 110167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org movd ecx, xmm4 111167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*9], ax 112167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*11], cx 113167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr eax, 16 114167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org shr ecx, 16 115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*13], ax 116167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov word ptr[rdx+32*15], cx 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 122