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%macro PROCESS_16X2X8 1 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm1, MMWORD PTR [rdi] 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm2, MMWORD PTR [rdi+16] 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm1, xmm3 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm3, xmm2 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm1 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm1, xmm0, 0x0 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm0, 8 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, xmm3 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm3, xmm0, 0x0 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm4, xmm0, 0x5 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm2 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm3 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm4 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi] 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm2, MMWORD PTR [rdi+16] 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm3, xmm2 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm5 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm0, 8 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, xmm3 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm3, xmm0, 0x0 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm4, xmm0, 0x5 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm3 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm4 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi + rax] 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi+ rdx] 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+ rdx+8] 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm2, MMWORD PTR [rdi+ rdx+16] 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm3, xmm2 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rsi, [rsi+rax*2] 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rdi, [rdi+rdx*2] 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm5 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm0, 8 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, xmm3 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm3, xmm0, 0x0 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm4, xmm0, 0x5 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm3 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm4 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_8X2X8 1 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, MMWORD PTR [rsi] 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm1, MMWORD PTR [rdi] 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm1, xmm3 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm1 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm1, xmm0, 0x0 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm2 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, MMWORD PTR [rsi] 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi] 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm5 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, MMWORD PTR [rsi + rax] 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi+ rdx] 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+ rdx+8] 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rsi, [rsi+rax*2] 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rdi, [rdi+rdx*2] 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm5 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm2, xmm0, 0x5 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_4X2X8 1 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd xmm0, [rsi] 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm1, MMWORD PTR [rdi] 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm1, xmm3 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm1, xmm0, 0x0 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd xmm0, [rsi] 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi] 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+8] 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd xmm0, [rsi + rax] 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm5, MMWORD PTR [rdi+ rdx] 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm3, MMWORD PTR [rdi+ rdx+8] 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklqdq xmm5, xmm3 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rsi, [rsi+rax*2] 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rdi, [rdi+rdx*2] 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mpsadbw xmm5, xmm0, 0x0 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm1, xmm5 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad16x16x8_sse4( 159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *src_ptr, 160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *ref_ptr, 162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned short *sad_array); 164f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x16x8_sse4) PRIVATE 165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x16x8_sse4): 166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 1 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [rdi], xmm1 190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad16x8x8_sse4( 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *src_ptr, 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *ref_ptr, 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned short *sad_array 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;); 206f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x8x8_sse4) PRIVATE 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x8x8_sse4): 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 1 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X8 0 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [rdi], xmm1 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad8x8x8_sse4( 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *src_ptr, 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *ref_ptr, 241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned short *sad_array 243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;); 244f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x8x8_sse4) PRIVATE 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x8x8_sse4): 246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 1 260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [rdi], xmm1 266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad8x16x8_sse4( 276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *src_ptr, 277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *ref_ptr, 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned short *sad_array 281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;); 282f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x16x8_sse4) PRIVATE 283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x16x8_sse4): 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 1 298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 300474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 304474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X8 0 305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [rdi], xmm1 307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad4x4x8_c( 317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *src_ptr, 318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; const unsigned char *ref_ptr, 320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned short *sad_array 322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;); 323f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad4x4x8_sse4) PRIVATE 324474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad4x4x8_sse4): 325474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 326474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 328474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 329474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 330474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 331474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 332474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 333474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 334474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 335474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 336474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 337474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_4X2X8 1 339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_4X2X8 0 340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 342474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [rdi], xmm1 343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 354