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    pshuflw     xmm4, xmm3, 11111111b       ;k3
2176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm3, 8
2276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshuflw     xmm3, xmm3, 0b              ;k4
2376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklqdq  xmm4, xmm3                  ;k3k4
2476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
2576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm3, rcx                   ;rounding
2676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshufd      xmm3, xmm3, 0
2776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
2876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pxor        xmm2, xmm2
2976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
3076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rax, DWORD PTR arg(1)       ;pixels_per_line
3176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rdx, DWORD PTR arg(3)       ;out_pitch
3276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rcx, DWORD PTR arg(4)       ;output_height
3376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
3476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
3576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_4 1
3676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
3776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpckldq   xmm0, xmm1                  ;two row in one register
3876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm2                  ;unpack to word
3976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm0, xmm4                  ;multiply the filter factors
4076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
4176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
4276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 8
4376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm1
4476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
4576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm3                  ;rounding
4676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
4776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm0                  ;pack to byte
4876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
4976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
5076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rdi]
5176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
5276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
5376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
5476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        [rdi], xmm0
5576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
5676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
5776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
5876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
5976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
6076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro GET_PARAM 0
6176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdx, arg(5)                 ;filter ptr
6276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rsi, arg(0)                 ;src_ptr
6376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rdi, arg(2)                 ;output_ptr
6476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rcx, 0x0400040
6576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
6676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm7, [rdx]                 ;load filters
6776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
6876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshuflw     xmm6, xmm7, 11111111b       ;k3
6976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshufhw     xmm7, xmm7, 0b              ;k4
7076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklwd   xmm6, xmm6
7176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpckhwd   xmm7, xmm7
7276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm4, rcx                   ;rounding
7476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pshufd      xmm4, xmm4, 0
7576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pxor        xmm5, xmm5
7776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
7876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rax, DWORD PTR arg(1)       ;pixels_per_line
7976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rdx, DWORD PTR arg(3)       ;out_pitch
8076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movsxd      rcx, DWORD PTR arg(4)       ;output_height
8176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
8276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
8376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_8 1
8476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm5
8576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm1, xmm5
8676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
8776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm0, xmm6
8876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm1, xmm7
8976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm1
9076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm4                  ;rounding
9176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
9276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm0                  ;pack back to byte
9376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
9476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rdi]
9576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
9676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
9776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        [rdi], xmm0                 ;store the result
9876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
9976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
10076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
10176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
10276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
10376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
10476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%macro APPLY_FILTER_16 1
10576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm0, xmm5
10676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpcklbw   xmm1, xmm5
10776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpckhbw   xmm2, xmm5
10876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    punpckhbw   xmm3, xmm5
10976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
11076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm0, xmm6
11176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm1, xmm7
11276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm2, xmm6
11376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pmullw      xmm3, xmm7
11476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
11576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm1
11676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm2, xmm3
11776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
11876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm0, xmm4                  ;rounding
11976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    paddsw      xmm2, xmm4
12076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm0, 7                     ;shift
12176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psraw       xmm2, 7
12276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    packuswb    xmm0, xmm2                  ;pack back to byte
12376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%if %1
12476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1, [rdi]
12576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pavgb       xmm0, xmm1
12676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endif
12776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      [rdi], xmm0                 ;store the result
12876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
12976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rsi, [rsi + rax]
13076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    lea         rdi, [rdi + rdx]
13176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    dec         rcx
13276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org%endm
13376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
13476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_v2_sse2) PRIVATE
13576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_v2_sse2):
13676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
13776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
13876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
13976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
14076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
14176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
14276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
14376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
14476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
14576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm0, [rsi]                 ;load src
14676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rsi + rax]
14776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
14876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 0
14976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
15076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
15176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
15276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
15376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
15476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
15576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
15676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
15776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
15876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_v2_sse2) PRIVATE
15976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_v2_sse2):
16076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
16176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
16276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
16376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
16476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
16576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
16676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
16776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
16876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
16976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
17076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm0, [rsi]                 ;0
17176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rsi + rax]           ;1
17276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
17376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 0
17476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
17576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
17676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
17776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
17876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
17976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
18076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
18176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
18276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
18376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
18476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_v2_sse2) PRIVATE
18576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_v2_sse2):
18676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
18776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
18876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
18976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
19076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
19176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
19276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
19376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
19476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
19576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
19676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm0, [rsi]               ;0
19776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm1, [rsi + rax]         ;1
19876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm2, xmm0
19976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm3, xmm1
20076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
20176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 0
20276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
20376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
20476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
20576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
20676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
20776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
20876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
20976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
21076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
21176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
21276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_v2_avg_sse2) PRIVATE
21376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_v2_avg_sse2):
21476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
21576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
21676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
21776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
21876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
21976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
22076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
22176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
22276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
22376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm0, [rsi]                 ;load src
22476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movd        xmm1, [rsi + rax]
22576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
22676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 1
22776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
22876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
22976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
23076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
23176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
23276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
23376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
23476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
23576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
23676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_v2_avg_sse2) PRIVATE
23776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_v2_avg_sse2):
23876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
23976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
24076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
24176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
24276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
24376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
24476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
24576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
24676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
24776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
24876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm0, [rsi]                 ;0
24976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movq        xmm1, [rsi + rax]           ;1
25076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
25176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 1
25276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
25376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
25476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
25576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
25676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
25776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
25876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
25976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
26076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
26176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
26276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_v2_avg_sse2) PRIVATE
26376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_v2_avg_sse2):
26476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
26576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
26676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
26776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
26876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
26976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
27076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
27176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
27276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
27376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
27476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm0, [rsi]               ;0
27576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu        xmm1, [rsi + rax]         ;1
27676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm2, xmm0
27776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa        xmm3, xmm1
27876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
27976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 1
28076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
28176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
28276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
28376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
28476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
28576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
28676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
28776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
28876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
28976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
29076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_h2_sse2) PRIVATE
29176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_h2_sse2):
29276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
29376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
29476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
29576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
29676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
29776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
29876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
29976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
30076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
30176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
30276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
30376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
30476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
30576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 0
30676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
30776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
30876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
30976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
31076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
31176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
31276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
31376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
31476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
31576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_h2_sse2) PRIVATE
31676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_h2_sse2):
31776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
31876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
31976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
32076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
32176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
32276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
32376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
32476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
32576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
32676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
32776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
32876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
32976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
33076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
33176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 0
33276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
33376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
33476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
33576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
33676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
33776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
33876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
33976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
34076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
34176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
34276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_h2_sse2) PRIVATE
34376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_h2_sse2):
34476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
34576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
34676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
34776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
34876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
34976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
35076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
35176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
35276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
35376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
35476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0,   [rsi]               ;load src
35576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1,   [rsi + 1]
35676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm2, xmm0
35776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm3, xmm1
35876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
35976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 0
36076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
36176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
36276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
36376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
36476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
36576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
36676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
36776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
36876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
36976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
37076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d4_h2_avg_sse2) PRIVATE
37176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d4_h2_avg_sse2):
37276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
37376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
37476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
37576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
37676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
37776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
37876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
37976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM_4
38076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
38176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
38276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
38376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
38476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
38576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_4 1
38676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
38776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
38876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
38976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
39076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
39176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
39276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
39376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
39476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
39576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d8_h2_avg_sse2) PRIVATE
39676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d8_h2_avg_sse2):
39776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
39876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
39976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
40076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
40176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
40276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
40376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
40476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
40576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
40676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
40776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0, [rsi]                 ;load src
40876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm1, xmm0
40976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    psrldq      xmm1, 1
41076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
41176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_8 1
41276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
41376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
41476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
41576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
41676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
41776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
41876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
41976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
42076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
42176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
42276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgglobal sym(vp9_filter_block1d16_h2_avg_sse2) PRIVATE
42376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgsym(vp9_filter_block1d16_h2_avg_sse2):
42476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rbp
42576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    mov         rbp, rsp
42676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SHADOW_ARGS_TO_STACK 6
42776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    SAVE_XMM 7
42876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rsi
42976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    push        rdi
43076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; end prolog
43176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
43276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    GET_PARAM
43376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org.loop:
43476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm0,   [rsi]               ;load src
43576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqu      xmm1,   [rsi + 1]
43676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm2, xmm0
43776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    movdqa      xmm3, xmm1
43876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
43976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    APPLY_FILTER_16 1
44076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    jnz         .loop
44176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org
44276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ; begin epilog
44376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rdi
44476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rsi
44576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    RESTORE_XMM
44676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    UNSHADOW_ARGS
44776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    pop         rbp
44876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org    ret
449