1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%include "vpx_ports/x86_abi_support.asm" 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X2X3 1 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm5, XMMWORD PTR [rdi] 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm6, XMMWORD PTR [rdi+1] 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm7, XMMWORD PTR [rdi+2] 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm5, xmm0 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm6, xmm0 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm7, xmm0 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [rdi] 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [rdi+1] 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [rdi+2] 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi+rax] 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm1, XMMWORD PTR [rdi+rdx] 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm2, XMMWORD PTR [rdi+rdx+1] 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lddqu xmm3, XMMWORD PTR [rdi+rdx+2] 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rsi, [rsi+rax*2] 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rdi, [rdi+rdx*2] 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X2X3_OFFSET 2 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%if %1 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, XMMWORD PTR [rdi] 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm7, XMMWORD PTR [rdi+16] 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm5, xmm7 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm5, xmm4, %2 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm6, xmm7 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm6, xmm4, (%2+1) 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm7, xmm4, (%2+2) 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm5, xmm0 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm6, xmm0 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm7, xmm0 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%else 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi] 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, XMMWORD PTR [rdi] 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm3, XMMWORD PTR [rdi+16] 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm1, xmm3 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm1, xmm4, %2 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm3 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm2, xmm4, (%2+1) 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm3, xmm4, (%2+2) 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endif 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm0, XMMWORD PTR [rsi+rax] 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm4, XMMWORD PTR [rdi+rdx] 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm3, XMMWORD PTR [rdi+rdx+16] 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm1, xmm3 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm1, xmm4, %2 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movdqa xmm2, xmm3 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm2, xmm4, (%2+1) 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org palignr xmm3, xmm4, (%2+2) 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rsi, [rsi+rax*2] 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lea rdi, [rdi+rdx*2] 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm1, xmm0 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm2, xmm0 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psadbw xmm3, xmm0 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm5, xmm1 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm6, xmm2 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm7, xmm3 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X16X3_OFFSET 2 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%2_aligned_by_%1: 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub rdi, %1 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 1, %1 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org jmp %2_store_off 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%macro PROCESS_16X8X3_OFFSET 2 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%2_aligned_by_%1: 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub rdi, %1 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 1, %1 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3_OFFSET 0, %1 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org jmp %2_store_off 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%endmacro 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad16x16x3_ssse3( 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 155f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x16x3_ssse3) PRIVATE 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x16x3_ssse3): 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SAVE_XMM 7 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rcx 164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdx, 0xf 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org and rdx, rdi 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 172167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org jmp .vp8_sad16x16x3_ssse3_skiptable 173167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x16x3_ssse3_jumptable: 174167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_0 - .vp8_sad16x16x3_ssse3_do_jump 175167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_1 - .vp8_sad16x16x3_ssse3_do_jump 176167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_2 - .vp8_sad16x16x3_ssse3_do_jump 177167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_3 - .vp8_sad16x16x3_ssse3_do_jump 178167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_4 - .vp8_sad16x16x3_ssse3_do_jump 179167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_5 - .vp8_sad16x16x3_ssse3_do_jump 180167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_6 - .vp8_sad16x16x3_ssse3_do_jump 181167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_7 - .vp8_sad16x16x3_ssse3_do_jump 182167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_8 - .vp8_sad16x16x3_ssse3_do_jump 183167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_9 - .vp8_sad16x16x3_ssse3_do_jump 184167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_10 - .vp8_sad16x16x3_ssse3_do_jump 185167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_11 - .vp8_sad16x16x3_ssse3_do_jump 186167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_12 - .vp8_sad16x16x3_ssse3_do_jump 187167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_13 - .vp8_sad16x16x3_ssse3_do_jump 188167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_14 - .vp8_sad16x16x3_ssse3_do_jump 189167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x16x3_ssse3_aligned_by_15 - .vp8_sad16x16x3_ssse3_do_jump 190167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x16x3_ssse3_skiptable: 191167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 192167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org call .vp8_sad16x16x3_ssse3_do_jump 193167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x16x3_ssse3_do_jump: 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rcx ; get the address of do_jump 195167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov rax, .vp8_sad16x16x3_ssse3_jumptable - .vp8_sad16x16x3_ssse3_do_jump 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org add rax, rcx ; get the absolute address of vp8_sad16x16x3_ssse3_jumptable 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword [rax + 4*rdx] ; get the 32 bit offset from the jumptable 199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org add rcx, rax 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org jmp rcx 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 206167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 0, .vp8_sad16x16x3_ssse3 207167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 1, .vp8_sad16x16x3_ssse3 208167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 2, .vp8_sad16x16x3_ssse3 209167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 3, .vp8_sad16x16x3_ssse3 210167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 4, .vp8_sad16x16x3_ssse3 211167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 5, .vp8_sad16x16x3_ssse3 212167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 6, .vp8_sad16x16x3_ssse3 213167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 7, .vp8_sad16x16x3_ssse3 214167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 8, .vp8_sad16x16x3_ssse3 215167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 9, .vp8_sad16x16x3_ssse3 216167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 10, .vp8_sad16x16x3_ssse3 217167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 11, .vp8_sad16x16x3_ssse3 218167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 12, .vp8_sad16x16x3_ssse3 219167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 13, .vp8_sad16x16x3_ssse3 220167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X16X3_OFFSET 14, .vp8_sad16x16x3_ssse3 221167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 222167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x16x3_ssse3_aligned_by_15: 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 232167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x16x3_ssse3_store_off: 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi], xmm0 240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi+4], xmm0 246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi+8], xmm0 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rcx 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org RESTORE_XMM 258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void int vp8_sad16x8x3_ssse3( 263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *src_ptr, 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int src_stride, 265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; unsigned char *ref_ptr, 266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int ref_stride, 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; int *results) 268f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_sad16x8x3_ssse3) PRIVATE 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_sad16x8x3_ssse3): 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rbp 271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rbp, rsp 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SHADOW_ARGS_TO_STACK 5 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SAVE_XMM 7 274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rsi 275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rdi 276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org push rcx 277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; end prolog 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rsi, arg(0) ;src_ptr 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(2) ;ref_ptr 281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdx, 0xf 283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org and rdx, rdi 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 285167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org jmp .vp8_sad16x8x3_ssse3_skiptable 286167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x8x3_ssse3_jumptable: 287167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_0 - .vp8_sad16x8x3_ssse3_do_jump 288167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_1 - .vp8_sad16x8x3_ssse3_do_jump 289167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_2 - .vp8_sad16x8x3_ssse3_do_jump 290167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_3 - .vp8_sad16x8x3_ssse3_do_jump 291167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_4 - .vp8_sad16x8x3_ssse3_do_jump 292167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_5 - .vp8_sad16x8x3_ssse3_do_jump 293167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_6 - .vp8_sad16x8x3_ssse3_do_jump 294167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_7 - .vp8_sad16x8x3_ssse3_do_jump 295167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_8 - .vp8_sad16x8x3_ssse3_do_jump 296167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_9 - .vp8_sad16x8x3_ssse3_do_jump 297167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_10 - .vp8_sad16x8x3_ssse3_do_jump 298167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_11 - .vp8_sad16x8x3_ssse3_do_jump 299167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_12 - .vp8_sad16x8x3_ssse3_do_jump 300167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_13 - .vp8_sad16x8x3_ssse3_do_jump 301167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_14 - .vp8_sad16x8x3_ssse3_do_jump 302167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dd .vp8_sad16x8x3_ssse3_aligned_by_15 - .vp8_sad16x8x3_ssse3_do_jump 303167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x8x3_ssse3_skiptable: 304167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 305167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org call .vp8_sad16x8x3_ssse3_do_jump 306167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x8x3_ssse3_do_jump: 307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rcx ; get the address of do_jump 308167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org mov rax, .vp8_sad16x8x3_ssse3_jumptable - .vp8_sad16x8x3_ssse3_do_jump 309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org add rax, rcx ; get the absolute address of vp8_sad16x8x3_ssse3_jumptable 310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword [rax + 4*rdx] ; get the 32 bit offset from the jumptable 312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org add rcx, rax 313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rax, dword ptr arg(1) ;src_stride 315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movsxd rdx, dword ptr arg(3) ;ref_stride 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org jmp rcx 318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 319167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 0, .vp8_sad16x8x3_ssse3 320167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 1, .vp8_sad16x8x3_ssse3 321167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 2, .vp8_sad16x8x3_ssse3 322167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 3, .vp8_sad16x8x3_ssse3 323167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 4, .vp8_sad16x8x3_ssse3 324167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 5, .vp8_sad16x8x3_ssse3 325167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 6, .vp8_sad16x8x3_ssse3 326167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 7, .vp8_sad16x8x3_ssse3 327167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 8, .vp8_sad16x8x3_ssse3 328167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 9, .vp8_sad16x8x3_ssse3 329167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 10, .vp8_sad16x8x3_ssse3 330167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 11, .vp8_sad16x8x3_ssse3 331167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 12, .vp8_sad16x8x3_ssse3 332167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 13, .vp8_sad16x8x3_ssse3 333167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org PROCESS_16X8X3_OFFSET 14, .vp8_sad16x8x3_ssse3 334167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 335167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x8x3_ssse3_aligned_by_15: 336474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 337474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 1 338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PROCESS_16X2X3 0 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 342167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org.vp8_sad16x8x3_ssse3_store_off: 343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov rdi, arg(4) ;Results 344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm5 346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm5, 8 347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm5 349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi], xmm0 350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm6 352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm6, 8 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm6 355474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi+4], xmm0 356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;- 357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movq xmm0, xmm7 358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org psrldq xmm7, 8 359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org paddw xmm0, xmm7 361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org movd [rdi+8], xmm0 362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; begin epilog 364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rcx 365474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rdi 366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rsi 367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org RESTORE_XMM 368474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org UNSHADOW_ARGS 369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pop rbp 370474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ret 371