176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;
276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;
476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  Use of this source code is governed by a BSD-style license
576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  that can be found in the LICENSE file in the root of the source
676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  tree. An additional intellectual property rights grant can be found
776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  in the file PATENTS.  All contributing project authors may
876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;  be found in the AUTHORS file in the root of the source tree.
976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org;
1076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
1176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%include "vpx_ports/x86_abi_support.asm"
1276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
1376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro GET_PARAM_4 0
1476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdx, arg(5)                 ;filter ptr
1576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rsi, arg(0)                 ;src_ptr
1676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdi, arg(2)                 ;output_ptr
1776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rcx, 0x0400040
1876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
1976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm3, [rdx]                 ;load filters
2076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm3, 6
2176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packsswb    xmm3, xmm3
2276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshuflw     xmm3, xmm3, 0b              ;k3_k4
2376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
2476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm2, rcx                   ;rounding
2576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshufd      xmm2, xmm2, 0
2676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
2776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rax, DWORD PTR arg(1)       ;pixels_per_line
2876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rdx, DWORD PTR arg(3)       ;out_pitch
2976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rcx, DWORD PTR arg(4)       ;output_height
3076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
3176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
3276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_4 1
3376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm1
3476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmaddubsw   xmm0, xmm3
3576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
3676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm2                  ;rounding
3776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
3876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm0                  ;pack to byte
3976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
4076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
4176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rdi]
4276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
4376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
4476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        [rdi], xmm0
4576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
4676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
4776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
4876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
4976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
5076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro GET_PARAM 0
5176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdx, arg(5)                 ;filter ptr
5276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rsi, arg(0)                 ;src_ptr
5376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdi, arg(2)                 ;output_ptr
5476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rcx, 0x0400040
5576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
5676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm7, [rdx]                 ;load filters
5776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm7, 6
5876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packsswb    xmm7, xmm7
5976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshuflw     xmm7, xmm7, 0b              ;k3_k4
6076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklwd   xmm7, xmm7
6176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
6276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm6, rcx                   ;rounding
6376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshufd      xmm6, xmm6, 0
6476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
6576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rax, DWORD PTR arg(1)       ;pixels_per_line
6676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rdx, DWORD PTR arg(3)       ;out_pitch
6776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rcx, DWORD PTR arg(4)       ;output_height
6876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
6976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_8 1
7176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm1
7276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmaddubsw   xmm0, xmm7
7376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm6                  ;rounding
7576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
7676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm0                  ;pack back to byte
7776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
7976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rdi]
8076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
8176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
8276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        [rdi], xmm0                 ;store the result
8376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
8476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
8576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
8676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
8776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
8876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
8976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_16 1
9076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm1
9176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpckhbw   xmm2, xmm1
9276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmaddubsw   xmm0, xmm7
9376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmaddubsw   xmm2, xmm7
9476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
9576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm6                  ;rounding
9676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm2, xmm6
9776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
9876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm2, 7
9976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm2                  ;pack back to byte
10076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
10176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
10276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1, [rdi]
10376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
10476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
10576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      [rdi], xmm0                 ;store the result
10676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
10776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
10876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
10976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
11076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
11176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
11276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_v2_ssse3) PRIVATE
11376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_v2_ssse3):
11476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
11576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
11676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
11776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
11876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
11976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
12076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
12176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
12276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
12376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm0, [rsi]                 ;load src
12476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rsi + rax]
12576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
12676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 0
12776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
12876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
12976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
13076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
13176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
13276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
13376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
13476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
13576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
13676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_v2_ssse3) PRIVATE
13776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_v2_ssse3):
13876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
13976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
14076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
14176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
14276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
14376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
14476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
14576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
14676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
14776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
14876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm0, [rsi]                 ;0
14976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rsi + rax]           ;1
15076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
15176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 0
15276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
15376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
15476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
15576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
15676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
15776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
15876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
15976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
16076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
16176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
16276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_v2_ssse3) PRIVATE
16376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_v2_ssse3):
16476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
16576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
16676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
16776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
16876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
16976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
17076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
17176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
17276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
17376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
17476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm0, [rsi]               ;0
17576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm1, [rsi + rax]         ;1
17676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm2, xmm0
17776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
17876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 0
17976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
18076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
18176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
18276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
18376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
18476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
18576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
18676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
18776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
18876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
18976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_v2_avg_ssse3) PRIVATE
19076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_v2_avg_ssse3):
19176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
19276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
19376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
19476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
19576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
19676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
19776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
19876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
19976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
20076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm0, [rsi]                 ;load src
20176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rsi + rax]
20276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
20376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 1
20476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
20576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
20676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
20776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
20876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
20976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
21076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
21176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
21276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
21376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_v2_avg_ssse3) PRIVATE
21476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_v2_avg_ssse3):
21576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
21676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
21776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
21876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
21976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
22076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
22176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
22276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
22376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
22476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
22576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm0, [rsi]                 ;0
22676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rsi + rax]           ;1
22776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
22876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 1
22976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
23076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
23176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
23276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
23376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
23476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
23576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
23676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
23776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
23876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
23976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_v2_avg_ssse3) PRIVATE
24076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_v2_avg_ssse3):
24176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
24276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
24376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
24476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
24576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
24676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
24776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
24876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
24976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
25076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
25176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm0, [rsi]               ;0
25276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm1, [rsi + rax]         ;1
25376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm2, xmm0
25476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
25576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 1
25676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
25776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
25876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
25976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
26076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
26176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
26276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
26376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
26476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
26576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
26676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_h2_ssse3) PRIVATE
26776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_h2_ssse3):
26876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
26976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
27076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
27176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
27276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
27376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
27476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
27576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
27676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
27776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
27876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
27976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
28076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
28176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 0
28276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
28376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
28476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
28576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
28676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
28776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
28876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
28976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
29076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
29176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_h2_ssse3) PRIVATE
29276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_h2_ssse3):
29376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
29476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
29576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
29676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
29776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
29876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
29976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
30076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
30176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
30276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
30376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
30476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
30576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
30676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
30776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 0
30876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
30976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
31076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
31176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
31276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
31376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
31476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
31576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
31676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
31776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
31876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_h2_ssse3) PRIVATE
31976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_h2_ssse3):
32076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
32176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
32276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
32376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
32476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
32576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
32676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
32776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
32876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
32976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
33076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0,   [rsi]               ;load src
33176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1,   [rsi + 1]
33276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm2, xmm0
33376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
33476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 0
33576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
33676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
33776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
33876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
33976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
34076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
34176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
34276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
34376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
34476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
34576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_h2_avg_ssse3) PRIVATE
34676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_h2_avg_ssse3):
34776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
34876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
34976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
35076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
35176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
35276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
35376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
35476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
35576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
35676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
35776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
35876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
35976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
36076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 1
36176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
36276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
36376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
36476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
36576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
36676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
36776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
36876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
36976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
37076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_h2_avg_ssse3) PRIVATE
37176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_h2_avg_ssse3):
37276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
37376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
37476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
37576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
37676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
37776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
37876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
37976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
38076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
38176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
38276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
38376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
38476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
38576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
38676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 1
38776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
38876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
38976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
39076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
39176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
39276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
39376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
39476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
39576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
39676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
39776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_h2_avg_ssse3) PRIVATE
39876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_h2_avg_ssse3):
39976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
40076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
40176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
40276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
40376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
40476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
40576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
40676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
40776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
40876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
40976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0,   [rsi]               ;load src
41076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1,   [rsi + 1]
41176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm2, xmm0
41276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
41376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 1
41476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
41576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
41676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
41776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
41876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
41976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
42076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
42176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
42276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
423