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%include "vpx_ports/x86_abi_support.asm" 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro STACK_FRAME_CREATE_X3 0 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rsi 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rax 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_ptr rdi 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride rdx 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define end_ptr rcx 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ret_var rbx 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr arg(4) 225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org %define max_sad arg(4) 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define height dword ptr arg(4) 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbx 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ; src_ptr 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ; ref_ptr 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ; src_stride 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ; ref_stride 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 36fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org %if LIBVPX_YASM_WIN64 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SAVE_XMM 7, u 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rcx 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rdx 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_ptr r8 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride r9 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define end_ptr r10 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ret_var r11 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr [rsp+xmm_stack_space+8+4*8] 455c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org %define max_sad [rsp+xmm_stack_space+8+4*8] 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define height dword ptr [rsp+xmm_stack_space+8+4*8] 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %else 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rdi 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rsi 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_ptr rdx 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride rcx 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define end_ptr r9 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ret_var r10 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr r8 555c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org %define max_sad r8 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define height r8 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %endif 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro STACK_FRAME_DESTROY_X3 0 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_ptr 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define end_ptr 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ret_var 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr 705c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org %define max_sad 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define height 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbx 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 79fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org %if LIBVPX_YASM_WIN64 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org RESTORE_XMM 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %endif 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro STACK_FRAME_CREATE_X4 0 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rsi 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rax 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r0_ptr rcx 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r1_ptr rdx 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r2_ptr rbx 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r3_ptr rdi 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride rbp 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr arg(4) 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbx 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ; ref_ptr_base 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org LOAD_X4_ADDRESSES rdi, rcx, rdx, rax, rdi 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ; src_ptr 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rbx, dword ptr arg(1) ; src_stride 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rbp, dword ptr arg(3) ; ref_stride 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org xchg rbx, rax 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 114fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org %if LIBVPX_YASM_WIN64 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SAVE_XMM 7, u 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rcx 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rdx 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r0_ptr rsi 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r1_ptr r10 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r2_ptr r11 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r3_ptr r8 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride r9 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr [rsp+xmm_stack_space+16+4*8] 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org LOAD_X4_ADDRESSES r8, r0_ptr, r1_ptr, r2_ptr, r3_ptr 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %else 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr rdi 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride rsi 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r0_ptr r9 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r1_ptr r10 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r2_ptr r11 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r3_ptr rdx 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride rcx 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr r8 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org LOAD_X4_ADDRESSES rdx, r0_ptr, r1_ptr, r2_ptr, r3_ptr 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %endif 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro STACK_FRAME_DESTROY_X4 0 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_ptr 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define src_stride 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r0_ptr 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r1_ptr 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r2_ptr 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define r3_ptr 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define ref_stride 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %define result_ptr 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbx 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 159fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org %if LIBVPX_YASM_WIN64 160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org RESTORE_XMM 162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org %endif 163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X2X3 5 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2] 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm5, XMMWORD PTR [%3] 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm6, XMMWORD PTR [%3+1] 172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm7, XMMWORD PTR [%3+2] 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm5, xmm0 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm6, xmm0 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm7, xmm0 177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2] 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%3] 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [%3+1] 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [%3+2] 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2+%4] 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%3+%5] 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [%3+%5+1] 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [%3+%5+2] 195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 || %1==1 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %2, [%2+%4*2] 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %3, [%3+%5*2] 199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_8X2X3 5 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2] 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm5, QWORD PTR [%3] 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm6, QWORD PTR [%3+1] 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm7, QWORD PTR [%3+2] 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm5, mm0 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm6, mm0 219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm7, mm0 220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2] 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%3] 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm2, QWORD PTR [%3+1] 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm3, QWORD PTR [%3+2] 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm5, mm1 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm6, mm2 232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm3 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2+%4] 235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%3+%5] 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm2, QWORD PTR [%3+%5+1] 237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm3, QWORD PTR [%3+%5+2] 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 || %1==1 240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %2, [%2+%4*2] 241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %3, [%3+%5*2] 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm5, mm1 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm6, mm2 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm3 251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro LOAD_X4_ADDRESSES 5 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov %2, [%1+REG_SZ_BYTES*0] 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov %3, [%1+REG_SZ_BYTES*1] 256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov %4, [%1+REG_SZ_BYTES*2] 258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov %5, [%1+REG_SZ_BYTES*3] 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X2X4 8 262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2] 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm4, XMMWORD PTR [%3] 265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm5, XMMWORD PTR [%4] 266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm6, XMMWORD PTR [%5] 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm7, XMMWORD PTR [%6] 268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm4, xmm0 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm5, xmm0 271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm6, xmm0 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm7, xmm0 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2] 275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%3] 276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [%4] 277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [%5] 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm4, xmm1 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%6] 285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm3 287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm1 290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [%2+%7] 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%3+%8] 293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [%4+%8] 294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [%5+%8] 295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 300474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm4, xmm1 301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [%6+%8] 302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm2 303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm3 304474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 || %1==1 306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %2, [%2+%7*2] 307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %3, [%3+%8*2] 308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %4, [%4+%8*2] 310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %5, [%5+%8*2] 311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %6, [%6+%8*2] 313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm1 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_8X2X4 8 320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2] 322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm4, QWORD PTR [%3] 323474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm5, QWORD PTR [%4] 324474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm6, QWORD PTR [%5] 325474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm7, QWORD PTR [%6] 326474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm4, mm0 328474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm5, mm0 329474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm6, mm0 330474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm7, mm0 331474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 332474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2] 333474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%3] 334474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm2, QWORD PTR [%4] 335474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm3, QWORD PTR [%5] 336474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 337474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm4, mm1 342474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%6] 343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm5, mm2 344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm6, mm3 345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm1 348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm0, QWORD PTR [%2+%7] 350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%3+%8] 351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm2, QWORD PTR [%4+%8] 352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm3, QWORD PTR [%5+%8] 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 355474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm4, mm1 359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq mm1, QWORD PTR [%6+%8] 360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm5, mm2 361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm6, mm3 362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1==0 || %1==1 364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %2, [%2+%7*2] 365474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %3, [%3+%8*2] 366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %4, [%4+%8*2] 368474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %5, [%5+%8*2] 369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 370474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea %6, [%6+%8*2] 371474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 373474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm1 374474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 375474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 376474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 377474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad16x16x3_sse3( 378474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 379474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 380474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 381474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 382474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 383f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x16x3_sse3) PRIVATE 384474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x16x3_sse3): 385474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 386474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 387474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 388474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0, src_ptr, ref_ptr, src_stride, ref_stride 389474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 390474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 391474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 392474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 393474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 394474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 395474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 2, src_ptr, ref_ptr, src_stride, ref_stride 396474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 397474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 398474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 400474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 401474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 402474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 403474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx], xmm0 404474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 405474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 406474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 407474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 409474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+4], xmm0 410474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 411474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 412474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 413474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 414474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 415474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], xmm0 416474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 417474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 418474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad16x8x3_sse3( 420474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 421474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 422474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 423474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 424474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 425f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x8x3_sse3) PRIVATE 426474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x8x3_sse3): 427474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 429474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 430474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0, src_ptr, ref_ptr, src_stride, ref_stride 431474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 432474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 433474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 2, src_ptr, ref_ptr, src_stride, ref_stride 434474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 435474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 436474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 437474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 438474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 440474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 441474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx], xmm0 442474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 443474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 445474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 447474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+4], xmm0 448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 453474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], xmm0 454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad8x16x3_sse3( 458474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 459474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 462474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 463f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x16x3_sse3) PRIVATE 464474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x16x3_sse3): 465474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 466474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 467474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 468474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 0, src_ptr, ref_ptr, src_stride, ref_stride 469474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 470474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 472474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 473474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 2, src_ptr, ref_ptr, src_stride, ref_stride 476474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 477474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 479474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm5, mm6 480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx], mm5 482474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], mm7 483474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 486474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad8x8x3_sse3( 487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 490474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 492f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x8x3_sse3) PRIVATE 493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x8x3_sse3): 494474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 495474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 496474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 0, src_ptr, ref_ptr, src_stride, ref_stride 498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 499474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 1, src_ptr, ref_ptr, src_stride, ref_stride 500474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X3 2, src_ptr, ref_ptr, src_stride, ref_stride 501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 502474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 504474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm5, mm6 505474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 506474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx], mm5 507474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], mm7 508474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 509474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 511474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad4x4x3_sse3( 512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 514474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 515474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 517f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad4x4x3_sse3) PRIVATE 518474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad4x4x3_sse3): 519474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 520474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 521474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 522474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm0, DWORD PTR [src_ptr] 523474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm1, DWORD PTR [ref_ptr] 524474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [src_ptr+src_stride] 526474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [ref_ptr+ref_stride] 527474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 528474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm0, mm2 529474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm1, mm3 530474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm4, DWORD PTR [ref_ptr+1] 532474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm5, DWORD PTR [ref_ptr+2] 533474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 534474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [ref_ptr+ref_stride+1] 535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [ref_ptr+ref_stride+2] 536474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 537474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 538474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 539474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm4, mm2 540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm5, mm3 541474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 542474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm4, mm0 543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm5, mm0 544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 545474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride*2] 546474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea ref_ptr, [ref_ptr+ref_stride*2] 547474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 548474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm0, DWORD PTR [src_ptr] 549474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [ref_ptr] 550474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 551474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [src_ptr+src_stride] 552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm6, DWORD PTR [ref_ptr+ref_stride] 553474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 554474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm0, mm3 555474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm2, mm6 556474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 557474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [ref_ptr+1] 558474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm7, DWORD PTR [ref_ptr+2] 559474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 561474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 562474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm1, mm2 563474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 564474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [ref_ptr+ref_stride+1] 565474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm6, DWORD PTR [ref_ptr+ref_stride+2] 566474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 567474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm3, mm2 568474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm7, mm6 569474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 570474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 571474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm7, mm0 572474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 573474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm3, mm4 574474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm5 575474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 576474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 577474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 578474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm1, mm3 579474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 580474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx], mm1 581474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], mm7 582474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 583474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 584474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 585474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;unsigned int vp8_sad16x16_sse3( 586474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 587474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 588474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 589474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 5905c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org; int max_sad) 591474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;%define lddqu movdqu 592f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x16_sse3) PRIVATE 593474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x16_sse3): 594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 595474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 596474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 597474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov end_ptr, 4 598474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pxor xmm7, xmm7 599474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 600474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org.vp8_sad16x16_sse3_loop: 601474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [src_ptr] 602474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm1, XMMWORD PTR [ref_ptr] 603474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, XMMWORD PTR [src_ptr+src_stride] 604474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm3, XMMWORD PTR [ref_ptr+ref_stride] 605474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 606474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride*2] 607474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea ref_ptr, [ref_ptr+ref_stride*2] 608474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 609474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, XMMWORD PTR [src_ptr] 610474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm5, XMMWORD PTR [ref_ptr] 611474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm6, XMMWORD PTR [src_ptr+src_stride] 612474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 613474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm0, xmm1 614474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 615474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm1, XMMWORD PTR [ref_ptr+ref_stride] 616474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 617474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm3 618474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm4, xmm5 619474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm6, xmm1 620474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 621474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride*2] 622474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea ref_ptr, [ref_ptr+ref_stride*2] 623474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 624474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm0 625474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm2 626474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm4 627474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm6 628474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 629474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub end_ptr, 1 630474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org jne .vp8_sad16x16_sse3_loop 631474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 632474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 633474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 634474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 635474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq rax, xmm0 636474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 637474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 638474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 639474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_copy32xn_sse3( 640474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 641474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 642474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *dst_ptr, 643474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int dst_stride, 644474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int height); 645f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_copy32xn_sse3) PRIVATE 646474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_copy32xn_sse3): 647474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 648474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X3 649474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 650167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.block_copy_sse3_loopx4: 651474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea end_ptr, [src_ptr+src_stride*2] 652474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 653474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm0, XMMWORD PTR [src_ptr] 654474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm1, XMMWORD PTR [src_ptr + 16] 655474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm2, XMMWORD PTR [src_ptr + src_stride] 656474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm3, XMMWORD PTR [src_ptr + src_stride + 16] 657474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm4, XMMWORD PTR [end_ptr] 658474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm5, XMMWORD PTR [end_ptr + 16] 659474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm6, XMMWORD PTR [end_ptr + src_stride] 660474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm7, XMMWORD PTR [end_ptr + src_stride + 16] 661474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 662474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride*4] 663474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 664474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea end_ptr, [ref_ptr+ref_stride*2] 665474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 666474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr], xmm0 667474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr + 16], xmm1 668474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr + ref_stride], xmm2 669474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr + ref_stride + 16], xmm3 670474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [end_ptr], xmm4 671474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [end_ptr + 16], xmm5 672474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [end_ptr + ref_stride], xmm6 673474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [end_ptr + ref_stride + 16], xmm7 674474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 675474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea ref_ptr, [ref_ptr+ref_stride*4] 676474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 677474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub height, 4 678474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cmp height, 4 679167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org jge .block_copy_sse3_loopx4 680474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 681474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;Check to see if there is more rows need to be copied. 682474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cmp height, 0 683167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org je .copy_is_done 684474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 685167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.block_copy_sse3_loop: 686474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm0, XMMWORD PTR [src_ptr] 687474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqu xmm1, XMMWORD PTR [src_ptr + 16] 688474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride] 689474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 690474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr], xmm0 691474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa XMMWORD PTR [ref_ptr + 16], xmm1 692474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea ref_ptr, [ref_ptr+ref_stride] 693474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 694474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub height, 1 695167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org jne .block_copy_sse3_loop 696474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 697167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.copy_is_done: 698474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X3 699474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 700474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad16x16x4d_sse3( 701474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 702474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 703474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr_base, 704474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 705474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 706f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x16x4d_sse3) PRIVATE 707474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x16x4d_sse3): 708474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 709474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X4 710474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 711474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 0, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 712474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 713474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 714474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 715474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 716474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 717474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 718474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 2, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 719474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 720474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 721474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 722474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 723474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 724474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 725474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm4 726474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm4, 8 727474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 728474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm4 729474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx], xmm0 730474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 731474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 732474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 733474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 734474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 735474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+4], xmm0 736474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 737474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 738474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 739474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 740474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 741474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], xmm0 742474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 743474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 744474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 745474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 746474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 747474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+12], xmm0 748474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 749474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X4 750474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 751474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void vp8_sad16x8x4d_sse3( 752474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 753474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 754474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr_base, 755474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 756474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 757f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x8x4d_sse3) PRIVATE 758474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x8x4d_sse3): 759474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 760474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X4 761474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 762474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 0, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 763474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 764474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 765474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X4 2, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 766474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 767474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 768474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 769474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 770474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 771474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 772474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm4 773474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm4, 8 774474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 775474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm4 776474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx], xmm0 777474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 778474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 779474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 780474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 781474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 782474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+4], xmm0 783474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 784474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 785474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 786474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 787474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 788474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+8], xmm0 789474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 790474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 791474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 792474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 793474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 794474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rcx+12], xmm0 795474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 796474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X4 797474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 798474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad8x16x4d_sse3( 799474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 800474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 801474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 802474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 803474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 804f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x16x4d_sse3) PRIVATE 805474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x16x4d_sse3): 806474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 807474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X4 808474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 809474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 0, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 810474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 811474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 812474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 813474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 814474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 815474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 816474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 2, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 817474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 818474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 819474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 820474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 821474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 822474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 823474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm4, mm5 824474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm6, mm7 825474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 826474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx], mm4 827474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx+8], mm6 828474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 829474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X4 830474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 831474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad8x8x4d_sse3( 832474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 833474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 834474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 835474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 836474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 837f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad8x8x4d_sse3) PRIVATE 838474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad8x8x4d_sse3): 839474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 840474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X4 841474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 842474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 0, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 843474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 844474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 1, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 845474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_8X2X4 2, src_ptr, r0_ptr, r1_ptr, r2_ptr, r3_ptr, src_stride, ref_stride 846474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 847474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 848474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 849474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 850474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rcx, result_ptr 851474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 852474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm4, mm5 853474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpckldq mm6, mm7 854474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 855474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx], mm4 856474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq [rcx+8], mm6 857474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 858474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X4 859474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 860474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad4x4x4d_sse3( 861474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 862474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 863474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 864474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 865474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 866f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad4x4x4d_sse3) PRIVATE 867474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad4x4x4d_sse3): 868474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 869474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_CREATE_X4 870474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 871474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm0, DWORD PTR [src_ptr] 872474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm1, DWORD PTR [r0_ptr] 873474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 874474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [src_ptr+src_stride] 875474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [r0_ptr+ref_stride] 876474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 877474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm0, mm2 878474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm1, mm3 879474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 880474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm4, DWORD PTR [r1_ptr] 881474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm5, DWORD PTR [r2_ptr] 882474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 883474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm6, DWORD PTR [r3_ptr] 884474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [r1_ptr+ref_stride] 885474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 886474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [r2_ptr+ref_stride] 887474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm7, DWORD PTR [r3_ptr+ref_stride] 888474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 889474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm1, mm0 890474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 891474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm4, mm2 892474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm5, mm3 893474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 894474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm6, mm7 895474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm4, mm0 896474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 897474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm5, mm0 898474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm6, mm0 899474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 900474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 901474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 902474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea src_ptr, [src_ptr+src_stride*2] 903474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea r0_ptr, [r0_ptr+ref_stride*2] 904474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 905474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea r1_ptr, [r1_ptr+ref_stride*2] 906474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea r2_ptr, [r2_ptr+ref_stride*2] 907474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 908474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea r3_ptr, [r3_ptr+ref_stride*2] 909474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 910474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm0, DWORD PTR [src_ptr] 911474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [r0_ptr] 912474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 913474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [src_ptr+src_stride] 914474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm7, DWORD PTR [r0_ptr+ref_stride] 915474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 916474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm0, mm3 917474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm2, mm7 918474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 919474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm3, DWORD PTR [r1_ptr] 920474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm7, DWORD PTR [r2_ptr] 921474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 922474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 923474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if ABI_IS_32BIT 924474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rax, rbp 925474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 926474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 927474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%define ref_stride rax 928474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 929474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, result_ptr 930474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 931474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm1, mm2 932474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rsi], mm1 933474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 934474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [r1_ptr+ref_stride] 935474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm1, DWORD PTR [r2_ptr+ref_stride] 936474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 937474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm3, mm2 938474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm7, mm1 939474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 940474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm3, mm0 941474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm7, mm0 942474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 943474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm2, DWORD PTR [r3_ptr] 944474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd mm1, DWORD PTR [r3_ptr+ref_stride] 945474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 946474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm3, mm4 947474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm7, mm5 948474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 949474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rsi+4], mm3 950474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org punpcklbw mm2, mm1 951474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 952474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rsi+8], mm7 953474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw mm2, mm0 954474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 955474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw mm2, mm6 956474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rsi+12], mm2 957474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 958474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 959474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org STACK_FRAME_DESTROY_X4 960474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 961