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%macro PROCESS_16X2X3 1 156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%if %1 166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm5, XMMWORD PTR [rdi] 186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm6, XMMWORD PTR [rdi+1] 196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm7, XMMWORD PTR [rdi+2] 206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm5, xmm0 226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm6, xmm0 236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm7, xmm0 246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%else 256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm1, XMMWORD PTR [rdi] 276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm2, XMMWORD PTR [rdi+1] 286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm3, XMMWORD PTR [rdi+2] 296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm1, xmm0 316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm2, xmm0 326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm3, xmm0 336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm5, xmm1 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm2 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm3 376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endif 386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi+rax] 396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm1, XMMWORD PTR [rdi+rdx] 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm2, XMMWORD PTR [rdi+rdx+1] 416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lddqu xmm3, XMMWORD PTR [rdi+rdx+2] 426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rsi, [rsi+rax*2] 446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rdi, [rdi+rdx*2] 456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm1, xmm0 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm2, xmm0 486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm3, xmm0 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm5, xmm1 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm2 526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm3 536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endmacro 546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%macro PROCESS_16X2X3_OFFSET 2 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%if %1 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm4, XMMWORD PTR [rdi] 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm7, XMMWORD PTR [rdi+16] 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm5, xmm7 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm5, xmm4, %2 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm6, xmm7 656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm6, xmm4, (%2+1) 666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm7, xmm4, (%2+2) 686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm5, xmm0 706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm6, xmm0 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm7, xmm0 726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%else 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm4, XMMWORD PTR [rdi] 756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3, XMMWORD PTR [rdi+16] 766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm1, xmm3 786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm1, xmm4, %2 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm3 816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm2, xmm4, (%2+1) 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm3, xmm4, (%2+2) 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm1, xmm0 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm2, xmm0 876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm3, xmm0 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm5, xmm1 906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm2 916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm3 926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endif 936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm0, XMMWORD PTR [rsi+rax] 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm4, XMMWORD PTR [rdi+rdx] 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm3, XMMWORD PTR [rdi+rdx+16] 966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm1, xmm3 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm1, xmm4, %2 996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movdqa xmm2, xmm3 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm2, xmm4, (%2+1) 1026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org palignr xmm3, xmm4, (%2+2) 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rsi, [rsi+rax*2] 1066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org lea rdi, [rdi+rdx*2] 1076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm1, xmm0 1096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm2, xmm0 1106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psadbw xmm3, xmm0 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm5, xmm1 1136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm6, xmm2 1146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm7, xmm3 1156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endmacro 1166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%macro PROCESS_16X16X3_OFFSET 2 1186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%2_aligned_by_%1: 1196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sub rdi, %1 1216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 1, %1 1236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp %2_store_off 1326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endmacro 1346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%macro PROCESS_16X8X3_OFFSET 2 1366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%2_aligned_by_%1: 1376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org sub rdi, %1 1396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 1, %1 1416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3_OFFSET 0, %1 1446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp %2_store_off 1466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org%endmacro 1486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;void int vp9_sad16x16x3_ssse3( 1506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char *src_ptr, 1516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int src_stride, 1526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char *ref_ptr, 1536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int ref_stride, 1546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int *results) 155afc4a270e3f2ecbbb47aad63c6a6a77ca902d30efgalligan@chromium.orgglobal sym(vp9_sad16x16x3_ssse3) PRIVATE 1566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgsym(vp9_sad16x16x3_ssse3): 1576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbp 1586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rbp, rsp 1596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHADOW_ARGS_TO_STACK 5 1606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SAVE_XMM 7 1616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rsi 1626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rdi 1636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rcx 1646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; end prolog 1656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rsi, arg(0) ;src_ptr 1676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(2) ;ref_ptr 1686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdx, 0xf 1706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org and rdx, rdi 1716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp .vp9_sad16x16x3_ssse3_skiptable 1736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x16x3_ssse3_jumptable: 1746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_0 - .vp9_sad16x16x3_ssse3_do_jump 1756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_1 - .vp9_sad16x16x3_ssse3_do_jump 1766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_2 - .vp9_sad16x16x3_ssse3_do_jump 1776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_3 - .vp9_sad16x16x3_ssse3_do_jump 1786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_4 - .vp9_sad16x16x3_ssse3_do_jump 1796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_5 - .vp9_sad16x16x3_ssse3_do_jump 1806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_6 - .vp9_sad16x16x3_ssse3_do_jump 1816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_7 - .vp9_sad16x16x3_ssse3_do_jump 1826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_8 - .vp9_sad16x16x3_ssse3_do_jump 1836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_9 - .vp9_sad16x16x3_ssse3_do_jump 1846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_10 - .vp9_sad16x16x3_ssse3_do_jump 1856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_11 - .vp9_sad16x16x3_ssse3_do_jump 1866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_12 - .vp9_sad16x16x3_ssse3_do_jump 1876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_13 - .vp9_sad16x16x3_ssse3_do_jump 1886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_14 - .vp9_sad16x16x3_ssse3_do_jump 1896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x16x3_ssse3_aligned_by_15 - .vp9_sad16x16x3_ssse3_do_jump 1906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x16x3_ssse3_skiptable: 1916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org call .vp9_sad16x16x3_ssse3_do_jump 1936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x16x3_ssse3_do_jump: 1946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rcx ; get the address of do_jump 1956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rax, .vp9_sad16x16x3_ssse3_jumptable - .vp9_sad16x16x3_ssse3_do_jump 1966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rax, rcx ; get the absolute address of vp9_sad16x16x3_ssse3_jumptable 1976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, dword [rax + 4*rdx] ; get the 32 bit offset from the jumptable 1996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rcx, rax 2006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 2026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 2036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp rcx 2056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 0, .vp9_sad16x16x3_ssse3 2076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 1, .vp9_sad16x16x3_ssse3 2086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 2, .vp9_sad16x16x3_ssse3 2096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 3, .vp9_sad16x16x3_ssse3 2106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 4, .vp9_sad16x16x3_ssse3 2116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 5, .vp9_sad16x16x3_ssse3 2126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 6, .vp9_sad16x16x3_ssse3 2136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 7, .vp9_sad16x16x3_ssse3 2146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 8, .vp9_sad16x16x3_ssse3 2156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 9, .vp9_sad16x16x3_ssse3 2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 10, .vp9_sad16x16x3_ssse3 2176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 11, .vp9_sad16x16x3_ssse3 2186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 12, .vp9_sad16x16x3_ssse3 2196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 13, .vp9_sad16x16x3_ssse3 2206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X16X3_OFFSET 14, .vp9_sad16x16x3_ssse3 2216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x16x3_ssse3_aligned_by_15: 2236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 1 2246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 2316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x16x3_ssse3_store_off: 2336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(4) ;Results 2346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm5 2366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm5, 8 2376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm5 2396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi], xmm0 2406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;- 2416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm6 2426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm6, 8 2436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm6 2456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi+4], xmm0 2466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;- 2476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm7 2486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm7, 8 2496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm7 2516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi+8], xmm0 2526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; begin epilog 2546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rcx 2556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rdi 2566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rsi 2576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_XMM 2586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org UNSHADOW_ARGS 2596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbp 2606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret 2616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;void int vp9_sad16x8x3_ssse3( 2636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char *src_ptr, 2646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int src_stride, 2656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; unsigned char *ref_ptr, 2666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int ref_stride, 2676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org; int *results) 268afc4a270e3f2ecbbb47aad63c6a6a77ca902d30efgalligan@chromium.orgglobal sym(vp9_sad16x8x3_ssse3) PRIVATE 2696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgsym(vp9_sad16x8x3_ssse3): 2706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rbp 2716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rbp, rsp 2726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SHADOW_ARGS_TO_STACK 5 2736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org SAVE_XMM 7 2746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rsi 2756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rdi 2766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org push rcx 2776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; end prolog 2786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rsi, arg(0) ;src_ptr 2806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(2) ;ref_ptr 2816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdx, 0xf 2836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org and rdx, rdi 2846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp .vp9_sad16x8x3_ssse3_skiptable 2866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x8x3_ssse3_jumptable: 2876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_0 - .vp9_sad16x8x3_ssse3_do_jump 2886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_1 - .vp9_sad16x8x3_ssse3_do_jump 2896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_2 - .vp9_sad16x8x3_ssse3_do_jump 2906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_3 - .vp9_sad16x8x3_ssse3_do_jump 2916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_4 - .vp9_sad16x8x3_ssse3_do_jump 2926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_5 - .vp9_sad16x8x3_ssse3_do_jump 2936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_6 - .vp9_sad16x8x3_ssse3_do_jump 2946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_7 - .vp9_sad16x8x3_ssse3_do_jump 2956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_8 - .vp9_sad16x8x3_ssse3_do_jump 2966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_9 - .vp9_sad16x8x3_ssse3_do_jump 2976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_10 - .vp9_sad16x8x3_ssse3_do_jump 2986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_11 - .vp9_sad16x8x3_ssse3_do_jump 2996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_12 - .vp9_sad16x8x3_ssse3_do_jump 3006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_13 - .vp9_sad16x8x3_ssse3_do_jump 3016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_14 - .vp9_sad16x8x3_ssse3_do_jump 3026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dd .vp9_sad16x8x3_ssse3_aligned_by_15 - .vp9_sad16x8x3_ssse3_do_jump 3036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x8x3_ssse3_skiptable: 3046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org call .vp9_sad16x8x3_ssse3_do_jump 3066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x8x3_ssse3_do_jump: 3076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rcx ; get the address of do_jump 3086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rax, .vp9_sad16x8x3_ssse3_jumptable - .vp9_sad16x8x3_ssse3_do_jump 3096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rax, rcx ; get the absolute address of vp9_sad16x8x3_ssse3_jumptable 3106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, dword [rax + 4*rdx] ; get the 32 bit offset from the jumptable 3126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org add rcx, rax 3136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 3156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 3166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org jmp rcx 3186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 0, .vp9_sad16x8x3_ssse3 3206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 1, .vp9_sad16x8x3_ssse3 3216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 2, .vp9_sad16x8x3_ssse3 3226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 3, .vp9_sad16x8x3_ssse3 3236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 4, .vp9_sad16x8x3_ssse3 3246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 5, .vp9_sad16x8x3_ssse3 3256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 6, .vp9_sad16x8x3_ssse3 3266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 7, .vp9_sad16x8x3_ssse3 3276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 8, .vp9_sad16x8x3_ssse3 3286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 9, .vp9_sad16x8x3_ssse3 3296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 10, .vp9_sad16x8x3_ssse3 3306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 11, .vp9_sad16x8x3_ssse3 3316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 12, .vp9_sad16x8x3_ssse3 3326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 13, .vp9_sad16x8x3_ssse3 3336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X8X3_OFFSET 14, .vp9_sad16x8x3_ssse3 3346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x8x3_ssse3_aligned_by_15: 3366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 1 3386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 3396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 3406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PROCESS_16X2X3 0 3416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org.vp9_sad16x8x3_ssse3_store_off: 3436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org mov rdi, arg(4) ;Results 3446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm5 3466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm5, 8 3476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm5 3496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi], xmm0 3506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;- 3516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm6 3526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm6, 8 3536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm6 3556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi+4], xmm0 3566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org;- 3576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movq xmm0, xmm7 3586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org psrldq xmm7, 8 3596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org paddw xmm0, xmm7 3616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org movd [rdi+8], xmm0 3626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ; begin epilog 3646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rcx 3656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rdi 3666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rsi 3676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org RESTORE_XMM 3686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org UNSHADOW_ARGS 3696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org pop rbp 3706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ret 371