16fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; 26fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 36fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; 46fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; Use of this source code is governed by a BSD-style license 56fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; that can be found in the LICENSE file in the root of the source 66fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; tree. An additional intellectual property rights grant can be found 76fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; in the file PATENTS. All contributing project authors may 86fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; be found in the AUTHORS file in the root of the source tree. 96fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; 106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%include "vpx_ports/x86_abi_support.asm" 136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;unsigned int vp9_get_mb_ss_sse2 156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;( 166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; short *src_ptr 176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;) 18afc4a270e3f2ecbbb47aad63c6a6a77ca902d30efgalligan@chromium.orgglobal sym(vp9_get_mb_ss_sse2) PRIVATE 196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgsym(vp9_get_mb_ss_sse2): 206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbp 216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rbp, rsp 226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHADOW_ARGS_TO_STACK 1 236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org GET_GOT rbx 246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rsi 256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rdi 266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sub rsp, 16 276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; end prolog 286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rax, arg(0) ;[src_ptr] 316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rcx, 8 326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm4, xmm4 336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.NEXTROW: 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, [rax] 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm1, [rax+16] 376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, [rax+32] 386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3, [rax+48] 396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm0, xmm0 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm1, xmm1 416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm3, xmm3 436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm0, xmm1 456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm2, xmm3 466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm4, xmm0 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm4, xmm2 486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rax, 0x40 506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dec rcx 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ja .NEXTROW 526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3,xmm4 546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm4,8 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm4,xmm3 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3,xmm4 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm4,4 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm4,xmm3 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq rax,xmm4 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; begin epilog 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rsp, 16 646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rdi 656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rsi 666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_GOT 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org UNSHADOW_ARGS 686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbp 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret 706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;unsigned int vp9_get16x16var_sse2 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;( 746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char * src_ptr, 756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int source_stride, 766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char * ref_ptr, 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int recon_stride, 786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned int * SSE, 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int * Sum 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;) 81afc4a270e3f2ecbbb47aad63c6a6a77ca902d30efgalligan@chromium.orgglobal sym(vp9_get16x16var_sse2) PRIVATE 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgsym(vp9_get16x16var_sse2): 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbp 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rbp, rsp 856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHADOW_ARGS_TO_STACK 6 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SAVE_XMM 7 876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbx 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rsi 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rdi 906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; end prolog 916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rsi, arg(0) ;[src_ptr] 936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(2) ;[ref_ptr] 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, DWORD PTR arg(1) ;[source_stride] 966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rdx, DWORD PTR arg(3) ;[recon_stride] 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; Prefetch data 996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rcx, [rax+rax*2] 1006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rsi] 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rsi+rax] 1026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rsi+rax*2] 1036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rsi+rcx] 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rbx, [rsi+rax*4] 1056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx] 1066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rax] 1076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rax*2] 1086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rcx] 1096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rcx, [rdx+rdx*2] 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rdi] 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rdi+rdx] 1136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rdi+rdx*2] 1146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rdi+rcx] 1156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rbx, [rdi+rdx*4] 1166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx] 1176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rdx] 1186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rdx*2] 1196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rbx+rcx] 1206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm0, xmm0 ; clear xmm0 for unpack 1226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm7, xmm7 ; clear xmm7 for accumulating diffs 1236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm6, xmm6 ; clear xmm6 for accumulating sse 1256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rcx, 16 1266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.var16loop: 1286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqu xmm1, XMMWORD PTR [rsi] 1296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqu xmm2, XMMWORD PTR [rdi] 1306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rsi+rax*8] 1326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org prefetcht0 [rdi+rdx*8] 1336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3, xmm1 1356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm4, xmm2 1366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm1, xmm0 1396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhbw xmm3, xmm0 1406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 1426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhbw xmm4, xmm0 1436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubw xmm1, xmm2 1466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubw xmm3, xmm4 1476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm1 1496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm1, xmm1 1506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm3 1526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm3, xmm3 1536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm6, xmm1 1556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm6, xmm3 1566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rsi, rax 1586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rdi, rdx 1596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sub rcx, 1 1616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jnz .var16loop 1626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm1, xmm6 1656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm6, xmm6 1666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm5, xmm5 1686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklwd xmm6, xmm7 1696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhwd xmm5, xmm7 1716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrad xmm5, 16 1726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrad xmm6, 16 1746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm6, xmm5 1756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm1 1776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckldq xmm1, xmm0 1786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhdq xmm2, xmm0 1806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm7, xmm6 1816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 1836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckldq xmm6, xmm0 1846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhdq xmm7, xmm0 1866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm6, xmm7 1876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm1 1896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm7, xmm6 1906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm1, 8 1926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm6, 8 1936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm7, xmm6 1956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 1966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rax, arg(5) ;[Sum] 1986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(4) ;[SSE] 1996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd DWORD PTR [rax], xmm7 2016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd DWORD PTR [rdi], xmm1 2026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; begin epilog 2056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rdi 2066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rsi 2076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbx 2086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_XMM 2096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org UNSHADOW_ARGS 2106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbp 2116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret 2126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;unsigned int vp9_get8x8var_sse2 2176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;( 2186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char * src_ptr, 2196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int source_stride, 2206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char * ref_ptr, 2216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int recon_stride, 2226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned int * SSE, 2236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int * Sum 2246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;) 225afc4a270e3f2ecbbb47aad63c6a6a77ca902d30efgalligan@chromium.orgglobal sym(vp9_get8x8var_sse2) PRIVATE 2266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgsym(vp9_get8x8var_sse2): 2276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbp 2286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rbp, rsp 2296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHADOW_ARGS_TO_STACK 6 2306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SAVE_XMM 7 2316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org GET_GOT rbx 2326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rsi 2336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rdi 2346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sub rsp, 16 2356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; end prolog 2366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rsi, arg(0) ;[src_ptr] 2386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(2) ;[ref_ptr] 2396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, DWORD PTR arg(1) ;[source_stride] 2416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rdx, DWORD PTR arg(3) ;[recon_stride] 2426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm0, xmm0 ; clear xmm0 for unpack 2446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pxor xmm7, xmm7 ; clear xmm7 for accumulating diffs 2456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm1, QWORD PTR [rsi] 2476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR [rdi] 2486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm1, xmm0 2506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 2516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm1, xmm2 2536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm1 2546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm1, xmm1 2566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax] 2586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx] 2596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 2616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 2626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 2646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 2656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 2676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 2686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax * 2] 2716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx * 2] 2726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 2746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 2756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 2776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 2786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 2806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 2816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rsi, [rsi + rax * 2] 2846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rdi, [rdi + rdx * 2] 2856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax] 2866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx] 2876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 2896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 2906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 2926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 2936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 2956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 2966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax *2] 2986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx *2] 2996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 3016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 3026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 3046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 3056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 3076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rsi, [rsi + rax * 2] 3116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rdi, [rdi + rdx * 2] 3126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax] 3156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx] 3166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 3186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 3196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 3216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 3226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 3246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax *2] 3276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx *2] 3286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 3306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 3316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 3336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 3346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 3366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rsi, [rsi + rax * 2] 3406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rdi, [rdi + rdx * 2] 3416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm2, QWORD PTR[rsi + rax] 3436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm3, QWORD PTR[rdi + rdx] 3446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm2, xmm0 3466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklbw xmm3, xmm0 3476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psubsw xmm2, xmm3 3496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm2 3506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pmaddwd xmm2, xmm2 3526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm6, xmm7 3566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpcklwd xmm6, xmm0 3576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhwd xmm7, xmm0 3596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm1 3606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm7 3626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckldq xmm1, xmm0 3636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhdq xmm2, xmm0 3656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm7, xmm6 3666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckldq xmm6, xmm0 3696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org punpckhdq xmm7, xmm0 3716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm7 3726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm1 3746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm7, xmm6 3756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm1, 8 3776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm6, 8 3786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm6 3806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddd xmm1, xmm2 3816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rax, arg(5) ;[Sum] 3836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(4) ;[SSE] 3846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq rdx, xmm7 3866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsx rcx, dx 3876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov dword ptr [rax], ecx 3896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd DWORD PTR [rdi], xmm1 3906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; begin epilog 3926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rsp, 16 3936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rdi 3946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rsi 3956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_GOT 3966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_XMM 3976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org UNSHADOW_ARGS 3986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbp 3996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret 4006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 402