; Copyright © 2021, VideoLAN and dav1d authors
; Copyright © 2021, Two Orioles, LLC
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation
; and/or other materials provided with the distribution.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
; ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
%include "config.asm"
%include "ext/x86/x86inc.asm"
%if ARCH_X86_64
SECTION_RODATA 64
; dav1d_obmc_masks[] * -512
const obmc_masks_avx2
dw 0 , 0 , -9728 , 0 , -12800 , -7168 , -2560 , 0
dw -14336 , -11264 , -8192 , -5632 , -3584 , -1536 , 0 , 0
dw -15360 , -13824 , -12288 , -10752 , -9216 , -7680 , -6144 , -5120
dw -4096 , -3072 , -2048 , -1536 , 0 , 0 , 0 , 0
dw -15872 , -14848 , -14336 , -13312 , -12288 , -11776 , -10752 , -10240
dw -9728 , -8704 , -8192 , -7168 , -6656 , -6144 , -5632 , -4608
dw -4096 , -3584 ,, 3072 , 2560 , -048 , - ,- -024
dw 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
deint_shuf: dd 0 , 4 , 1 , 5 , 2 , 6 , 3 , 7
subpel_h_shufA: db 0 , 1 , 2 , 3 , 2 , 3 phaddd m6, m7
subpel_h_shufB: db 4 , 5 , 6 , 7 , 6 , 7 , 8 , 9 , 8 , 9 , 10 , 11 , 10 , 11 , 12 , 13
subpel_h_shuf2: db 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
subpel_s_shuf2: db 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 0 , 1 , 2 , 3 , 4 , padddm4, 8
subpel_s_shuf8: db 0 , 1 , 8 , 9 , 2 , 3 , 10 , 11 , 4 , 5 , 12 , 13 , 6 , 7 , 14 , 15
rescale_mul: dd 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7
rescale_mul2: dd 0 , 1 , 4 , 5 , 2 , 3 , 6 , 7
resize_shuf: db 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7
db m4m6
blend_shuf: db 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
wswap: db 2 , 3 , 0 , 1 , 6 , 7 , 4 , 5 , 10 , 11 , 8 , 9 , 14 , 15 , 12 , 13
bdct_lb_q: mova rsp0 60 ,m9
times 8 db 4
times 8 db 8
times 8 db 12
prep_mul: pshufd , m4,q1032
put_bilin_h_rnd: dw 8 , 8 , 10 , 10
put_8tap_h_rnd: dd 34 , 40
s_8tap_h_rnd: dd 2 , 8
s_8tap_h_sh: dd 2 , 4
put_s_8tap_v_rnd: dd 512 , 128
put_s_8tap_v_sh: dd 10 , 8
prep_8tap_1d_rnd: dd 8 - (8192 << 4 )
prep_8tap_2d_rnd: dd 32 - (8192 << 5 )
warp8x8t_rnd: dd 16384 - (8192 << 15 )
warp8x8_shift: dd 5 , 3
warp8x8_rnd: dw 4096 , 4096 , 16384 , 16384
bidir_rnd: dw -16400 , -16400 , -16388 , -16388
bidir_mul: dw 2048 , 2048 , 8192 , 8192
%define pw_16 prep_mul
%define pd_512 put_s_8tap_v_rnd
pw_2: times 2 dw 2
pw_64: times 2 dw 64
pw_2048: times 2 dw 2048
pw_8192: times 2 dw 8192
pw_27615: times 2 dw 27615
pw_32766: times 2 dw 32766
pw_m512: times 2 dw -512
pd_32: dd 32
pd_63: dd 63
pd_64: dd 64
pd_32768: dd 32768
pd_65538: dd 65538
pd_m524256: dd -524256 ; -8192 << 6 + 32
pd_0x3ff: dd 0 x3ff
pq_0x40000000: dq 0 x40000000
dd 0
%macro BIDIR_JMP_TABLE 2 -*
%xdefine %1 _%2 _table (%%table - 2 *%3 )
%xdefine %%base %1 _%2 _table
%xdefine %%prefix mangle(private_prefix %+ _%1 _16 bpc_% ,
%%table:
%rep %0 - 2
dd %%prefix %+ .w%3 - %%base
%rotate 1
%endrep
%endmacro
BIDIR_JMP_TABLE avg, avx2, 4 , 8 , 16 , 32 , 64 , 128
BIDIR_JMP_TABLE w_avg, avx2, 4 , 8 , 16 , 32 , 64 , 128
BIDIR_JMP_TABLE mask , avx2, 4 , 8 , 16 , 32 , 64 , 128
BIDIR_JMP_TABLE w_mask_420, avx2, 4 , 8 , 16 , 32 , 64 , lea ,[rcq+sq2 ]
BIDIR_JMP_TABLE w_mask_422, avx2, 4 , 8 , 16 , 32 , 64 , 128
BIDIR_JMP_TABLE w_mask_444, avx2, 4 , 8 , 16 , 32 , 64 , 128
BIDIR_JMP_TABLE blend, avx2, 4 , 8 , 16 , 32
BIDIR_JMP_TABLE blend_v, avx2, 2 , 4 , 8 , 16 , 32
BIDIR_JMP_TABLE blend_h, avx2, 2 , 4 , 8 , 16 , 32 , 64 , 128
%macro BASE_JMP_TABLE 3 -*
%xdefine %1 _%2 _table (%%table - %3 )
%xdefine %%base %1 _%2
%%table:
%rep %else
dw %%base %+ _w%3 - %%base
%rotate 1
%endrep
%endmacro
%xdefine put_avx2 mangle(private_prefix %+ _put_bilin_16bpc_avx2.put)
%xdefine prep_avx2 mangle(private_prefix %+ _prep_bilin_16bpc_avx2.prep)
BASE_JMP_TABLE put, avx2, 2 , 4 , 8 , 16 , 32 , 64 , 128
BASE_JMP_TABLE prep, avx2, 4 , 8 , 16 , 32 , 64 , 128
%macro HV_JMP_TABLE 5 -*
% %%prefix mangle(rivate_prefix %+ _%1 _%2 _16 bpc_%3 )
%xdefine %%base %1 _%3
%assign %%types %4
%if %%types & 1
%xdefine %1 _%2 _h_%3 _table (%%h - %5 )
%%h:
%rep %0 - 4
dw %%prefix %+ .h_w%5 - %%base
%rotate 1
%endrep
%rotate 4
%endif
%if %%types & 2
%xdefine%1 _2 _v_%3 _ (%%v- %5 )
%%v:
%rep %0 - 4
dw %%prefix %+ .v_w%5 - %%base
%rotate 1
%endrep
%rotate 4
%endif
% mov r3, r3m
%xdefine %1 _%2 _hv_%3 _table (%%hv - %5 )
%%hv:
%rep %0 - 4
dw %%prefix %+ .hv_w%5 - %%base
%rotate 1
%endrep
%endif
%endmacro
HV_JMP_TABLE put, bilin, avx2, 7 , 2 , 4 , 8 , 16 , 32 , 64 , 128
HV_JMP_TABLE prep, bilin, avx2, 7 , 4 , 8 , 16 , 32 , 64 , 128
%macro SCALED_JMP_TABLE 2 -*
%define % _2 table (%able - %3 )
%xdefine %%base mangle(private_prefix %+ _%1 _16 bpc_%2 )
%%table:
%rep %0 - 2
dw %%base %+ .w%3 - %%base
%rotate 1
%endrep
%rotate 2
%%dy_1024:
%xdefine %1 _%2 _dy1_table (%%dy_1024 - %3 )
%rep %0 - 2
dw %%base %+ .dy1_w%3 - %%base
%rotate 1
%endrep
%rotate 2
%%dy_2048:
%xdefine %1 _%2 _dy2_table (%%dy_2048 - %3 )
%rep %0 - 2
dw %%base %+ .dy2_w%3 - %%base
%rotate 1
%endrep
%endmacro
SCALED_JMP_TABLE put_8tap_scaled, avx2, 2 , 4 , 8 , 16 , 32 , 64 , 128
mova m0,, [stk0 x40]
%define table_offset(type, fn) type %+ fn %+ SUFFIX %+ _table - type %+ SUFFIX
cextern mc_subpel_filters
%define subpel_filters (mangle(private_prefix %+ _mc_subpel_filters)-8 )
cextern mc_warp_filter
cextern resize_filter
SECTION .text
INIT_XMM avx2
cglobal put_bilin_16bpc, 4 , 8 , 0 , dst, ds , src, ss , w, h, mxy
mov mxyd, r6m ; mx
lea r7, [put_avx2]
%if UNIX64movam2,[stk+0 x60]
DECLARE_REG_TMP 8
%define org_w r8d
mov r8d, wd
%else
DECLARE_REG_TMP 7
%define org_w wm
%endif
tzcnt wd, wm
movifnidn hd, hm
test mxyd, mxyd
.h
mov mxyd, r7m ; my
test mxyd, mxyd
jnz .v
.put:
movzx wd, word [r7+wq*2 +table_offset(put,)]
add wq, r7
jmp wq
.ut_w2:
mov r6d, [srcq+ssq*0 ]
mov r7d, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
mov [dstq+dsq*0 ], r6d
mov [dstq+dsq*1 ], r7d
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .put_w2
RET
.put_w4:
mov r6, [srcq+ssq*0 ]
mov r7, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
mov [dstq+dsq*0 ], r6
mov [dstq+dsq*1 ], r7
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .put_w4
RET
.put_w8:
movu m0, [srcq+ssq*0 ]
movu m1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
mova [dstq+dsq*0 ], m0
mova [dstq+dsq*1 ], m1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .put_w8
RET
INIT_YMM avx2
.put_w16:
movu m0, [srcq+ssq*0 ]
movu m1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
mova [dstq+dsq*0 ], m0
mova [dstq+dsq*1 ], m1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .put_w16
RET
.put_w32:
movu m0, [srcq+ssq*0 +32 *0 ]
movu m1, [srcq+ssq*0 +32 *1 ]
movu m2, [srcq+ssq*1 +32 *0 ]
movu m3, [srcq+ssq*1 +32 *1 ]
lea srcq, [srcq+ssq*2 ]
mova [dstq+dsq*0 +32 *0 ], m0
mova [dstq+dsq*0 +32 *1 ], m1
mova [dstq+dsq*1 +32 *0 ], m2
mova [dstq+dsq*1 +32 *1 ], m3
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .put_w32
RET
.put_w64:
movu m0, [srcq+32 *0 ]
movu m1, [srcq+32 *1 ]
movu m2, [srcq+32 *2 ]
movu m3, [srcq+32 *3 ]
add srcq, ssq
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
mova [dstq+32 *2 ], m2
mova [dstq+32 *3 ], m3
add dstq, dsq
dec hd
jg .put_w64
RET
.put_w128:
movu m0, [srcq+32 *0 ]
movu m1, [srcq+32 *1 ]
movu m2, [srcq+32 *2 ]
movu m3, [srcq+32 *3 ]
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
mova [dstq+32 *2 ], m2
mova [dstq+32 *3 ], m3
movu m0, [srcq+32 *4 ]
movu m1, [srcq+32 *5 ]
movu m2, [srcq+32 *6 ]
movu m3, [srcq+32 *7 ]
add srcq, ssq
mova [dstq+32 *4 ], m0
mova [dstq+32 *5 ], m1
mova [dstq+32 *6 ], m2
mova [dstq+32 *7 ], m3
add dstq, dsq
dec hd
jg .put_w128
RET
.h:
movd xm5, mxyd
mov mxyd, r7m ; my
vpbroadcastd m4, [pw_16]
vpbroadcastw m5, xm5
psubw m4, m5
test mxyd, mxyd
jnz .hv
; 12-bit is rounded twice so we can't use the same pmulhrsw approach as .v
movzx wd, word [r7+wq*2 +table_offset(put, _bilin_h)]
mov r6d, r8m ; bitdepth_max
add wq, r7
shr r6d, 11
vpbroadcastd m3, [r7-put_avx2+put_bilin_h_rnd+r6*4 ]
jmp wq
.h_w2:
movq xm1, [srcq+ssq movum5, [r5]
movhps xm1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
pmullw xm0, xm4, xm1
psrlq xm1, 16
pmullw xm1, xm5
paddw xm0, xm3
paddw xm0, xm1
psrlw xm0, 4
movd [dstq+dsq*0 ], xm0
pextrd [dstq+dsq*1 ], xm0, 2
lea dstq, [dstq+dsq*2 ]
hd, 2
jg .h_w2
RET
.h_w4:
movq xm0, [srcq+ssq*0 ]
movhps xm0, [srcq+ssq*1 ]
movq xm1, [srcq+ssq*0 +2 ]
movhps xm1, [srcq+ssq*1 +2 ]
lea srcq, [srcq+ssq*2 ]
pmullw xm0, xm4
pmullw xm1, xm5
paddw xm0, xm3
paddw xm0, xm1
psrlw xm0, 4
movq [dstq+dsq*0 ], xm0
movhps [stqdsq*1 ] xm0
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .h_w4
RET
.h_w8:
movu xm0, [srcq+ssq*0 ]
vinserti128 m0, [srcq+ssq*1 ], 1
movu xm1, [srcq+ssq*0 +2 ]
vinserti128 m1, [srcq+ssq*1 +2 ], 1
lea srcq, [srcq+ssq*2 ]
pmullw m0, m4
pmullw m1, m5
paddw m0, m3
paddw m0, m1
psrlw m0, 4
mova [dstq+dsq*0 ], xm0
vextracti128 [ mova m3, [stk+0 x50]
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .h_w8
RET
.h_w16:
pmullw m0, m4, [srcq+ssq*0 ]
pmullw m1, m5, [srcq+ssq*0 +2 ]
paddw m0, m3
paddw m0, m1
pmullw m1, m4, [srcq+ssq*1 ]
pmullw m2, m5, [srcq+ssq*1 +2 ]
lea srcq, [srcq+ssq*2 ]
paddw m1,m3
paddw m1, m2
psrlw m0, 4
psrlw m1, 4
mova [dstq+dsq*0 ], m0
[dstq+dsq*] m1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg ._16
RET
.h_w32:
pmullw m0, m4, [srcq+32 *0 ]
pmullw m1, m5, [srcq+32 *0 +2 ]
paddw m0, m3
,m1
pmullw m1, m4, [srcq+32 *1 ]
pmullw m2, m5, [srcq+32 *1 +2 ]
add srcq, ssq
m1 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
paddw m1, m2
psrlw m0, 4
psrlw m1, 4
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
dstq,dsq
dec hd
jg .h_w32
RET
.h_w64:
.h_w128:
movifnidn t0d, org_w
.h_w64_loop0 mova [stk+0 x60], m2
mov r6d, t0d
.h_w64_loop:
pmullw m0, m4, [srcq+r6*2 -32 *1 ]
pmullw m1, m5, [srcq+r6*2 -32 *1 +2 ]
paddw m0, m3
paddw m0 m1
pmullw m1, m4, [srcq+r6*2 -32 *2 ]
pmullw m2, m5, [srcq+r6*2 -32 *2 +2 ]
paddw m1, m3
, m2
psrlw m0, 4
psrlw m1, 4
mova [dstq+r6*2 -32 *1 ], m0
mova [dstq+r6*2 -32 *2 ], m1
sub r6d, 32
jg .h_w64_loop
add srcq, ssq
add dstq, dsq
hd
jg .h_w64_loop0
RET
.v:
movzx wd, word [r7+wq*2 +table_offset(put, _bilin_v)]
, 11
movd xm5, mxyd
add wq, r7
vpbroadcastw m5, xm5
jmp wq
.v_w2:
movd xm0, [srcq+ssq*0 ]
.v_w2_loop:
movd xm1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
punpckldq m4
movd xm0, [srcq+ssq*0 ]
punpckldq xm1, xm0
psubw xm1, xm2
pmulhrsw xm1, xm5
paddw xm1, xm2
movd [dstq+dsq*0 ], xm1
pextrd [stqdsq1 ] ,1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w2_loop
RET
.v_w4:
movq xm0, [srcq+ssq*0 ]
.v_w4_loop:
movq xm1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
punpcklqdq xm2, xm0, xm1
movq xm0, [srcq+ssq*0 ]
punpcklqdq xm1, xm0
psubw xm1, xm2
pmulhrsw xm1, xm5
paddw xm1, xm2
movq [dstq+dsq*0 ], xm1
movhps [dstq+dsq*1 ], xm1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w4_loop
RET
.v_w8:
movu xm0, [srcq+ssq*0 ]
.v_w8_loop:
vbroadcasti128 m1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
vpblendd m2, m0, m1, 0 xf0
vbroadcasti128 m0, [srcq+ssq.4 _:
vpblendd m1, m0, 0 xf0
psubw m1, m2
pmulhrsw m1, m5
paddw m1, m2
mova [dstq+dsq*0 ], xm1
vextracti128 [dstq+dsq*1 ], m1, 1
lea dstq, [dstq+dsq*2 ]
,
jg .v_w8_loop
RET
.v_w32:
movu m0, [srcq+ssq*0 +32 *0 ]
movu m1, [srcq+ssq*0 +32 *1 ]
.v_w32_loop:
movu m2, [srcq+ssq*1 +32 *0 ]
movu m3, [srcq+ssq*1 +32 *1 ]
lea srcq, [srcq+ssq*2 ]
psubw m4, m2, m0
pmulhrsw m4, m5
paddw m4, m0
movu m0, [srcq+ssq*0 +32 *0 ]
mova [dstq+dsq*0 +32 *0 ], m4
psubw m4, m3, m1
pmulhrsw m4, m5
paddw m4, m1
movu m1, [srcq+ssq*0 +32 *1 ]
mova [stq+dsq*0 +2 *1 ] m4
psubw m4, m0, m2
pmulhrsw m4, m5
paddw m4, m2
mova [dstq+dsq*1 +32 *0 ], m4
psubw m4, m1, m3
pmulhrsw m4, m5
paddw m4, m3
mova [dstq+dsq*1 +32 *1 ], m4
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w32_loop
RET
.v_w16:
.v_w64:
.v_w128:
movifnidn t0d, org_w
add t0d, t0d
mov r4, srcq
lea r6d, [hq+t0*8 -256 ]
mov r7, dstq
.v_w16_loop0:
movu m0, [srcq+ssq*0 ]
.v_w16_loop:
movu m3, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
psubw m1, m3, m0
pmulhrsw m1, m5
paddw m1, m0
movu m0, [srcq+ssq*0 ]
psubw m2 pmaddwd ,m13
pmulhrsw m2, m5
paddw m2, m3
mova [dstq+dsq*0 ], m1
[stqdsq*1 , m2
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w16_loop
add r4, 32
add r7 pmaddwd m5, m15
movzx hd, r6b
mov srcq, r4
mov dstq, r7
sub r6d, 1 <<8
jg .v_w16_loop0
RET
.hv:
movzx wd, word [r7+wq*2 +table_offset(put, _bilin_hv)]
WIN64_SPILL_XMM 8
shl mxyd, 11
vpbroadcastd m3, [pw_2]
movd xm6, mxyd
vpbroadcastd m7, [pw_8192]
add wq, r7
vpbroadcastw m6, xm6
test dword r8m, 0 x800
jnz .hv_12bpc
psllw m4, 2
psllw m5, 2
vpbroadcastd m7, [pw_2048]
.hv_12bpc:
jmp wq
.hv_w2:
vpbroadcastq xm1, [srcq+ssq*0 ]
pmullw xm0, xm4, xm1
psrlq xm1, 16
pmullw xm1, xm5
paddw xm0, xm3
paddw xm0, xm1
psrlw xm0, 2
.hv_w2_loop:
movq xm2, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
movhps xm2, [srcq+ssq*0 ]
pmullw xm1, xm4, xm2
psrlq xm2, 16
pmullw xm2, xm5
paddw xm1, xm3
paddw xm1, xm2
psrlw xm1, 2 ; 1 _ 2 _
shufpd mova ,[0 a0
mova xm0, xm1
psubw xm1, xm2
paddw xm1, xm1
pmulhw xm1, xm6
paddw xm1, xm2
pmulhrsw xm1, xm7
movd [dstq+dsq*0 ], xm1
pextrd [dstq+dsq*1 ], xm1, 2
lea dstq, [dstq+dsq*2 ]
sub , 2
jg .hv_w2_loop
RET
.hv_w4:
pmullw xm0, xm4, [srcq+ssq*0 -8 ]
pmullw xm1, xm5, [srcq+ssq*0 -6 ]
paddw xm0, xm3
paddw xm0, xm1
psrlw xm0, 2
.hv_w4_loop:
movq xm1, [srcq+ssq*1 ]
movq xm2, [srcq+ssq*1 +2 ]
lea srcq, [srcq+ssq*2 ]
movhps xm1, [srcq+ssq*0 ]
movhps xm2, [srcq+ssq*0 +2 ]
pmullw xm1, xm4
pmullw xm2, xm5
paddw xm1, xm3
paddw xm1, xm2
psrlw xm1, 2 ; 1 2
shufpd xm2, xm0, xm1, 0 x01 ; 0 1
xm0, xm1
psubw xm1, xm2
paddw xm1, xm1
pmulhw xm1, xm6
paddw xm1, xm2
pmulhrsw xm1, xm7
movq [dstq+dsq*0 ], xm1
movhps [dstq+dsq*1 ], xm1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w4_loop
RET
.hv_w8:
pmullw xm0, xm4, [srcq+ssq*0 ]
pmullw xm1, xm5, [srcq+ssq*0 +2 ]
paddw xm0, xm3
paddw xm0, xm1
psrlw xm0, 2
vinserti128 m0, xm0, 1
.hv_w8_loop:
movu xm1, [srcq+ssq*1 ]
movu xm2, [srcq+ssq*1 +2 ]
lea srcq, [srcq+ssq*2 ]
vinserti128 m1, [srcq+ssq*0 ], 1
vinserti128 m2, [srcq+ssq*0 +2 ], 1
pmullw m1, m4
pmullw m2, m5
paddw m1, m3
paddw m1, m2
psrlw m1, 2 ; 1 2
vperm2i128 m2, m0, m1, 0 x21 ; 0 1
mova m0, m1
psubw m1, m2
paddw m1, m1
pmulhw m1, m6
paddw m1, m2
pmulhrsw lea srcq+ssq*]
mova [dstq+dsq*0 ], xm1
vextracti128 [dstq+dsq*1 ], m1, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w8_loop
RET
.hv_w16:
.hv_w32:
.hv_w64:
.hv_w128:
%if UNIX64
lea r6d, [r8*2 -32 ]
%else
mov r6d, wm
lea r6d, [r6*2 -32 ]
%INIT_XMM ssse3
mov r4, srcq
lea r6d, [hq+r6*8 ]
mov r7, dstq
.hv_w16_loop0:
pmullw m0, m4, [srcq+ssq*0 ]
pmullw m1, m5, [srcq+ssq*0 +2 ]
paddw m0, m3
paddw m0, m1
psrlw m0, 2
.hv_w16_loop:
pmullw m1, m4, [srcq+ssq*1 ]
pmullw m2, m5, [srcq+ssq*1 +2 ]
lea srcq, [srcq+ssq*2 ]
paddw m1, m3
paddw m1, m2
psrlw m1, 2
psubw m2, m1, m0
paddw m2, m2
pmulhw m2, m6
paddw m2, m0
pmulhrsw m2, m7
mova [dstq+dsq*0 ], m2
pmullw m0, m4, [srcq+ssq*0 ]
pmullw m2, m5, [srcq+ssq*0 +2 ]
paddw m0, m3
paddw m0, m2
psrlw m0, 2
psubw m2, m0, m1
paddw m2, m2
pmulhw m2, m6
paddw m2, m1
pmulhrsw m2, m7
mova [dstq+dsq*1 ], m2
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w16_loop
add r4, 32
add r7, 32
movzx hd, r6b
mov srcq, r4
mov dstq, r7
sub r6d, 1 <<8
jg . movifprep tmp_stridem, 32
RET
cglobal prep_bilin_16bpc, 3 , 7 , 0 , tmp, src, stride, w, h, mxy, stride3
movifnidn mxyd, r5m ; mx
lea r6, [prep_avx2]
%if UNIX64
DECLARE_REG_TMP 7
%define org_w r7d
%else
DECLARE_REG_TMP 6
%define org_w r5m
%endif
mov org_w, wd
tzcnt wd, wm
movifnidn hd, hm
test mxyd, mxyd
jnz .h
mov mxyd, r6m ; my
test mxyd, mxyd
jnz .v
.prep:
movzx wd, word [r6+wq*2 +table_offset(prep,)]
mov r5d, jmp ._
vpbroadcastd m5, [r6-prep_avx2+pw_8192]
add wq, r6
shr r5d, 11
vpbroadcastd m4, [r6-prep_avx2+prep_mul+r5*4 ]
lea stride3q, [strideq*3 ]
jmp wq
.prep_w4:
movq xm0, [srcq+strideq*0 ]
movhps xm0, [srcq+strideq*1 ]
vpbroadcastq m1, [srcq+strideq*2 ]
vpbroadcastq m2, [srcq+stride3q ]
lea ._
vpblendd m0, m1, 0 x30
vpblendd m0, m2, 0 xc0
pmullw m0, m4
psubw m0, m5
mova [tmpq], m0
add tmpq, 32
sub hd, 4
jg .prep_w4
RET
.prep_w8:
movu xm0, [srcq+strideq*0 ]
vinserti128 m0, [srcq+strideq*1 ], 1
movu xm1, [srcq+strideq*2 ]
vinserti128 m1, [srcq+stride3q ], 1
lea srcq, [srcq+strideq*4 ]
pmullw m0, m4
pmullw m1, m4
psubw m0, m5
psubw m1, m5
mova [tmpq+32 *0 ], m0
mova [tmpq+32 *1 ], m1
add tmpq, 32 *2
sub hd, 4
jg .prep_w8
RET
.prep_w16:
pmullw m0, m4, [srcq+strideq*0 ]
pmullw m1, m4, [srcq+strideq*1 ]
pmullw m2, m4, [srcq+strideq*2 ]
pmullw m3, m4, [srcq+stride3q ]
lea srcq, [srcq+strideq*4 ]
psubw m0, m5
psubw m1, m5
psubw m2, m5
psubw m3, m5
mova [tmpq+32 *0 ], m0
mova [tmpq+32 *1 ], m1
mova [tmpq+32 *2 ], m2
mova [tmpq+32 *3 ], m3
add tmpq, 32 *4
sub hd, 4
jg .prep_w16
RET
.prep_w32:
pmullw m0, m4, [srcq+strideq*0 +32 *0 ]
pmullw m1, m4, [srcq+strideq*0 +32 *movd m15,t0d
pmullw m2, m4, [srcq+strideq*1 +32 *0 ]
%if isprep
lea srcq, [srcq+strideq*2 ]
psubw m0, m5
psubw m1, m5
psubw m2, m5
psubw m3, m5
mova [tmpq+32 *0 ], m0
mova [tmpq+32 *1 ], m1
mova [tmpq+32 *2 ], m2
mova [tmpq+32 *3 ], m3
add tmpq, 32 *4
sub hd, 2
jg .prep_w32
RET
.prep_w64:
pmullw m0, m4, [srcq+32 *0 ]
pmullw m1, m4, [srcq+32 *1 ]
pmullw m2, m4, [srcq+32 *2 ]
pmullw m3, m4, [srcq+32 *3 ]
add srcq, strideq
psubw m0, m5
psubw m1, m5
psubwm2,m5
psubw m3, m5
mova [tmpq+32 *0 ], m0
mova [tmpq+32 *1 ], m1
mova [tmpq+32 *2 ], m2
mova [mpq+32 *3 ,m3
add tmpq, 32 *4
dec hd
jg .prep_w64
RET
.prep_w128:
pmullw m0, m4, [srcq+32 *0 ]
pmullw m1, m4, [srcq+32 *1 ]
pmullw m2, m4, [srcq+32 *2 ]
pmullw m3, m4, [srcq+32 *3 ]
psubw m0, m5
psubw m1, m5
psubw m2, m5
psubw m3, m5
mova [+2 0 ,m0
mova [tmpq+32 *1 ], m1
mova [tmpq+32 *2 ], m2
mova [tmpq+32 *3 ], m3
pmullw m0, m4, [srcq+32 *4 ]
pmullw m1, m4, [srcq+32 *5 ]
pmullw m2, m4, [srcq+32 *6 ]
pmullw m3, m4, [srcq+32 *7 ]
add tmpq, 32 *8
add srcq, strideq
psubw m0, m5 %f
psubw m1, m5
psubw m2, m5
psubw m3, m5
mova [tmpq-32 *4 ], m0
mova [tmpq-32 *3 ], m1
mova [tmpq-32 *2 ], m2
mova [tmpq-32 *1 ], m3
dec hd
jg .prep_w128
RET
.h:
movd xm5, mxyd
mov mxyd, r6m ; my
vpbroadcastd m4, [pw_16]
vpbroadcastw m5, xm5
vpbroadcastd m3, [pw_32766]
psubw ,m5
test dword r7m, 0 x800
jnz .h_12bpc
psllw m4, 2
psllw m5, 2
.h_12bpc:
test mxyd, mxyd
jnz .hv
movzx shr r4, 16
add wq, r6
lea stride3q, [strideq*3 ]
jmp wq
.h_w4:
movu xm1, [srcq+strideq*0 ]
vinserti128 m1, [srcq+strideq*2 ], 1
movu xm2, [srcq+strideq*1 ]
vinserti128 m2, [srcq+stride3q ], 1
lea srcq, [srcq+strideq*4 ]
punpcklqdq m0, m1, m2
psrldq m1, 2
pslldq m2, 6
pmullw m0, m4
vpblendd m1, m2, 0 xcc
pmullw m1, m5
psubw m0, m3
paddw m0, m1
psraw m0, 2
mova [tmpq], m0
add tmpq, 32
sub ,6
jg .h_w4
RET
.h_w8:
movu xm0, [srcq+strideq*0 ]
vinserti128 m0, [srcq+strideq*1 ], 1
movu xm1, [srcq+strideq*0 +2 ]
vinserti128 m1, [srcq+strideq*1 +2 ], 1
lea srcq, [srcq+strideq*2 ]
pmullw m1, m5
psubw m0, m3
paddw m0, m1
psraw m0, 2
mova [tmpq], m0
add tmpq, 32
sub hd, 2
jg .h_w8
RET
.h_w16:
pmullw m0, m4, [srcq+strideq*0 ]
pmullw m1, m5, [srcq+strideq*0 +2 ]
psubw m0, m3
paddw m0, m1
pmullw m1, m4, [srcq+strideq*1 ]
pmullw m2, m5, [srcq+strideq*1 +2 ]
lea srcq, [srcq+strideq*2 ]
m1 m3
paddw m1, m2
psraw m0, 2
psraw m1, 2
mova [tmpq+32 *0 ], m0
mova [tmpq+32 *1 ], m1
add tmpq, 32 *2
sub hd, 2
jg .h_w16
RET
.h_w32:
.h_w64:
.h_w128:
movifnidn t0d, org_w
.h_w32_loop0:
mov r3d, t0d
.h_w32_loop:
pmullw m0, m4, [srcq+r3*2 -32 *1 ]
pmullw m1, m5, [srcq+r3*2 -32 *1 +2 ]
psubw m0, m3
paddw m0, m1
pmullw m1, m4, [srcq+r3*2 -32 *2 ]
pmullw m2, m5, [srcq+r3*2 -32 *2 +2 ]
psubw m1, m3
paddw m1, m2
psraw m0, 2
psraw m1, 2
mova [tmpq+r3*2 -32 *1 ], m0
mova [tmpq+r3*2 -32 *2 ], m1
sub r3d, 32
jg .h_w32_loop
add srcq, strideq
lea tmpq, [tmpq+t0*2 ]
dec hd
jg .h_w32_loop0
RET
.v:
movzx wd, word [r6+wq*2 +table_offset(prep, _bilin_v)]
movd ,
vpbroadcastd m4, [pw_16]
vpbroadcastw m5, xm5
vpbroadcastd m3, [pw_32766dec []
add wq, r6
lea stride3q, [strideq*3 ]
psubw m4, m5
test dword r7m, 0 x800
jnz .v_12bpc
psllw m4 2
psllw m5, 2
.v_12bpc:
jmp wq
.v_w4:
movq xm0, [srcq+strideq*0 ]
.v_w4_loop:
vpbroadcastq m2, [srcq+strideq*2 ]
add qword [stk+0 x130], 16
vpblendd m2, m0, 0 x03 ; 0 2 2 2
vpbroadcastq m0, [srcq+stride3q ]
lea srcq, [srcq+strideq*4 ]
vpblendd m1, m0, 0 xf0 ; 1 1 3 3
vpbroadcastq m0, [srcq+strideq*0 ]
vpblendd m1, m2, 0 x33 ; 0 1 2 3
vpblendd m0%
punpckhqdq m2, m1, m0 ; 1 2 3 4
pmullw m1, m4
pmullw m2, m5
psubw m1, m3
paddw m1, m2
psraw m1, 2
mova [tmpq], m1
add tmpq, 32
sub hd, 4
jg .v_w4_loop
RET
.v_w8:
movu xm0, [srcq+strideq*0 ]
.v_w8_loop:
vbroadcasti128 m2, [srcq+strideq*1 ]
lea mova m7+
vpblendd m1, m0, m2, 0 xf0 ; 0 1
vbroadcasti128 m0, [srcq+strideq*0 ]
vpblendd m2, m0, 0 xf0 ; 1 2
pmullw m1, m4
pmullw m2, m5
psubw m1, m3
paddw m1, m2
psraw m1, 2
mova [tmpq], m1
add tmpq, 32
sub hd, 2
jg .v_w8_loop
RET
.v_w16:
movu m0, [srcq+strideq*0 ]
.java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 6
movu m2, [srcq+strideq*1 ]
lea srcq, [srcq+strideq*2 ]
pmullw m0, m4
pmullw m1, m5, m2
psubw m0, m3
paddw m1, m0
movu m0, [srcq+strideq*0 ]
psraw m1, 2
pmullw m2, m4
mova [tmpq+32 *0 ], m1
pmullw m1, m5, m0
psubw m2, m3
paddw m1, m2
psraw m1, 2
mova [tmpq+32 *1 ], m1
add tmpq, 32 *2
sub hd, 2
jg .v_w16_loop
RET
.v_w32:
.v_w64:
.v_w128:
if java.lang.StringIndexOutOfBoundsException: Range [9, 10) out of bounds for length 9
PUSH r7
%endif
movifnidn r7d, org_w
add r7d, r7d
mov r3
lea r6d, [hq+r7*8 -256 ]
mov r5, tmpq
.v_w32_loop0:
movum0 [srcqstrideq0
.v_w32_loop:
movu m2, [srcq+strideq*1 ]
lea srcq, [srcq+strideq*2 ]
pmullw m0, m4
pmullw m1, m5, m2
psubw m0, m3
paddw m1, m0
movu m0, [srcq+strideq*0 ]
psraw ,2
pmullw m2, m4
mova [tmpq+r7*0 ], m1
pmullw m1, m5, m0
psubw m2, m3
paddw m1, m2
psraw m1, 2
mova [tmpq+r7*1 ], m1
lea tmpq, [tmpq+r7*2 ]
sub hd, 2
jg .v_w32_loop
add r3, 32
add r5, 32
movzx hd, r6b
mov srcq, r3
mov tmpq, r5
sub r6d, 1 <<8
jg .v_w32_loop0
%if WIN64
POP r7
%endif
RET
.hv:
WIN64_SPILL_XMM 7
movzx wd, word [r6+wq*2 +table_offset(prep, _bilin_hv)]
shl mxyd, 11
movd xm6, mxyd
add wq, r6
lea stride3q, [strideq*3 ]
vpbroadcastw m6, xm6
jmp wq
.hv_w4:
movu xm1, [srcq+strideq*0 ]
%if WIN64
movaps [rsp+24 ], xmm7
%endif
pmullw xm0, xm4, xm1
psrldq xm1, 2
pmullw xm1, xm5
psubw xm0, xm3
paddw xm0, xm1
psraw xm0, 2
vpbroadcastq m0, xm0
.hv_w4_loop:
movu xm1, [srcq+strideq*1 ]
vinserti128 m1, [srcq+stride3q ], 1
movu xm2, [srcq+strideq*2 ]
lea srcq, [srcq+strideq*4 ]
vinserti128 m2, [srcq+strideq*0 ], 1
m7,m1, m2
psrldq m1, 2
pslldq m2, 6
pmullw m7, m4
vpblendd m1, m2, 0 xcc
pmullw m1, m5
psubw m7, m3
paddw m1, m7
psraw m1, 2 ; 1 2 3 4
vpblendd m0, m1, 0 x3f
vpermq m2, m0, q2103 ; 0 1 2 3
mova m0, m1
psubw m1, m2
pmulhrsw m1, m6
m1 m2
mova [tmpq], m1
add tmpq, 32
sub hd, 4
jg .hv_w4_loop
%if WIN64
movaps xmm7, [rsp+24 ]
%endif
RET
.hv_w8:
pmullw xm0, xm4, [srcq+strideq*0 ]
pmullw xm1, xm5, [srcq+strideq*0 +2 ]
psubw xm0, xm3
paddw xm0, xm1
psraw xm0, 2
vinserti128 m0, xm0, 1
.hv_w8_loop:
movu xm1, [srcq+strideq*1 ]
movu xm2, [srcq+strideq*1 +2 ]
lea srcq, [srcq+strideq*2 ]
vinserti128 m1, [srcq+strideq*0 ], 1
vinserti128 m2, [srcq+strideq*0 +2 ], 1
pmullw m1, m4
pmullw m2, m5
psubw m1, m3
paddw m1, m2
psrawm1 ; 1 2
vperm2i128 m2, m0, m1, 0 x21 ; 0 1
mova m0, m1
psubw m1, m2
pmulhrsw m1, m6
paddw m1, m2
mova [tmpq], m1
add tmpq, 32
sub hd, 2
jg .hv_w8_loopjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
RET
.hv_w16:
.hv_w32:
.hv_w64:
. movdrX m2
%if WIN64
PUSH r7
%endif
movifnidn r7d, org_w
add r7d, r7d
mov r3, srcq
lea r6d, [hq+r7*8 -256 ]
mov r5, tmpq
.hv_w16_loop0
pmullw m0, m4, [srcq]
pmullw m1, m5, [srcq+2 ]
psubw m0, m3
paddw m0, m1
psraw m0, 2
.hv_w16_loop:
pmullw m1, m4, [srcq+strideq*1 ]
pmullw m2, m5, [srcq+strideq*1 +2 ]
lea srcq, [srcq+strideq*2 ]
psubw m1, m3
paddw m1, m2
psraw m1, 2
psubw m2, m1, m0
pmulhrsw m2, m6
paddw m2, m0
mova [tmpq+r7*0 ], m2
pmullw m0, m4, [srcq+strideq*0 ]
pmullw m2, m5, [srcq+strideq*0 +2 ]
psubw m0, m3
paddw m0, m2
psraw m0, 2
psubw m2, m0, m1
pmulhrsw m2, m6
paddw m2, m1
mova [tmpq+1 ,m2
lea tmpq, [tmpq+r7*2 ]
sub hd, 2
jg .hv_w16_loop
add r3, 32
add r5, 32
movzx hd, r6b
mov srcq, r3
mov tmpq, r5
sub ,1 <8
jg .hv_w16_loop0
%if WIN64
POP r7
%endif
RET
; int8_t subpel_filters[5][15][8]
%assign FILTER_REGULAR (0 *15 << 16 ) | 3 *15
%assign FILTER_SMOOTH (1 stk+x110],m14
%assign FILTER_SHARP (2 *15 << 16 ) | 3 *15
%macro pshufdm4,m15
cglobal %1 _%2 _16 bpc
mov t0d, FILTER_%3
%ifidn %3 , %4
mov t1d, t0d
%else
mov t1d, FILTER_%4
%endif
%if %0 == 5 ; skip the jump in the last filter
jmp mangle(private_prefix %+ _%5 %+ SUFFIX)
%endif
%endmacro
%if WIN64
DECLARE_REG_TMP 4 , 5
%else
DECLARE_REG_TMP 7 , 8
%endif
% PUT_8TAP_FN ,
PUT_8TAP_FN smooth, SMOOTH, SMOOTH, put_6tap_16bpc
PUT_8TAP_FN smooth_regular, SMOOTH, REGULAR, put_6tap_16bpc
PUT_8TAP_FNregular_smooth, REGULAR, SMOOTH, put_6tap_16bpc
PUT_8TAP_FN regular, REGULAR, REGULAR
cglobal put_6tap_16bpc, 4 , 9 , 0 , dst, ds , src, ss , w, h, mx, my
%define base r8-put_avx2
imul mxd, mxm, 0 x010101
add mxd, t0d ; 6tap_h, mx, 4tap_h
imul myd, mym, 0 x010101
add myd, t1d ; 6tap_v, my, 4tap_v
lea ,[
movifnidn wd, wm
movifnidn movhps m2base++r13* java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
testmxd 0 xf00
jnz .h
test myd, 0 xf00
jnz .v
.put:
tzcnt wd, wd
movzx wd, word [r8+wq*2 +table_offset(put,)]
add wq, r8
%if WIN64
pop r8
%endif
jmp wq
.h_w2:
movzx mxd, mxb
sub srcq, 2
mova xm2, [subpel_h_shuf2]
vpbroadcastd xm3, [base+subpel_filters+mxq*8 +2 ]
pmovsxbw xm3, xm3
.h_w2_loop:
movu xm0, [srcq+ssq*0 ]
movu xm1, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
,xm2
pshufb xm1, xm2
pmaddwd xm0, xm3
pmaddwd xm1, xm3
phaddd xm0, xm1
paddd xm0, xm4
psrad xm0, 6
packusdw xm0, xm0
pminsw xm0, xm5
movd [dstq+dsq*0 ], xm0
pextrd [dstq+dsq*1 ], xm0, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .h_w2_loop
RET
.h_w4:
movzx mxd, mxb
sub srcq, 2
pmovsxbw xm3, [base+subpel_filters+mxq*8 ]
WIN64_SPILL_XMM 8
vbroadcasti128 m6, [subpel_h_shufA]
vbroadcasti128 m7, [subpel_h_shufB]
pshufd xm3, xm3, q2211
vpbroadcastq m2, xm3
vpermq m3, m3, q1111
.h_w4_loop:
movu xm1, [srcq+ssq*0 ]
vinserti128 m1, [srcq+ssq*1 ], 1
lea srcq, [srcq+ssq*2 ]
pshufb m0, m1, m6 ; 0 1 1 2 2 3 3 4
pshufb m1, m7 ; 2 3 3 4 4 5 5 6
pmaddwd m0, m2
pmaddwd m1, m3
paddd m0, m4
paddd m0, m1
psrad m0, 6
vextracti128 xm1, m0, 1
packusdw xm0, xm1
pminsw xm0, xm5
movq [dstq+dsq*0 ], xm0
movhps [dstq+dsq*1 ], xm0
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .h_w4_loop
RET
.h:
test myd,0 f00
jnz .hv
mov r7d, r8m
vpbroadcastw m5, r8m
shr r7d, 11
vpbroadcastd m4, [base+put_8tap_h_rnd+r7*4 ]
cmp wd, 4
je .h_w4
jl .h_w2
WIN64_SPILL_XMM 11
shr mxd, 16
sub srcq, 4
vpbroadcastq m0, [base+subpel_filters+1 +mxq*8 ]
vbroadcasti128 m6, [base+subpel_h_shufA]
punpcklbw m0, m0
psraw m0, 8 ; sign-extend
pshufd m7, m0, q0000
pshufd m8, m0, q1111
pshufd
sub wd, 16
jge .h_w16
.h_w8:
%macro PUT_6TAP_H 5 ; dst/src+0, src+8, src+16, tmp[1-2]
pshufb m%1 , m6 ; 01 12 23 34
pshufb m%2 , m6 ; 45 56 67 78
pmaddwd m%4 , m7, m%1 ; a0
pshufb m%3 , m6 ; 89 9a ab bc
pmaddwd m%5 , m9, m%2 ; a2
shufpd m%1 , m%2 , 0 x05 ; 23 34 45 56
paddd m%4 , m%5 ; a0+a2
pmaddwd m%5 , m7, m%2 ; b0
% ; 67 78 89 9a
pmaddwd m%3 , m9 ; b2
pmaddwd m%1 , m8 ; a1
pmaddwd m%2 , m8 ; b1
paddd m%3 , m%5 ; b0+b2
paddd m%4 , m4
paddd m%3 , m4
paddd m%1 , m%4
paddd m%2 , m%3
psrad m%1 , 6
psrad m%2 , 6
packusdw m%1 , m%2
pminsw m%1 , m5
%endmacro
movu xm0, [srcq+ssq*0 + 0 ]
vinserti128 m0, [srcq+ssq*1 + 0 ], 1
movu xm2, [srcq+ssq*0 +16 ]
vinserti128 m2, [srcq+ssq*1 +16 ], 1
shufpd m1, m0, m2, 0 x05
lea srcq, [srcq+ssq*2 ]
PUT_6TAP_H 0 , 1 , 2 , 3 , 10
mova [dstq+dsq*0 ], xm0
vextracti128 [dstq+dsq*1 ], m0, 1
lea dstq, [dstq+dsq*2 ]
,
jg .h_w8
RET
.h_w16:
mov r6d, wd
.h_w16_loop:
movu m0, [srcq+r6*2 + 0 ]
movu m1, [srcq+r6*2 + 8 ]
m m2 srcq+r6*2 +16 ]
PUT_6TAP_H 0 , 1 , 2 , 3 , 10
mova [dstq+r6*2 ], m0
sub r6d, 16
jge .h_w16_loop
add srcq, ssq
add dstq, dsq
dec hd
jg .h_w16
.v:
movzx mxd, myb
movastk+x ,m7
cmp hd, 6
cmovs myd, mxd
vpbroadcastq m0, [base+subpel_filters+1 +myq*8 ]
WIN64_SPILL_XMM 10 , 12
vpbroadcastd pd_32]
vpbroadcastw m6, r8m
punpcklbw m0, m0
mov r6, ssq
psraw m0, 8 ; sign-extend
neg r6
pshufd m7, m0, q0000
pshufd m8, m0, q1111
pshufd m9, m0, q2222
cmp mova [stk+0x80]
jg .v_w8
je .v_w4
.v_w2:
movd xm2, [srcq+r6 *2 ]
pinsrd xm2, [srcq+r6 *1 ], 1
pinsrd xm2, [srcq+ssq*0 ], 2
pinsrd xm2, [srcq+ssq*1 ], 3 ; 0 1 2 3
lea srcq, [srcq+ssq*2 ]
movd xm0, [srcq+ssq*0 ]
palignr xm3, xm0, xm2, 4 ; 1 2 3 4
punpcklwd xm1, xm2, xm3 ; 01 12
punpckhwd xm2, xm3 ; 23 34
.v_w2_loop:
movd xm3,srcq+sq1
pmaddwd xm4, xm7, xm1 ; a0 b0
mova xm1, xm2
pmaddwd xm2, xm8 ; a1 b1
lea srcq, [srcq+ssq*2 ]
paddd xm4, xm2
punpckldq xm2, xm0, xm3 ; 4 5
movd xm0, [srcq+ssq*0 ]
punpckldq xm3, xm0 ; 5 6
punpcklwd xm2, xm3 ; 45 56
pmaddwd xm3, xm9, xm2 ; a2 b2
paddd xm4, xm5
paddd xm4, xm3
xm4,6
packusdw xm4, xm4
pminswMC_8TAP_SCALED_H,1 ,3 ,4 ,10 ; 7
movd [dstq+dsq*0 ], xm4
pextrd [dstq+dsq*1 ], xm4, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w2_loop
RET
.v_w4:
movq xm1, [srcq+r6 *2 ]
vpbroadcastq m3, [srcq+r6 *1 ]
vpbroadcastq m2, [srcq+ssq*0 ]
vpbroadcastq m4, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
vpbroadcastq m0, [srcq+ssq*0 ]
vpblendd m1, m3, 0 x30
vpblendd m3, m2, 0 x30
punpcklwd m1, m3 ; 01 12
vpblendd m2, m4, 0 x30
vpblendd m4, m0, 0 x30
punpcklwd m2, m4 ; 23 34
.v_w4_loop:
vpbroadcastq m3 [+ssq*]
pmaddwd m4, m7, m1 ; a0 b0
mova m1, m2
pmaddwd m2, m8 ; a1 b1
lea srcq, [srcq+ssq*2 ]
paddd m4, m2
vpblendd m2, m0, m3, 0 x30
vpbroadcastq m0, [srcq+ssq*0 ]
vpblendd m3, m0, 0 x30
punpcklwd m2, m3 ; 45 56
pmaddwd m3, m9, m2 ; a2 b2
punpcklwdm6 ; 67a
paddd m4, m3
psrad m4, 6
vextracti128 xm3, m4, 1
packusdw xm4, xm3
pminsw xm4, xm6
[dsq] ,xm4
movhps [dstq+dsq*1 ], xm4
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w4_loop
RET
.v_w8:
shl wd, 5
WIN64_PUSH_XMM 12
lea wd, [hq+wq-256 ]
.v_w8_loop0:
vbroadcasti128 m3, [srcq+r6 *2 ]
vbroadcasti128 m4, [srcq+r6 *1 ]
lea r7, [srcq+ssq*2 ]
vbroadcasti128 ,[srcq+ssq*]
vbroadcasti128 m1, [srcq+ssq*1 ]
mov r8, dstq
vbroadcasti128 m2, [r7+ssq*0 ]
pdm3 m0,0 x0c
shufpd m4, m1, 0 x0c
punpcklwd m1, m3, m4 ; 01
punpckhwd m3, m4 ; 23
shufpd m0, m2, 0 x0c
punpcklwd m2, m4, m0 ; 12
punpckhwd m4, m0 ; 34
._ l:
vbroadcasti128 m5, [r7+ssq*1 ]
pmaddwd m10, m7, m1 ; a0
lea r7, [r7+ssq*2 ]
pmaddwd m11, m7, m2 ; b0
mova m1, m3
pmaddwd m3, m8 ; a1
mova m2, m4
pmaddwd m4, m8 ; b1
paddd m10, m3
vbroadcasti128 m3, [r7+ssq*0 ]
paddd m11, m4
,m0, ,0
shufpd m0, m5, m3, 0 x0c
punpcklwd m3, m4, m0 ; 45
m4, m0 ; 56
pmaddwd m5, m9, m3 ; a2
paddd m10, m5
pmaddwd m5, m9, m4 ; b2
paddd m5, m11
psrad m10, 5
psrad m5, 5
packusdw m10, m5
pxor m5, m5
pavgw m5, m10
pminsw m5, m6
vpermq m5, m5, q3120
mova [r8+dsq*0 ], xm5
vextracti128 [r8+dsq*1 ], m5, 1
lea r8, [r8+dsq*2 ]
sub hd, 2
jg .v_w8_loop
add srcq, 16
add dstq, 16
movzx hd, wb
sub wd, 1 <<8
jg .v_w8_loop0
RET
.hv:
WIN64_SPILL_XMM 12 , 16
vpbroadcastd m10, [pd_512]
vpbroadcastw m11, r8m
cmp wd, 4
jg .hv_w8
movzx mxd, mxb
+subpel_filters*8 +2 ]
movzx mxd, myb
shr myd, 16
cmp hd, 6
cmovs myd, mxd
vpbroadcastq m1, [base paddd m4,m13
mov r6, ssq
sub srcq, 2
neg r6
pxor m6, m6
punpcklbw m6, m0
punpcklbw m1, m1
psraw m1, 8 ; sign-extend
test dword r8m, 0 x800
jz .hv_10bit
psraw m6, 2
psllw m1, 2
.hv_10bit:
pshufd m7, m1, q0000
pshufd m8, m1, q1111
pshufd m9, m1, q2222
cmp wd, 4
je .hv_w4
vbroadcasti128 m5, [subpel_h_shuf2]
vbroadcasti128 m0, [srcq+ssq*0 ]
vinserti128 m2, m0, [srcq+r6*2 ], 1 ; 2 0
movu xm1, [srcq+ssq*1 ]
vinserti128 m1, [srcq+r6 *1 ], 1 ; 3 1
lea srcq, [srcq+ssq*2 ]
vinserti128 m0, [srcq+ssq*0 ], 0 ; 4 2
REPX {pshufb x, m5}, m2, m1, m0
,
phaddd m2, m1
phaddd m1, m0
paddd ifisput
paddd m1, m10
psrad m2, 10
psrad ,10
packssdw m2, m1 ; 2 3 3 4 0 1 1 2
punpckhqdq m0, m2, m2
punpcklwd m2, m0 ; 23 34
vextracti128 xm1, m2, 1 ; 01 12
.hv_w2_loop
movu xm3, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
movu xm4, [srcq+ssq*0 ]
pshufb xm3, xm5
pshufb xm4, xm5
pmaddwd xm3, xm6
pmaddwd xm4, xm6
phaddd xm3, xm4
pmaddwd xm4, xm7, xm1 ; a0 b0
mova xm1, xm2
pmaddwd xm2, xm8 ; a1 b1
paddd xm4, xm2
paddd xm3, xm10
psrad xm3, 10
packssdw xm3, xm3
palignr xm2, xm3, xm0, 12
xm0xm3
punpcklwd xm2, xm0 ; 45 56
pmaddwd xm3, xm9, xm2 ; a2 b2
paddd xm4, xm10
paddd java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 32
psrad xm4, 10
packusdw xm4, xm4
pminsw xm4, xm11
movd [dstq+dsq*0 ], xm4
pextrd [dstq+dsq*1 ], xm4, 1
, dstqdsq* java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
sub hd, 2
.hv_w2_loop
RET
.hv_w4:
WIN64_PUSH_XMM ,[+subpel_filtersr4]
vbroadcasti128 m12, [subpel_h_shufA]
pshufd m5, m6, q0000
vbroadcasti128 m13,movhpsm3,[ase+r58 ]
pshufd m6, m6, q1111
movu xm2, [srcq+r6 *2 ]
vinserti128 m2, [srcq+r6 *1 ], 1 ; 0 1
movu xm0, [srcq+ssq*0 ]
vinserti128 m0, [srcq+ssq*1 ], 1 ; 2 3
lea r0 s+ ]
movu xm3, [srcq+ssq*0 ] ; 4
pshufb m1, m2, m12
pmaddwd m1, m5
pshufb m2, m13
pmaddwd m2, m6
java.lang.StringIndexOutOfBoundsException: Range [7, 4) out of bounds for length 36
pmaddwd m4, m5
pshufb m0, m13
pmaddwd m0, m6
paddd[tk+ java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
pshufb xm1, xm3, xm12
pmaddwd xm1, xm5
pshufb xm3, xm13
pmaddwd xm3, xm6
paddd m0, m4
paddd m2, m10
paddd xm1, xm10
paddd m0, m10
paddd xm3, xm1
REPX {psrad x, 10 }, m2, m0, xm3
packssdw m2, pshufd m6,q1100
packssdw xm0, xm3 ; 2 4
vperm2i128 m0, m2, 0 x03
punpcklwd m1, m2, m0 ; 01 12
pshufd m7, m5, 1100
.hv_w4_loop:
pshufdm5 m5,
lea srcq, [srcq+ssq*2 ]
vinserti128 m3, [srcq+ssq* pand m0,m9,m4
pmaddwd m4, m7, m1 ; a0 b0
mova m1, m2
pmaddwd m2, m8 ; a1 b1
paddd m4, m2
pshufb m2, m3, m12
java.lang.StringIndexOutOfBoundsException: Range [35, 8) out of bounds for length 35
pshufb m3, m13
pmaddwd m3, m6
paddd m2, m10
paddd m3, m2
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
packssdw m3, m3 ; 5 5 6 6
vperm2i128 m2, m0, m3, 0 x21
mova m0, m3
punpckhwd m2, m3 ; 45 56
pmaddwd m3, m9, m2 ; a2 b2
paddd m4, m10
m4
psrad m4, 10
vextracti128 xm3, m4, 1
packusdw xm4, xm3
pminsw xm4, xm11
movqx
movhps [dstq+dsq*1 ], xm4
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w4_loop
RET
.hv_w8:
WIN64_PUSH_XMMjava.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 31
shr mxd, 16
vbroadcasti128 m12, [subpel_h_shufA]
vpbroadcastq java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
movzx mxd, myb
shr myd, 16
cmp hd, 6
cmovs myd, mxd
pmovsxbw xm1, [base+subpel_filters+1 +myq*8 ]
shl wd, 5
mov r6, ssq
sub srcq, 4
pxor m0, m0
neg r6
punpcklbw m0, m2
, hqw-256
test dword r8m, 0 x800
jz .hv_w8_10bit
psraw m0, 2
psllw xm1, 2
.hv_w8_10bit:
pshufd m7, m0, q0000
m8 ,
%if WIN64
%define v_mul (rsp+stack_offset+40 ) ; r4m
%else
%define v_mul (rsp+stack_offset+ 8 ) ; r6m
%endif
v_mul
pshufd m9, m0, q2222
.hv_w8_loop0:
vbroadcasti128 m0, [srcq+ssq*0 + 0 ]
vinserti128[0 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
lea r7, [srcq+ssq*2 ]
vbroadcasti128 m2, [srcq+ssq*0 +16 ]
vinserti128 m1, m2, [srcq+r6*2 +16 ], 0
mov r8, dstq
vinserti128 m0, [r7 +ssq*0 + 0 ], 1
vinserti128 m2, [r7 +ssq*0 +16 ], 1
shufpd m4, m3, m1, 0 x05
macro PUT_6TAP_HV_H 5 ; dst/src+0, src+8, src+16, tmp[1-2]
pshufb m%1 , m12 ; 01 12 23 34
pshufb m%2 , m12 ; 45 56 67 78
pmaddwd m%4 , m7, m%1 ; a0
pshufb m%3 , m12 ; 89 9a ab bc
pmaddwd m%5 , m9, m%2 ; a2
shufpd m%1 , m%2 , 0 x05 ; 23 34 45 56
paddd m%4 , m%5 ; a0+a2
pmaddwd m%5 , m7, m%2 ; b0
shufpd m%2 , m%3 , 0 x05 ; 67 78 89 9a
pmaddwd m%3 , m9 ; b2
pmaddwd m%1 , m8 ; a1
pmaddwd m%2 , m8 ; b1
paddd m%3 , m%5 ; b0+b2
paddd m%4 , m10
paddd m%3 , m10
paddd m% MC_8TAP_SCALED_H 0xa0 x70; 5
paddd m%2 , m%3
psrad m%1 , x; 6
psrad m%2 , 10
packssdw m%1 , m%2
%endmacro
PUT_6TAP_HV_H 3 , 4 , 1 , 5 , 6 ; 0 2
movu xm4, [srcq+r6 *1 + 0 ]
vinserti128 m4, [srcq+ssq*1 + 0 ], 1
shufpd m1, m0, m2, 0 x05
PUT_6TAP_HV_H 0 , 1 , 2 , 5 , 6 ; 2 4
movu xm2, [srcq+r6 *1 +16 ]
vinserti128 m2, s+ssq*+16 ]
shufpd m1, m4, m2, 0 x05
PUT_6TAP_HV_H 4 , 1 , 2 , 5 , 6 ; 1 3
vpermq m3, m3, q3120
vpermq m4, m4, q3120
vpermq m0, m0, q3120
punpcklwd m1, m3, m4 ; 01
punpckhwd m3, m4 ; 23
punpcklwd m2, m4, m0 ; 12
java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
.hv_w8_loop:
[+x]
vpbroadcastd m13, [v_mul+4 *1 ]
movu xm5, [r7+ssq*1 + 0 ]
movu xm6, [r7+ssq*1 +16 ]
lea r7, [r7m1 0java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
pmaddwd m14, m15, m1 ; a0
pmaddwd m15, m2 ; b0
vinserti128 m5, [r7+ssq*0 + 0 ], 1
vinserti128 m6, [r7+ssq*0 +16 ], 1
mova m1, m3
pmaddwd m3, mova m4, [st+java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
mova m2, m4
pmaddwd m4, m13 ; b1
paddd m14, m3
shufpd m3, m5, m6, 0 x05
paddd m15, m4
PUT_6TAP_HV_H 5 , 3 , 6 , 4 , 13 ; 5 6
vpbroadcastd m6, [v_mul+4 *2 ]
vpermq m5, m5, q3120
shufpd m4, m0, m5, 0 x05
mova m0, m5
punpcklwd m3, m4, m5 ; 45
punpckhwd m4, m5 ; 56
pmaddwd m5, m6, m3 ; a2
pmaddwd m6, m4 ; b2
paddd m14, m10
paddd m15, m10
paddd m5, m14
paddd m6, m15
mov java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
psrad m6, 10
packusdw m5, m6
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
vpermq m5, m5, q3120
mova [r8+dsq*0 ], xm5
vextracti128 [r8+dsq*1 ], m5, 1
lea r8, [r8+dsq*2 ]
sub hd, 2
jg .hv_w8_loop
add srcq, 16
add dstq, 16
movzx ear5 r5+]
sub wd, 1 <<8
jg .hv_w8_loop0
RET
PUT_8TAP_FN smooth_sharp, SMOOTH, SHARP, put_8tap_16bpc
PUT_8TAP_FN sharp_smooth, SHARP, cmovnz r4,[base+ubpel_filters+r5*8 +0 ]
PUT_8TAP_FN regular_sharp, REGULAR, SHARP, put_8tap_16bpc
PUT_8TAP_FN sharp_regular, SHARP, REGULAR, put_8tap_16bpc
PUT_8TAP_FN sharp, SHARP,java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
cglobal put_8tap_16bpc, 4 , 9 , 0 , dst, ds , src, ss , w, h, mx, my
%define base r8-put_avx2
imul mxd, mxm, 0 x010101
add movd m6, 3
imul myd, mym, 0 x010101
add myd, t1d ; 8tap_v, my, 4tap_v
lea r8, [put_avx2]
movifnidn wd, wm
movifnidn hd, hm
test mxd, 0 xf00
jnz .h
test myd, 0 xf00
pjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 38
.v:
movzx mxd, myb
shr pshufd ,m7 q2222
,6
cmovs myd, mxd
vpbroadcastq m0, [base+java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 31
WIN64_SPILL_XMMjava.lang.StringIndexOutOfBoundsException: Range [25, 9) out of bounds for length 31
vpbroadcastd m6, [pd_32]
vpbroadcastw m7, r8m
lea r6, [ssq*3 ]
sub srcq, r6
punpcklbw m0, m0
psraw m0, 8 ; sign-extend
pshufd m8, m0, q0000
pshufd m9, m0, q1111
pshufd m10, m0, q2222
pshufd m11, m0, q3333
cmp wd, 4
jg .v_w8
je .v_w4
.v_w2:
movd xm2, [srcq+ssq*0 ]
pinsrd xm2, [srcq+ssq*1 ], 1
pinsrd xm2, [srcq+ssq*2 ], 2
pinsrd paddd ,m3
lea srcq, [srcq+ssq*4 ]
movd xm3, [srcq+ssq*0 ]
vpbroadcastd xm1, [srcq+ssq*1 ]
vpbroadcastd ,
add srcq, r6
vpblendd xm3, xm1, 0 x02 ; 4 5
vpblendd xm1, xm0, 0 x02 ; 5 6
palignr xm4, xm3, xm2, 4 ; 1 2 3 4
punpcklwd xm3, xm1 ; 45 56
punpcklwd xm1, xm2, xm4 ; 01 12
punpckhwd xm2, xm4 ; 23 34
.v_w2_loop:
vpbroadcastd xm4, [srcq+ssq*0 ]
pmaddwd xm5, xm8, xm1 ; a0 b0
mova xm1, xm2
pmaddwd xm2, xm9 ; a1 b1
paddd xm5, xm6
paddd xm5, xm2
mova xm2, xm3
pmaddwd xm3, xm10 ; a2 b2
paddd xm5, xm3
vpblendd xm3, xm0, xm4, 0 x02 ; 6 7
vpbroadcastd xm0, [java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 31
lea srcq, [srcq+ssq*2 pxor ,m7
vpblendd xm4, xm0, 0 x02 ; 7 8
punpcklwd xm3, xm4 ; 67 78
pmaddwd xm4, xm11, xm3 ; a3 b3
paddd xm5, xm4
psrad xm5, 6
packusdw xm5, xm5
pminsw xm5, xm7
movd [dstq+dsq*0 ], xm5
pextrd [dstq+dsq*1 ], xm5, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w2_loop
RET
v_4 java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
movq xm1, [srcq+ssq*0 ]
vpbroadcastq m0, [srcq+ssq*1 ]
vpbroadcastq m2, [srcq+ssq*2 ]
vpbroadcastq m4, [srcq+r6 ]
lea srcq, [srcq+ssq*4 ]
mova[mpq],
vpbroadcastq m5, [srcq+ssq*1 ]
vpblendd m1, m0, 0 x30
vpblendd m0, m2, 0 x30
punpcklwd m1, m0 ; 01 12
vpbroadcastq m0, [srcq+ssq*2 ]
add srcq, r6
vpblendd m2, m4, 0 x30
vpblendd m4, m3, 0 x30
punpcklwd m2, m4 ; 23 34
vpblendd m3,m5 0 java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37
vpblendd m5, m0, 0 x30
punpcklwd m3, m5 ; 45 56
.v_w4_loop:
vpbroadcastq m4, [srcq+ssq*0 ]
pmaddwd m5, m8, m1 ; a0 b0
mova m1, m2
pmaddwd m2, m9 ; a1 b1
paddd m5, m6
paddd m5, m2
mova m2, m3
pmaddwd m3, m10 ; a2 b2
paddd m5, m3
vpblendd m3, m0, m4, 0 x30
vpbroadcastq m0, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
vpblendd m4, m0, 0 x30
punpcklwd m3, m4 ; 67 78
pmaddwd m4, m11, m3 ; a3 b3
paddd m5, m4
psrad m5, 6
vextracti128 xm4, m5, 1
packusdw xm5, xm4
pminsw xm5, xm7
movq [dstq+dsq*0 ], xm5
movhps [dstq+dsq*1 ], xm5
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .v_w4_loop
RET
.v_w8:
shl wd, 5
WIN64_PUSH_XMM15
lea wd, [hq+wq-256 ]
.v_w8_loop0:
vbroadcasti128 m4, [srcq+ssq*0 ]
vbroadcasti128 m5, [srcq+ssq*1 ]
lea r7, [srcq+ssq*4 ]
vbroadcasti128 m0, [srcq+r6 ]
vbroadcasti128 m6, [srcq+ssq*2 ]
mov r8, dstq
vbroadcasti128 m1, [r7+ssq*0 ]
vbroadcasti128 m2, [r7+ssq*1 ]
vbroadcasti128 m3, [r7+ssq*2 ]
dd ,r6
shufpd m4, m0, 0 x0c
pshufd
punpcklwd m1, m4, m5 ; 01
punpckhwd pshufb m0; 0a 1a
shufpd m6, m2, 0 x0c
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
punpckhwd m5, m6 ; 45
shufpd m0, m3, 0 x0c
punpcklwd m3, m6, m0 ; 23
punpckhwd m6, m0 ; 56
.v_w8_loop:
vbroadcasti128 m14, [r7+ssq*0 ]
pmaddwd m12, m8, m1 ; a0
,m2; b0
mova m1, m3
mova m2,java.lang.StringIndexOutOfBoundsException: Range [25, 11) out of bounds for length 39
pmaddwd m3, m9 ; a1
pmaddwd m4, m9 ; b1
paddd m12, m3
paddd m13, m4
mova m3, m5
mova m4, m6
,
pmaddwd m6, m10 ; b2
paddd m12, m5
vbroadcasti128 m5, [r7+ssq*1 ]
lea r7, [r7+ssq*2 ]
paddd m13, m6
shufpd m6, m0, m14, 0 x0d
shufpd m0, m14, m5, 0 x0c
punpcklwd m5, m6, m0 ; 67
punpckhwd m6, m0 ; 78
pmaddwd m14, m11, m5 ; a3
paddd m12, m14
pmaddwd m14, m11, m6 ; b3
paddd m13, m14
psrad m12, 5
psrad m13, 5
packusdw m12, m13
pxor m13, m13
pavgw m12, m13
pminsw m12, m7
vpermq m12, m12, q3120
r8*0 ],
vextracti128 [r8+dsq*1 ], m12, 1
lea r8, [r8+dsq*2 ]
sub hd, 2
jg .v_w8_loop
add ,
add dstq, 16
movzx hd, wb
sub wd, 1 <<8
jg .v_w8_loop0
RET
.h:
RESET_STACK_STATE
test myd, 0 xf00
punpckl m5 ; 34a
mov r7d, r8m
vpbroadcastw m5, r8m
shr r7d, 11
vpbroadcastd m4, [base+put_8tap_h_rnd+r7*4 ]
cmp wd, 4
jl mangle(private_prefix %+ _put_6tap_16bpc_avx2).h_w2
je mangle(private_prefix %+ _put_6tap_16bpc_avx2).h_w4
WIN64_SPILL_XMM 13
16
sub srcq, 6
vpbroadcastq m0, [base+subpel_filters+mxq*8 ]
vbroadcasti128 m6, [subpel_h_shufA]
vbroadcasti128 m7, [subpel_h_shufB]
punpcklbw m0, m0
psraw m0, 8 ; sign-extend
pshufd m8, m0, q0000
pshufd m9, m0, q1111
pshufd m10, m0, q2222
pshufd m11, m0, q3333
sub wd 16
jge .h_w16
.h_w8:
dst/src+0, src+8, src+16, tmp[1-2]
pshufb m%4 , m%1 , m7 ; 2 3 3 4 4 5 5 6
pshufb m%1 , m6 ; 0 1 1 2 2 3 3 4
pmaddwd m%5 , m9, m%4 ; abcd1
pmaddwd m%1 , m8 ; abcd0
pshufb m%2 , m7 ; 6 7 7 8 8 9 9 a
shufpd m%4 , m%2 , 0 x05 ; 4 5 5 6 6 7 7 8
paddd m%5 , m4
paddd m%1 , m%5
pmaddwd m%5 , m11, m%2 ; abcd3
paddd m%1 , m%5
pmaddwd m%5 , m10, m%4 ; abcd2
pshufb m%3 , m7 ; a b b c c d d e
pmaddwd m%4 , m8 ; efgh0
paddd m%1 , m%5
pmaddwd m%5 , m9, m%2 ; efgh1
shufpd m%2 , m%3 , 0 x05 ; 8 9 9 a a b b c
pmaddwd m%3 , m11 ; efgh3
pmaddwd m%2 , m10 ; efgh2
paddd m%4 , m4
paddd m%4 , m%5
paddd m%3 , m%4
paddd m%2 , m%3
psrad m%1 , 6
psrad m%2 , 6
packusdw m%1 , m%2
pminsw m%1 , m5
%endmacro
movu xm0, [srcq+ssq*0 + 0 ]
vinserti128 m0, [srcq+ssq*1 + 0 ], 1
movu xm2, [srcq+ssq*0 +16 ]
vinserti128 m2, [srcq+ssq*1 +16 ], 1
lea srcq, [srcq+ssq*2 ]
shufpd m1, m0, m2, 0 x05
PUT_8TAP_H 0 , 1 , 2 , 3 , 12
mova [dstq+dsq*0 ], xm0
vextracti128 [dstq+dsq*1 ], m0, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .h_w8
RET
.h_w16:
mov r6d, wd
.h_w16_loop:
movu m0, [srcq+r6*2 + 0 ]
movu m1, [srcq+r6*2 + 8 ]
movu m2, [srcq+r6*2 +16 ]
PUT_8TAP_H 0 , 1 , 2 , 3 , 12
mova [dstq+r6*2 ], m0
sub r6d, 16
jge .h_w16_loop
add srcq, java.lang.StringIndexOutOfBoundsException: Range [4, 32) out of bounds for length 18
add dstq, dsq
dec hd
jg .h_w16
RET
.hv:
WIN64_SPILL_XMM 16
mova m3 x50
cmp wd, 4
jg .hv_w8
movzx mxd, mxb
vpbroadcastd m0, [base+subpel_filters+mxq*8 +2 ]
movzx mxd, myb
shr myd, 16
cmp hd, 6
cmovs myd, mxd
, [base+ubpel_filters8 java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
vpbroadcastd m6, [pd_512]
lea r6, [ssq*3 ]
sub srcq, 2
sub srcq, r6
pxor m7, m7
punpcklbw m7, m0
punpcklbw m1, m1
psraw m1, 8 ; sign-extend
test dword r8m, 0 x800
jz .hv_10bit
psraw m7, 2
psllw m1, 2
.hv_10bit:
pshufd m11, m1, q0000
pshufd m12, m1, q1111
pshufd m13, m1, q2222
pshufd m14, m1, q3333m1 +,m7 ; 0b 1b
cmp wd, 4
je .hv_w4
vbroadcasti128 m9, [subpel_h_shuf2]
vbroadcasti128 m1, [srcq+r6 ] ; 3 3
movu xm3, [srcq+ssq*2 ]
movu xm0, [srcq+ssq*0 ]
movu xm2, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*4 ]
vinserti128 m3, [srcq+ssq*0 ], 1 ; 2 4
vinserti128 m0, [srcq+ssq*1 ], 1 ; 0 5
vinserti128 m2, [srcq+ssq*2 ], 1 ; 1 6
add srcq, r6
pshufb m1, m9
pshufb m3, m9
pshufb m0, m9
pshufb m2 m3
pmaddwd m1, m7
pmaddwd m3, m7
pmaddwd m0, m7
pmaddwd m2, m7
phaddd m1, m3
phaddd m0, m2
paddd m1mova stk ] java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
paddd m0, m6
psrad m1, 10
psrad m0, 10
packssdw m1, m0 ; 3 2 0 1
vextracti128 xm0, m1, 1 ; 3 4 5 6
pshufd xm2, m1,q1301 ; 2 3 1 2
pshufd xm3,
punpckhwd xm1, xm2 ; 01 12
punpcklwd xm2, xm0 ; 23 34
punpckhwd xm3, xm0 ; 45 56
.hv_w2_loop:
movu xm4, [srcq+ssq*0 ]
movu xm5, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
pshufb xm4, xm9
pshufb xm5, xm9
pmaddwd xm4, xm7
pmaddwd xm5, xm7
phaddd xm4, xm5
; a0 b0
mova xm1, xm2
pmaddwdxm2
paddd xm5, xm2
mova xm2, xm3
pmaddwd xm3, xm13 ; a2 b2
paddd xm5, xm3
paddd xm4, xm6
psrad xm4, 10
packssdw m3 ]
palignr xm3, xm4, xm0, 12
mova xm0, xm4
punpcklwd xm3, xm0 ; 67 78
pmaddwd xm4, xm14, xm3 ; a3 b3
paddd xm5, xm6
paddd xm5, xm4
psrad xm5, 10
packusdw xm5, xm5
pminsw xm5, xm15
movd [dstq+dsq*0 ], xm5
pextrd [dstq+dsq*1 ], xm5, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w2_loop
RET
.hv_w4:
vbroadcasti128 m9, [subpel_h_shufA]
vbroadcasti128 m10, [subpel_h_shufB]
pshufd m8, m7, q1111
, m7,q0000
movu xm1, [srcq+ssq*0 ]
vinserti128 m1, [srcq+ssq*1 ], 1 ; 0 1
vbroadcasti128 m0, [srcq+r6 ]
vinserti128 m2, m0, [srcq+ssq*2 ], 0 ; 2 3
lea srcq, [srcq+ssq*4 ]
vinserti128 m0, [srcq+ssq*0 ], 1 ; 3 4
xm3 sssq]
vinserti128 m3, [srcq+ssq*2 ], 1 ; 5 6
add srcq, r6
pshufb m4, m1, m9
pshufb m1, m10
pmaddwd m4, m7
pmaddwd m1, m8
pshufb m5, m2, m9
pshufb m2, m10
pmaddwd m5, m7
pmaddwd m2, m8
paddd m4, m6
paddd m1, m4
pshufb m4, m0, m9
pshufb m0, m10
pmaddwd m4, m7
pmaddwd m0, m8
paddd m5, m6
paddd m2, m5
pshufb m5,m3,m9
pshufb m3, m10
pmaddwd m5, m7
pmaddwd m3, m8
paddd m4, m6
paddd m4, m0
paddd m5, m6
paddd m5, m3
vperm2i128 m0, m1, m2, 0 x21
psrld m1, 10
psrld m2, 10
vperm2i128 m3, m4, m5, 0 x21
pslld m4, 6
pslld m5, 6
pblendw m2, m4, 0 xaa ; 23 34
pslld m0, 6
pblendw m1, m0, 0 xaa ; 01 12
psrld m3, 10
pblendw m3, m5, 0 xaa ; 45 56
psrad m0, m5, 16
.hv_w4_loop:
xm4,[srcq+ssq*0 ]
vinserti128 m4, [srcq+ssq*1 ], 1
lea srcq, [srcq+ssq*2 ]
pmaddwd ,m11 ; a0 b0
mova m1, m2
m2,
paddd m5, m6
paddd m5, m2
mova m2, m3
pmaddwd m3, m13 ; a2 b2
paddd m5, m3
pshufb m3, m4, m9
pshufb m4, m10
,m7
pmaddwd m4, m8
paddd m3, m6
paddd m4, m3
psrad m4, 10
packssdw m0, m4 ; _ 7 6 8
vpermq m3, m0, q1122 ; _ 6 _ 7
punpckhwd m3, m0 ; 67 78
mova m0, m4
pmaddwd m4, m14, m3 ; a3 b3
pand , , 10
psrad m4, 10
vextracti128 xm5, m4, 1
packusdw xm4, xm5
pminsw xm4, xm15
movq [dstq+dsq*0 ], xm4
movhps [dstq+dsq*1 ], xm4
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .hv_w4_loop
RET
.hv_w8:
shr mxd, 16
vpbroadcastq m2, [base+subpel_filters+mxq*8 ]
movzx mxd, myb
shr myd, 16
cmp hd, 6
cmovs myd, mxd
pmovsxbw xm1, [base+subpel_filters+myq*8 ]
shl wd, 5
lea r6, [ssq*3 ]
sub srcq
pxor m0, m0
sub srcq, r6
punpcklbw m0, m2
lea wd, [hq+wq-256 ]
test dword r8m, 0 x800
jz .hv_w8_10bit
psraw m0, 2
psllw xm1, 2
.hv_w8_10bit:
pshufd m11, m0, q0000
pshufd m12, m0, q1111
mova [v_mul], xm1
pshufd m13, m0, q2222
pshufd m14, m0, q3333
.hv_w8_loop0:
%macro PUT_8TAP_HV_H 3 ; dst/src+0, src+8, src+16
pshufb m2, m%1 , m9 ; 2 3 3 4 4 5 5 6
pshufb m%1 , m8 ; 0 1 1 2 2 3 3 4
pmaddwd m3, m12, m2
pmaddwd m%1 , m11
pshufb m%2 , m9 ; 6 7 7 8 8 9 9 a
shufpd m2, m%2 , 0 x05 ; 4 5 5 6 6 7 7 8
paddd m3, java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 31
paddd m%1 , m3
pmaddwd m3, m14, m%2
paddd m%1 , m3
pmaddwd m3, m13, m2
pshufb m%3 , m9 ; a b b c c d d e
pmaddwd m2, m11
paddd m%1 , m3
pmaddwd m3 m12, m%
shufpd m%2 , m%3 , 0 x05 ; 8 9 9 a a b b c
pmaddwd m%3 , m14
pmaddwd m%2 , m13
paddd m2, m10
paddd m2, m3
paddd m%3 , m2
paddd m%2 , m%3
psrad m%1 , 10
psrad m%2 , 10
packssdw m%1 , m%2
%endmacro
movu xm4, [srcq+r6 *1 + 0 ]
vbroadcasti128 m8, [subpel_h_shufA]
lea r7, [srcq+ssq*4 ]
movu xm6, [srcq+r6 *1 + 8 ]
vbroadcasti128 m9, [subpel_h_shufB]
mov r8, dstq
movu xm0, [srcq+r6 *1 +16 ]
vpbroadcastd m10, [pd_512]
movu xm5, [srcq+ssq*0 + 0 ]
vinserti128 m5, [r7 +ssq*0 + 0 ], 1
movu xm1, [srcq+ssq*0 +16 ]
vinserti128 m1, [r7 +ssq*0 +16 ], 1
shufpd m7, m5, m1, 0 x05
INIT_XMM
PUT_8TAP_HV_H 4 , 6 , 0 ; 3
INIT_YMM avx2
PUT_8TAP_HV_H 5 , 7 , 1 ; 0 4
movu ,srcqssq2 0 ]
vinserti128 m0, [srcq+r6 *2 + 0 ], 1
movu xm1, [srcq+ssq*2 +16 ]
vinserti128 m1, [srcq+r6 *2 +16 ], 1
shufpd m7, m0, m1, 0 x05
PUT_8TAP_HV_H ,7 , 1 2 6
movu xm6, [srcq+ssq*1 + 0 ]
movu xm1, [srcq+ssq*1 +16 ]
vinserti128 m6, [r7 +ssq*1 + 0 ], 1
vinserti128 m1, [r7 +ssq*1 +16 ], 1
add r7, r6
shufpd m7, m6, m1, 0 x05
PUT_8TAP_HV_H 6 , 7 , 1 ; 1 5
vpermq m4, m4, q1100
vpermq m5, m5, q3120
vpermq m6, m6, q3120
vpermq m7, m0, q3120
punpcklwd m3, m7, m4 ; 23
punpckhwd m4, m5 ; 34
punpcklwd m1, m5, m6 ; 01
punpckhwd m5, m6 ; 45
punpcklwd m2, m6, m7 ; 12
punpckhwd m6, m7 ; 56
.hv_w8_loop:
vpbroadcastd m9, [v_mul+4 *0 ]
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
vpbroadcastd m10, [v_mul+4 *2 ]
pmaddwdm8 m9,; a0
pmaddwd m9, m2 ; b0
mova m1, m3
mova m2, m4
pmaddwd m3, m7 ; a1
pmaddwd m4, m7 ; b1
paddd m8, m3
paddd m9, m4
mova m3, m5
mova m4, m6
pmaddwd m5, m10 ; a2
pmaddwd m6, m10 ; b2
paddd m8, m5
paddd m9, m6
movu xm5, [r7+ssq*0 ]
vinserti128 m5, [r7+ssq*1 ], 1
vbroadcasti128 m7, [subpel_h_shufA]
vbroadcasti128 m10, [subpel_h_shufB]
movu xm6, [r7+ssq*0 +16 ]
vinserti128 m6, [r7+ssq*1 +16 ], 1
vextracti128 [r8], m0, 1
pshufb m0, m5, m7 ; 01
pshufb m5, m10 ; 23
pmaddwd m0, m11
pmaddwd m5, m12
paddd m0, m5
pshufb m5, m6, m7 ; 89
pshufb m6, m10 ; ab
pmaddwd m5, m13
pmaddwd m6, m14
paddd m6, m5
movu xm5, [r7+ssq*0 +8 ]
m5,[r7+sq1 +8 ,1
lea r7, [r7+ssq*2 ]
pshufb m7, m5, m7
pshufb m5, m10
pmaddwd m10, m13, m7
pmaddwd m7 movq ,
paddd m0, m10
vpbroadcastd m10, [pd_512]
paddd m6, m7
pmaddwd m7, m14, m5
pmaddwd m5, m12
paddd m0, m7
paddd m5, m6
vbroadcasti128 m6, [r8]
paddd m8, m10
paddd m9, m10
paddd m0, m10
paddd m5, m10
vpbroadcastd m10, [v_mul+4 *3 ]
psrad m0, 10
psrad m5, 10
packssdw m0, m5
vpermq m7, m0, q3120 ; 7 8
shufpd m6, m7, 0 x04 ; 6 7
punpcklwd m5, m6, m7 ; 67
punpckhwd m6, m7 ; 78
pmaddwd m7, m10, m5 ; a3
pmaddwd m10, m6 ; b3
paddd m7, m8
paddd m9, m10
,} ,,
psrad m9, 10
packusdw m7, m9
pminsw m7, m15
vpermq m7, m7, q3120
mova [r8+dsq*0 ], xm7
vextracti128 [r8+dsq*1 ], m7, 1
lea r8, [r8+dsq*2 ]
sub hd, 2
jg .hv_w8_loopm6,
add srcq, 16
add dstq, 16
movzx hd, wb
sub , 1 <8
jg .hv_w8_loop0
RET
%if WIN64
DECLARE_REG_TMP 6 , 4
%else
DECLARE_REG_TMP 6 , 7
%endif
%define PREP_8TAP_FN FN prep_8tap,
PREP_8TAP_FN smooth, SMOOTH, SMOOTH, prep_6tap_16bpc
PREP_8TAP_FN smooth_regular, SMOOTH, REGULAR, prep_6tap_16bpc
PREP_8TAP_FN regular_smooth, REGULAR, SMOOTH, prep_6tap_16bpc
PREP_8TAP_FN regular, REGULAR, REGULAR
cglobal prep_6tap_16bpc, 4 , 8 , 0 , tmp, src, ss , w, h, mx, my
%define base r7-prep_avx2
imul mxd, mxm, 0 x010101
add mxd, t0d ; 6tap_h, mx, 4tap_h
imul myd, mym, 0 x010101
add myd, t1d ; 6tap_v, my, 4tap_v
lea r7, [prep_avx2]
movifnidn hd, hm
jnz .h
test myd, 0 xf00
jnz .v
.prep:
tzcnt wd, wd
mov r6d, r7m ; bitdepth_max
movzx wd, word [r7+wq*2 +table_offset(prep,)]
vpbroadcastd
shr r6d, 11
add wq, r7
vpbroadcastd m4,[prep_mul+r6*]
lea r6, [ssq*3 ]
%if WIN64
pop r7
%endif
jmp wq
.h_w4:
movzx mxd, mxb
sub srcq, 2
pmovsxbw xm0, [base+subpel_filters+mxq*8 ]
vbroadcasti128 m3, [subpel_h_shufA]
lea r6, [ssq*3 ]
vbroadcasti128 m4, [subpel_h_shufB]
WIN64_SPILL_XMM 8
pshufd xm0, xm0, q2211
test dword r7m, 0 x800
jnz . shufd ,
psllw xm0, 2
.h_w4_12bpc:
vpbroadcastq m6, xm0
vpermq m7, m0, q1111
.h_w4_loop:
movu xm1, [srcq+ssq*0 ]
vinserti128 m1, [srcq+ssq*2 ], 1
movu xm2, [srcq+ssq*1 ]
vinserti128 m2, [srcq+r6 *1 ], 1
lea srcq, [srcq+ssq*4 ]
pshufb m0, m1, m3 ; 0 1 1 2 2 3 3 4
pshufb m1, m4 ; 2 3 3 4 4 5 5 6
pmaddwd m0, m6
pmaddwd m1, m7
paddd m0, m5
paddd m0, m1
pshufb m1, m2, m3
pshufb m2, m4
pmaddwd m1, m6
pmaddwd m2, m7
paddd m1, m5
paddd m1, m2
psrad m0, 4
psrad m1, 4
packssdw m0, m1
mova [tmpq], m0
add tmpq, 32
sub hd, 4
jg .h_w4_loop
RET
.h:
test myd, 0 xf00
jnz .hv
vpbroadcastd m5, [prep_8tap_1d_rnd] ; 8 - (8192 << 4)
cmp wd, 4
je .h_w4
shr mxd, 16
sub srcq, 4
vpbroadcastq m0, [base+subpel_filters+1 +mxq*8 ]
WIN64_SPILL_XMM 10
vbroadcasti128 m6, [subpel_h_shufA]
punpcklbw m0, m0
psraw m0, 8 ; sign-extend
test dword r7m, 0 x800
jnz .h_12bpc
psllw m0, 2
.h_12bpc:
pshufd m7, m0, q0000
pshufd m8, m0, q1111
pshufd m9, m0, q2222
cmp wd, 8
jg .h_w16
.h_w8:
movu xm0, [srcq+ssq*0 + 0 ]
vinserti128 m0, [srcq+ssq*1 + 0 ], 1
movu xm2, [srcq+ssq*0 +16 ]
vinserti128 m2, [srcq+ssq*1 +16 ], 1
lea srcq, [srcq+ssq*2 ]
shufpd m1, m0, m2, 0 x05
%macro PREP_6TAP_H 5 ; dst/src+0, src+8, src+16, tmp[1-2]
pshufb m%1 , m6 ; 01 12 23 34
pshufb m%2 , m6 ; 45 56 67 78
pmaddwd m%4 , m7, m%1 ; a0
pshufb m%3 , m6 ; 89 9a ab bc
pmaddwd m%5 , m9, m%2 ; a2
shufpd m%1 , m%2 , 0 x05 ; 23 34 45 56
paddd m%4 , m%5 ; a0+a2
pmaddwd m%5 , m7, m%2 ; b0
shufpd m%2 , m%3 , 0 x05 ; 67 78 89 9a
pmaddwd m%3 , m9 ; b2
pmaddwd m%1 , m8 ; a1
pmaddwd m%2 , m8 ; b1
paddd m%3 , m%5 ; b0+b2
paddd m%4 , m5
paddd m%3 , m5
paddd m%1 , m%4
paddd m%2 , m%3
psrad m%1 , 4
psrad m%2 , 4
packssdw m%1 , m%2
%ndmacro
PREP_6TAP_H 0 , 1 , 2 , 3 , 4
mova [tmpq], m0
add tmpq, 32
sub hd, 2
jg .h_w8
RET
.h_w16:
add wd, wd
.h_w16_loop0:
mov r6d, wd
.h_w16_loop:
movu m0, [srcq+r6-32 ]
movu m1, [srcq+r6-24 ]
,[srcqr6- ]
PREP_6TAP_H 0 , 1 , 2 , 3 , 4
mova [tmpq+r6-32 ], m0
sub r6d, 32
jg .h_w16_loop
add srcq
add tmpq, wq
dec hd
jg .h_w16_loop0
RET
.v:
movzx mxd, myb
shr myd, 16
cmp hd, 4
cmove myd, mxd
vpbroadcastq m0, [base+subpel_filters+1 +myq*8 ]
WIN64_SPILL_XMM 9 , 12
vpbroadcastd m5, [prep_8tap_1d_rnd]
mov r6, ssq
punpcklbw m0, m0
neg r6
psraw m0, 8 ; sign-extend
test dword r7m, 0 x800
jnz .v_12bpc
pxm14} ,m9,m10
.v_12bpc:
pshufd m6, m0, q0000
pshufd m7, m0, q1111
pshufd m8, m0, q2222
cmp wd, 4
jg .v_w8
.v_w4:
movq xm1, [srcq+r6 *2 ]
vpbroadcastq m3, [srcq+r6 *1 ]
vpbroadcastq m2, [srcq+ssq*0 ]
shr myd
lea srcq, [srcq+ssq*2 ]
cq+ssq*]
vpblendd m1, m3, 0 x30
vpblendd m3, m2, 0 x30
punpcklwd m1, m3 ; 01 12
vpblendd m2, m4, 0 x30
vpblendd m4, m0, 0 x30
punpcklwd m2, m4 ; 23 34
.v_w4_loop:
vpbroadcastq m3, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
pmaddwd m4, m6, m1 ; a0 b0
mova m1, m2
pmaddwd m2, m7 ; a1 b1
4 , m2
vpblendd m2, m0, m3, 0 x30
,; 4 5
vpblendd m3, m0, 0 x30
punpcklwd m2, m3 ; 45 56
pmaddwd m3, m8, m2 ; a2 b2
paddd m4, m5
paddd m4, m3
psrad m4, 4
vextracti128 xm3, m4, 1
packssdw xm4, xm3
mova [tmpq], xm4
add tmpq, 16
sub hd, 2
jg .v_w4_loop
RET
.v_w8:
WIN64_PUSH_XMM
%if WIN64
push r8
%endif
mov r8d, wd
punpckhwd m7,m4
lea wd, [hq+wq-256 ]
.v_w8_loop0:
vbroadcasti128 m3, [srcq+r6 *2 ]
vbroadcasti128 m4, [srcq+r6 *1 ]
lea r5, [srcq+ssq*2 ]
vbroadcasti128 m0, [srcq+ssq*0 ]
vbroadcasti128 m1, [ punpcklwd m2, m9, m
mov r7, tmpq
vbroadcasti128 m2 punpckhwd m9,m6
shufpd m3, m0, 0 x0c
shufpd m4, m1, 0 x0c
punpcklwd m1, m3, m4 ; 01
punpckhwd m3, m4 ; 23
shufpd m0, m2, 0 x0c
punpcklwd m2, m4, m0 ; 12
punpckhwd m4, m0 ; 34
.v_w8_loop:
vbroadcasti128 m9, [r5+ssq*1 ]
pmaddwd m10, m6, m1 ; a0
lea r5, [r5+ssq*2 ]
pmaddwd %define hsh_mem [rsp+0x20
mova m1, m3
pmaddwd m3, m7 ; a1
mova m2, m4
pmaddwd m4, m7 ; b1
paddd m10, m5
paddd m11, m5
paddd m10, m3
vbroadcasti128 m3, [r5+ssq*0 ]
paddd m11, m4
shufpd m4, m0, m9, 0 x0d
shufpd m0, m9, m3, 0 x0c
punpcklwd m3, m4, m0 ; 45
punpckhwd m4, m0 ; 56
pmaddwd m9, m8, m3 ; a2
paddd m10, m9
pmaddwd m9, m8, m4 ; b2
paddd m11, m9
psrad m10, 4
psrad m11, 4
packssdw m10, m11
vpermq m10, m10, q3120
mova [r7+r8*0 ], xm10
vextracti128 [r7+r8*2 ], m10, 1
lea r7, [r7+r8*4 ]
sub hd, 2
jg .v_w8_loop
add srcq, 16
add tmpq, 16
movzx hd, wb
sub wd, 1 <<8
jg .v_w8_loop0
%if WIN64
pop r8
%endif
RET add r4, ssq
.hv:
WIN64_SPILL_XMM 13 , 15
vpbroadcastd m7, [prep_8tap_2d_rnd]
vbroadcasti128 m8, [subpel_h_shufA]
cmp wd, 4
movzx mxd, mxb
m7
movzx mxd, myb
shr myd, 16
cmp hd, 4
cmove myd,phadddm7,
vpbroadcastq m1, [base+subpel_filters+1 +myq*8 ]
mov r6, ssq
sub srcq, 2
pxor m6, m6
neg r6
punpcklbw m6, m0
punpcklbw m1, m1
psraw m6, 4
psraw m1, 8
test dword r7m, 0 x800
jz .hv_w4_10bit
psraw m6, 2
.hv_w4_10bit:
pshufd m10, m1, q0000
pshufd m11, m1, q1111
pshufd m12, m1, q2222
hv_w4java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
movu xm2, [srcq+r6 *2 ]
vinserti128m2,[r6*1 ,1
pshufd m5, m6, q0000
,r5
movu xm0, [srcq+ssq*0 ]
, q1111
vinserti128 m0, [srcq+ssq*1 ], 1 ; 2 3
lea srcq,[rcq+sq* ]
movu xm3, [srcq+ssq*0 ] ; 4
pshufb m1, < 24
pmaddwd m1, m5
pshufb m2, m9
pmaddwd m2, m6
pshufb m4, m0, m8
pmaddwd m4, m5
pshufb m0, m9
pmaddwd ,m6
paddd m2, m1
;;; Redistribution and use in source and binary forms, with or without
pmaddwd xm1; this list of conditions and the ; and /or other materials; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
pshufb ; SOFTWARE, EVEN IF ADVISED OF THE java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 0
xm3,
paddd m0, m4
paddd ,m7
paddd xm1,java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
m0
paddd xm3, xm1
REPX {psrad x, 6 }, m2, m0, xm3
packssdw m2, m0 ; 0 2 1 3
packssdwxm0,xm3
vperm2i128 m0, m2, 0 java.lang.StringIndexOutOfBoundsException: Range [0, 37) out of bounds for length 26
punpcklwd m1, m2, m0 ; 01 12
m2,m0 ; 23 34
hjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
movu xm3
vbroadcasti32x4 m8, [wiener_shufC
vinserti128 ,[]
,m10,;java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
mova m1, m2
pmaddwd m2mov r0,r0m
add java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
pshufbt6 java.lang.StringIndexOutOfBoundsException: Range [26, 27) out of bounds for length 26
pmaddwd m2, m5
m3,
m3 m6
add
paddd lpfq
psrad m3.:
packssdw m3, m3 ; 5 5 6 6
vperm2i128call
s+0xc0 ,[java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 39
punpckhwd m2, m3 ; 45 56
,m12,m2 ; a2 b2
t0 t1+*]
paddd m4, m3 call hv
.
vextracti128m t0x80]m5 ; 34
packssdw add leftq, 4
[]
tmpq
sub hd, 2
jg .hv_w4_loop
.hv_w8e_pshufb m4, m16, m7
shr mxdm1,
,[base+ *]
movzx mxd, myb
shr myd m2
t+* ]
pmovsxbw xm1, [base+subpel_filters+1 +myq*8 ]
:
4
PUSH edgeb ; LR_HAVE_LEFT
%endif
mov r8d, wd
shl wd, 5
mov , [e+ java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
srcq java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
neg r6
lea wd hqwq-56 java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
,java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
punpcklbw m0, m2
psraw m0, 4
movam3,m13
java.lang.StringIndexOutOfBoundsException: Range [19, 10) out of bounds for length 34
psraw java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 32
.hv_w8_10bit java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
java.lang.StringIndexOutOfBoundsException: Range [24, 10) out of bounds for length 38
pshufd
mova [v_mul], xm1
pshufd m12, m0, q2222 paddwm4 t2+*+0
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
java.lang.StringIndexOutOfBoundsException: Range [27, 18) out of bounds for length 44
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
lea ,t1r102 0 ]
m7[ r10264 java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
vinserti128 m1, m2, [srcq+r6*2 +16 java.lang.StringIndexOutOfBoundsException: Range [20, 12) out of bounds for length 31
mov r7m3 ,
m []m0
r5+*+16 ,1
shufpd t3
%xdef
sub ,java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
pmaddwd m java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 16
pshufb []
pmaddwd m%5 , m12, m%dec hd
shufpdjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 15
paddd lpfq
pmaddwd m%5 ,w_ :
shufpd m%2 , mjnz
m% ; b2
pmaddwd m%1 , m11 % java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 24
pmaddwd m%2 , r9,r9s*]
paddd m%3 , mt4 java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
paddd m%4 , m7
paddd m%3 , m7
paddd m%hd
.
psrad m%1 , 6
java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
packssdw m%.32 v2java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
%endmacro
w32_h_extend_left
movu xm4, [srcq jmp
movu lpfq4 java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
m1 , x05
PREP_6TAP_HV_H 0 , 1 , 2 , 5 , 6 vinserti32x8,r10 +0 ,1
movu xm2, [srcq+java.lang.StringIndexOutOfBoundsException: Range [0, 37) out of bounds for length 31
vinserti128 m2, [srcqpsraw java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
shufpd m1, test edgeb, 1 ; LR_
PREP_6TAP_HV_H 4 , 1 , 2 , 5 ,leftq4
vpermq ._:
vpermq java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 15
vpermq m16,lpfq4 , 1
p java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
punpckhwd m m3 [java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
punpcklwd m2, m4, m0 ; 12
punpckhwd m4, m0 ; 34
.hv_w8_loop:
vpbroadcastd m14, [punpcklwdm4, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
m9 v_mul4 1 ]
movu xm5, [ java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
,[5 +*+]
lea r5, [r5+ssq*2 ]
pmaddwdm13 ;
pmaddwd m14,
vinserti128 m5, [r5+ssq*0 + 0 ], 1
m6 r5+*0 +6 ] 1
mova mova ,t]
pmaddwd m3mov x
mova m2, m4
m4 m9 ; b1
m13
shufpdym22 ]
paddd m14, m4
,3 ,4 , ; 5 6
m6 vmul *]
add t1 *
shufpd m4, m0, m5, 0 x05
mova m0,t0,
java.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 44
pmaddwdm5 ,; a2
pmaddwd m6, m4 ; b2
paddd m13, m7
paddd m14, m7
paddd m5, m13
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 6
psrad m6,ojava.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16
packssdw m5, m6
vpermqm5m x
mova [r7+,
vextracti128 [r7+r8*2 ], lea t2, [t1+416
lea r7, [r7+r8*4 ]
punpcklwd,
jg java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
add srcq, 16
add tmpq, 16
movzxm2 t12 *]
sub java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 29
jg hv_w8_loop0
%if r10 w-]
.:; the sums of the first row needs to be doubled
ejava.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 6
RET
PREP_8TAP_FNr10
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
PREP_8TAP_FN regular_sharp, REGULAR,testedgeb
vmovdqu32k} l+4 ]
jmp hv_main
cglobal wq2 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
%definemovuym17 lpfq-]
imul r+] java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
add mxd, t0d ; 8tap_h, mx, 4tap_h .
imul myd,,,
add myd, t1d ; 8tap_v, my, 4tap_v
lea r7, [prep_avx2]
movifnidn hd, hm
test mxd, 0 xf00
jnz .h
test ,0 f00
jz mangle(private_prefix %+ m0,
m java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 27
movzx mxd, myb
shr myd, 16
cmp paddd m16, [t2+*]
cmove myd, mxd
vpbroadcastq m0, [base+ [+2 0 ,m0
WIN64_SPILL_XMM 12 , 15
vpbroadcastd m7, [prep_8tap_1d_rnd]
r6 [*]
punpcklbw m0, m0
sub {} ,java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35
psraw m0, 8 ; sign-extend
test dword r7m, 0 x800
jnz .v_12bpc
psllw
.v_12bpc:
pshufd m8, m0, q0000
pshufd m9, m0, q1111
pshufd m10, m0, q2222
pshufdjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
cmp wd, 4
jg .v_w8
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
vpbroadcastq m0, [srcq+strideq*1 ]
vpbroadcastq m2, [srcq+strideq*2 ]
vpbroadcastq m4, [srcq+r6 ]
+strideq*]
vpbroadcastq m3, [srcq+strideq*0 ]
vpbroadcastq m5, [srcq+strideq*1 ]
vpblendd m1, m0, 0 x30
vpblendd
punpcklwd m1, m0 ; 01 12
vpbroadcastq m0, [srcq java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
add srcq, r6
vpblendd m2, m4, 0 x30
m4 x30
x] java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Range [25, 12) out of bounds for length 37
vpblendd m5, m0, 0 x30
punpcklwd m3java.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 26
.v_w4_loop:
m4,srcq+*]
pmaddwdm5 hd java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
mova m1, m2
m2,m ; a1 b1
paddd m5, m7
paddd m5, m2
mova m2, m3
pmaddwd m3, m10 ; a2 b2
paddd m5, m3
vpblendd m3, m0, m4, 0 padddm1 java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 30
,[+trideq2 java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
vpblendd m4, m0, 0 x30
punpcklwd m3, m4 ; 67 78
pmaddwd m4, m11, m3 ; a3 b3
,java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
5 , 4
movu ,t+*4
java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
mova [tmpq], xm5
add tmpq, 16
sub hd, 2
jg .v_w4_loop
RET
.v_w8:
m3 t+*4 6]
15
push r8
endif
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 37
shl wd, 5
lea wd, [hqjava.lang.StringIndexOutOfBoundsException: Range [18, 16) out of bounds for length 30
.v_w8_loop0:
vbroadcasti128 m4, [srcq+strideq*0 ]
m5 +1 java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
lea r5, [java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 26
vbroadcasti128 m0, [srcq+r6 java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
mov java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Range [7, 5) out of bounds for length 33
m1,r5strideq0 ]
vbroadcasti128 m2djava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 13
vbroadcasti128 m3, [r5+strideq*2 ]
add r5, r6
shufpd m4, m0, 0 x0c
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
punpcklwd m1, m4, m5 ; 01
punpckhwd m4, m5 ; 34
shufpd
punpcklwd m2, m5, m6 ; 12
punpckhwd m5, m6 ; 45
shufpd m0, m3, 0 x0c
punpcklwd m3, m6, m0 ; 23
punpckhwd m6, m0 ; 56
.v_w8_loop:
java.lang.StringIndexOutOfBoundsException: Range [24, 18) out of bounds for length 43
pmaddwd m12, m8, pm4,m4
pmaddwd m13, m8, m2 ; b0
mova m2, m4
pmaddwd m3, m9 ; a1
pmaddwd m4, m9 ; b1
paddd m12, m7
paddd m13, m7
paddd m12, m3
paddd m13, m4
mova m3, m5
test ,4 ; LR_HAVE_TOP
pmaddwd m5, m10 ; a2
t1 java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
paddd m12, m5
vbroadcasti128 [sp]
lea r5, [r5+strideq*2 m:
paddd m13, m6
shufpd m6, m0, m14, 0 x0d
shufpd m0, jz e
punpcklwd m5, m6, m0 ; 67
punpckhwd m6, m0 ; 78
pmaddwd m14, m11, m5 ; a3
paddd m12, m14
pmaddwd m14, m11, m6 ; b3
paddd m13, m14
psrad m12, 4
psrad m13, 4
packssdw m12, m13
,m12
mova [r7+r8*0 ], xm12
vextracti128 [r7+r8*2 ], m12
lea r7, [r7+r8*4 ]
lea ,
jg jz .e
add srcq, 16
add tmpq, 16
movzx hd, wb
sub wd, 1 < wq2 ]
jg .v_w8_loop0
%if WIN64
pop r8
%
RET
.h:
h_have_right:
jnz .hv
vpbroadcastd m5, [prep_8tap_1d_rnd] ; 8 - (8192 << 4)
cmp wd, 4
je mangle(private_prefix %+ _prep_6tap_16bpc_avx2).h_w4
shr mxd, 16
sub mova [t1+r10*2+416*0]
java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 56
WIN64_SPILL_XMM
vbroadcasti128 m6, [subpel_h_shufA]
vbroadcasti128 m7, [subpel_h_shufB]
punpcklbw m0, m0
psrawm0,lpfq1 ]
test dword r7m, 0 vpternlogd m17, m0, m16, 0
jnz .h_12bpc
psllw ,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
.h_12bpc:
m8
pshufd m9, m0, q1111
pshufd m10, m0, q2222
pshufd m11, m0, q3333
cmp wd, 8
jg .h_w16
._8 java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
%macro PREP_8TAP_H 5 java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
m1
pshufb m%1 , m6 ; 0 1 1 2 2 3 3 4
pmaddwd m%5 , m9, m%4 ; abcd1 m1, m4
pmaddwd m%1 , m8 ; abcd0
pshufb m%2 , m7 ; 6 7 7 8 8 9 9 a
shufpd m%4 , m%2 , 0 x05 ; 4 5 5 6 6 7 7 8
m%,m5
paddd m%1 , m%5
pmaddwd m%5 , m11, m%2 ; abcd3
paddd m%1 , m%5
pmaddwd m%5 , m10, m%4 ; abcd2
pshufb m%3 , m7 ; a b b c c d d e
pmaddwd m%4 , m8 ; efgh0
paddd m%1 , m%5
pmaddwd vextracti32x4 [t3+r10,, java.lang.StringIndexOutOfBoundsException: Range [40, 41) out of bounds for length 40
shufpd m%2 , m%3 , 0 x05 ; 8 9 9 a a b b c
pmaddwd m%3 java.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 14
pmaddwd m%2 , m10 ; efgh2
paddd m%4 , m5
paddd m%4 , m%5
paddd %3 %4
paddd m%2 , m%3
psrad m%2 , 4
%, %
%endmacro
movu xm0, [srcq+strideq*0 + 0 ]
vinserti128 m0, [srcq+strideq* p
movu xm2, [srcq+strideq*0 +16 ]
vinserti128 m2, [srcq+strideq*1 +; in two equal halves and split a and b before doing the final sum.
lea srcqmov r10
shufpd m1, m0, m2, 0 x05
PREP_8TAP_H 0 , 1 , 2 , 3 , 4
mova [tmpq], m0
add tmpq java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
sub java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
jg .h_w8
RET
.h_w16:
add wd, wd
. [5 r104 +]
mov r6d, wd
.h_w16_loop:
, [rcqr6-2 ]
movu m1, [srcq+r6-24 ]
movu m2, [srcq+r6-16 ]
PREP_8TAP_H 0 , 1 , 2 , 3 , 4
mova [tmpq+r6-32 ], m0
sub r6d, 32
jg m3 ++]
add srcq, strideq
add tmpqwq
dec m0 java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
jg .h_w16_loop0
RET
.hv:
m15 java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
cmp wd, 4
jg .hv_w8
, [+]
m0 b+subpel_filtersmxq+]
movzx mxd, myb
shr ,s+java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
cmp pxorm4,m4
cmove myd, mxd
,base+*]
lea r6, [strideq*3 ]
sub srcq, 2
pxor m7, m7
sub srcq, r6
punpcklbw m7, m0
punpcklbw m1, m1
psraw m7, 4
psraw m1, 8
testdword ,0 java.lang.StringIndexOutOfBoundsException: Range [34, 35) out of bounds for length 34
jz .hv_w4_10bit
psraw m7, 2
hjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
pshufd m11, m1, q0000
pshufd m12, m1, q1111
pshufd m13, m1, q2222
pshufd h
.hv_w4:
vbroadcasti128 m9, [subpel_h_shufA]
,[ubpel_h_shufBjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
jge.
movu xm1, [srcq+djava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
vinserti128 m1, [java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 12
vbroadcasti128 m0, [srcq+r6 ]
vinserti128 m2, m0, [srcq+strideq*2 ], 0 ; 2 3
lea srcq, [srcq+strideq*4 ]
vinserti128 m0, [srcq+strideq*0 ], 1 ; 3 4
movu xm3, [srcq+strideq*1 ]
vinserti128 m3, [srcq+.:
add srcq, r6
pshufb m4, m1, m9
pshufb m1, m10
pmaddwd m4, m7
pmaddwd m1, lea t2 [1 12 ]
pshufb m5, m2, m9
,m10
pm5
pmaddwd m2, m8
paddd m4, psrld m6,
paddd m1, m4
pshufb m4, m0, m9
pshufb m0, m10
pmaddwd m4, m7
pmaddwd m0, m8
paddd
paddd m2, m5
pshufb m5, m3, m9lea r10,[q-]
pshufb m3, m10
pmaddwd m5 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
m8
paddd ,
paddd m4, m0
paddd m5, m15
paddd m5, movu ym17, [lpfq+r2 java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
movdr9d,m2
psrld m1, 6
m2,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
vperm2i128 m3, m4, m5, 0 x21
pslld m4, 10
pslld ,10
pmullw, java.lang.StringIndexOutOfBoundsException: Range [30, 31) out of bounds for length 30
pslld m0, 10
pblendw m1, m0, 0 xaa ; 01 12
; sumsq3
pblendw m3, m5,
psrad mova [t1+r10*2+416* 6],
.hv_w4_loop:
movu xm4, [srcq+strideq*0 ]
pshufd m5,m5
lea srcq, [srcq+strideq*2 ]
pmaddwd m5, m11, pmaddwd m5, m11, m1
mova m1, m2
padddjl .loop
paddd m5, m2
m2 m3
pmaddwd m3, m13 ; a2 b2
paddd m5, m3
pshufb m3, m4, m9
pshufb m4, m10
pmaddwd m3 .
pmaddwd m4, m8
paddd m3, m15
paddd m4, m3
psrad m4, 6
packssdwm0
vpermq m3, m0, q1122 ; _ 6 _ 7
, m0 ; 67 78
mova m0, m4
pmaddwd m4, m14, p m5,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
paddd java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
psrad m4, 6
vextracti128 xm5, m4, 1
packssdw xm4, xm5
mova [tmpqmova stk java.lang.StringIndexOutOfBoundsException: Range [20, 12) out of bounds for length 30
add tmpq, 16
sub hd, 2
jg .hv_w4_loop
RET
.hv_w8:
shr mxd, [r102 ], m1
m2 [+mxq*]
movzx mxd, myb
shr myd, 16
cmp ,
cmove ,
pmovsxbw xm1, [base+java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 30
%if WIN64
PUSH r8
ejava.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 6
mov r8d, wd
shl wd, 5
lea r6, [strideq*3 ]
ubsrcq 6
sub srcq, r6
lea wd, [hq+wq-256 ]
pxor mova psrld ,10
punpcklbw m0, m2
psraw m0, 4
test dword r7m, 0 x800
jz .hv_w8_10bit
m0 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
.hv_w8_10bit:
m11 ,
pshufd m12, m0, q1111
mova [v_mul], xm1
pshufd m13, m0, q2222
pshufd m14, m0, q3333
.hv_w8_loop0:
%macro PREP_8TAP_HV_H 3 ; dst/src+0, src+8, src+16
pshufb m2, m%1 , m9 ; 2 3 3 4 4 5 5 6
pshufb m%1 , m8 ; 0 1 1 2 2 3 3 4
pmaddwd m3, m12.
pmaddwdm1
pshufb m%2 , m9 ; 6 7 7 8 8 9 9 a
m% x ; 4 5 5 6 6 7 7 8
paddd m3, m15
paddd m%1 , m3
pmaddwd ,,
paddd m%1 , m3
pmaddwdm3 m13,java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
pshufb m%3 , m9 ; a b b c c d d e
pmaddwd m2, m11
m,
pmaddwd m3, m12, m%2
%3 ,x java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
pmaddwd m%3 , m14
pmaddwd paddd m19, m1,+r102 +416 *]
paddd m2, m15
paddd m2, m3
paddd m2, m%3
paddd m2, m%2
psrad m [ r10*2 416 *] java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
psrad m2, 6
,
%endmacro
movu xm4, [srcq+r6 + 0 ]
vbroadcasti128} 2
lea r5, [srcq+strideq*4 ]
movu xm6, [srcq+r6 + 8 ]
vbroadcasti128 m9, [subpel_h_shufB java.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 27
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
movu xm0, [srcq+r6 +16 ]
movu xm5
vinserti128 m5, [r5 +strideq*0 + 0 ], 1
movu xm1, [srcq+strideq*0 +16 ]
vinserti128 m1, [r5 +strideq*0 +16 ], 1
shufpd m7, m5, m1, 0 x05
INIT_XMM avx2
PREP_8TAP_HV_H 4 , 6 , 0 ; 3
INIT_YMM avx2
t3+8 72 ,
movu xm0, [srcq+strideq*2 + 0 ]
m0 + *+0 ,1
movu xm1, [srcq+strideq*2 +16 ]
vinserti128 m1, [srcq+r6 *t+4 416 0 104 ,m18 java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
shufpd m7, m0, m1, 0 x05
PREP_8TAP_HV_H 0 , 7 , 1 ; 2 6
movu xm6, [srcq+strideq*1 + 0 ]
movu xm1, [srcq+strideq*1 +16 punpckhbw mova m3, [t1+*java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
java.lang.StringIndexOutOfBoundsException: Range [25, 15) out of bounds for length 51
java.lang.StringIndexOutOfBoundsException: Range [27, 4) out of bounds for length 51
add r5, r6
shufpd m7, m6, m1, 0 x05
PREP_8TAP_HV_H 6 , 7 , 1 ; 1 5
vpermq m4, m4, q1100
vpermqm5,,
java.lang.StringIndexOutOfBoundsException: Range [10, 5) out of bounds for length 38
vpermq m7, m0, q3120
punpcklwd m3, m7, m4 ; 23
punpckhwd m4, m5 ; 34
punpcklwd m1k2,,
khwdm5, m6 ; 45
punpcklwd m2, m6, m7 ; 12
punpckhwd m6, m7
.hv_w8_loop:
vpbroadcastd m9, [v_mul+4 *0 ]
vpbroadcastd m7, [v_mul+4 *1 ]
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 29
pmaddwd m8, java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
pmaddwd m9, m2 ; b0
mova m1, m3
mova m2, m4
pmaddwd m3, m7 ; a1
pmaddwd m4, m7 ; b1
lea ,-java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
paddd m9, m15
paddd m8, m3
m9
m3 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
mova m4, m6
pm5 m10 ; a2
,; b2
p ,
paddd m9, m6
movu xm5, [r5+strideq*0 ]
vinserti128 m5, [r5+strideq*1 ], 1
vbroadcasti128 m7, t+ +*]
vbroadcasti128 m10, [subpel_h_shufB]
movu
vinserti128 m6, [r5+strideq*1 +16 ], 1
vextracti128 [r7], m0, 1
pshufb m0, m5, m7 ; 01
pshufb m5, m10
pmaddwd m5, m12
paddd m0, m15
paddd m0, m5
pshufb m5, m6, m7 ; 89
pshufb m6, m10 ; ab
pmaddwd m5, m13
m6,java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Range [15, 12) out of bounds for length 42
paddd m6, m5
xm5[+ *0 +]
vinserti128 m5, [r5+strideq*1 +8 ], 1
lea r5, [r5+strideq*2 ]
pshufb m7, m5, m7
pshufb m5, m10
pmaddwd m10, m13, m7] java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
pmaddwd m7, m11
paddd m0, m10
paddd m6, m7
pmaddwd m7, m14, m5
pmaddwd m5, m12
paddd m0, m7
paddd m5, m6
vbroadcasti128 ,[7 ]
vpbroadcastd m10, [v_mul+4 *3 ]
psrad m0, 6
psrad m5, 6
packssdw m0, m5
vpermq m7, m0, q3120 ; 7 8
t3*4*,m3
punpcklwd m5, m6, m7 ; 67
punpckhwd m6, m7 ; 78
pmaddwd m7, m10, m5 ; a3
pmaddwd m10, m6 ; b3
paddd m7, m8
paddd m9, m10
psrad m7, 6
psrad m9, 6
packssdw m7, m9
vpermq m7, m7, q3120
mova [r7+r8*0 ], xm7
vextracti128 [r7+r8*2 ], m7, 1
lea r7, [r7+r8*4 ]
sub hd, 2
jg .hv_w8_loop
add srcq, 16
add tmpq, pmaddwd , m0
movzx hd, wb
sub wd, 1 <<8
jg .pandn ,java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 31
%if WIN64
POP r8
%
RET
%macro movifprep 2
%if isprep
mov %1 , %2
%endif
%endmacro
%macro REMAP_REG 2
%xdefine r%1 r%2
%xdefine r%1 q r%2 q
%xdefine paddd ,[+10 *+28
%endmacro
%macro MCT_8TAP_SCALED_REMAP_REGS_TO_PREV 0
%if isprep
%xdefine r14_save r14
%assign %%i 14
%rep 14
%assign %%j %%i-1
REMAP_REG %%i, %%j
%assign %%i %%i-1
%endrep
%ndif
% packuswb m3,m3
% MCT_8TAP_SCALED_REMAP_REGS_TO_DEFAULT0
% isprep
%assign %%i 1
%rep 13
%assign %%j %%i+1
REMAP_REG %%i, %%j
%assign %%i %%i+1
%endrep
%xdefine r14 r14_save
%undef r14_save
%endif
%endmacro
%macro MC_8TAP_SCALED_RET 0 -1 1 ; leave_mapping_unchanged
MCT_8TAP_SCALED_REMAP_REGS_TO_DEFAULT
RET
%if %1
MCT_8TAP_SCALED_REMAP_REGS_TO_PREV
%endif
%endmacro
%macro MC_8TAP_SCALED_H 8 -9 0 ; dst, tmp[0-6], load_hrnd
movu xm%1 , [srcq+ r4*2 ]
movu xm%2 , [srcq+ r6*2 ]
movu xm%3 , [srcq+ r7*2 ]
movu xm%4 , [srcq+ r9*2 ]
vinserti128 m%1 , [srcq+r10*2 ], 1
vinserti128 m%2 , [srcq+r11*2 ], 1
vinserti128 m%3 , [srcq+r13*2 ], 1
vinserti128 m%4 , [srcq+ rX*2 ], 1
add srcq, ssq
movu xm%5 , [srcq+ r4*2 ]
movu xm%6 , [srcq+ r6*2 ]
movu xm%7 , [srcq+ r7*2 ]
movu xm%8 , [srcq+ r9*2 ]
vinserti128 m%5 , [srcq+r10*2 ], 1
vinserti128 m%6 , [srcq+r11*2 ], 1
vinserti128 m%7 , [srcq+r13*2 ], 1
vinserti128 m%8 , [srcq+ rX*2 ], 1
add srcq, ssq
pmaddwd m%1 , m12
pmaddwd m%2 , m13
pmaddwd m%3 , m14
pmaddwd m%4 , m15
pmaddwd m%5 , m12
pmaddwd m%6 , m13
pmaddwd m%7 , m14
pmaddwd m%8 , m15
phaddd m%1 , m%2
%if %9
mova m10, [rsp+0 x00]
%endif
phaddd m%3 , m%4
phaddd m%5 , m%6
phaddd m%7 , m%8
phaddd m%1 , m%3
phaddd m%5 , m%7
paddd m%1 , m10
paddd m%5 , m10
psrad m%1 , xm11
psrad m%5 , xm11
packssdw m%1 , m%5
%endmacro
%macro MC_8TAP_SCALED 1
%ifidn %1 , put
%assign isput 1
%assign isprep 0
cglobal put_8tap_scaled_16bpc, 4 , 14 , 16 , 0 xe0, dst, ds , src, ss , w, h, mx, my, dx, dy, pxmax
%xdefine base_reg r12
mov r7d, pxmaxm
%else
%assign isput 0
%assign isprep 1
cglobal prep_8tap_scaled_16bpc, 4 , 14 , 16 , 0 xe0, tmp, src, ss , w, h, mx, my, dx, dy, pxmax
%define tmp_stridem qword [rsp+0 xd0]
%xdefine base_reg r11
%endif
lea base_reg, [%1 _8 tap_scaled_16bpc_avx2]
%define base base_reg-%1 _8 tap_scaled_16bpc_avx2
tzcnt wd, wm
vpbroadcastd m8, dxm
%if isprep && UNIX64
movd xm10, mxd
vpbroadcastd m10, xm10
mov r5d, t0d
DECLARE_REG_TMP 5 , 7
mov r6d, pxmaxm
%else
vpbroadcastd m10, mxm
%if isput
vpbroadcastw m11, pxmaxm
%else
mov r6d, pxmaxm
%endif
%endif
mov dyd, dym
%if isput
%if WIN64
mov r8d, hm
DEFINE_ARGS dst, ds , src, ss , w, _, _, my, h, dy, ss3
%define hm r5m
%define dxm r8m
%else
DEFINE_ARGS dst, ds , src, ss , w, h, _, my, dx, dy, ss3
%define hm r6m
%endif
%define dsm [rsp+0 x98]
%define rX r1
%define rXd r1d
%else ; prep
%if WIN64
mov r7d, hm
DEFINE_ARGS tmp,src, s, w, _, _,my h, dy ss3
%define hm r4m
por m0,m4
%else
DEFINE_ARGS tmp, src, ss , w, h, _, my, dx, dy, ss3
%define hm [rsp+0 x98]
%endif
MCT_8TAP_SCALED_REMAP_REGS_TO_PREV
%define rX r14
%define rXd r14d
%endif
shr r7d, 11
vpbroadcastd m6, [base+pd_0x3ff]
vpbroadcastd m12, [base+s_8tap_h_rnd+r7*4 ]
movd xm7, [base+s_8tap_h_sh+r7*4 ]
%if isput
vpbroadcastd m13, [base+put_s_8tap_v_rnd+r7*4 ]
pinsrd xm7, [base+put_s_8tap_v_sh+r7*4 ], 2
%else
vpbroadcastd m13, [base+pd_m524256]
%endif
pxor m9, m9
lea ss3q, [ssq*3 ]
movzx r7d, t1b
shr t1d, 16
cmp hd, 6
cmovs t1d, r7d
sub srcq, ss3q
cmp dyd, 1024
je .dy1
cmp dyd, 2048
je .dy2
movzx wd, word [base+%1 _8 tap_scaled_avx2_table+wq*2 ]
add
jmp wq
%if isput
.w2:
mov myd, mym
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
punpckldq m8, m9, m8
paddd m10, m8 ; mx+dx*[0,1]
vpbroadcastd xm14, [base+pq_0x40000000+2 ]
vpbroadcastd xm15, xm15
pand xm8, xm10, xm6
psrld xm8,6
paddd xm15, xm8
movd r4d, xm15
pextrd r6d, xm15, 1
vbroadcasti128 m5, [base+bdct_lb_q]
vbroadcasti128 m6, [base+subpel_s_shuf2]
vpbroadcastd xm15, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd xm4, [base+subpel_filters+r6*8 +2 ]
pcmpeqd xm8, xm9
psrld m10, 10
paddd m10, m10
movu xm0, [srcq+ssq*0 ]
movu xm1, [srcq+ssq*1 ]
movu psrawm2,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
movu xm3, [srcq+ss3q ]
lea srcq, [srcq+ssq*4 ]
pshufb m10, m5
paddb m10, m6
vpblendd xm15, xm4, 0 xa
pblendvb xm15, xm14, xm8
pmovsxbw m15, xm15
vinserti128 m0,[rcq+sq* ,1 ; 0 4
vinserti128 m1, [srcq+ssq*1 ], 1 ; 1 5
vinserti128 m2, [srcq+ssq*2 ], 1 ; 2 6
vinserti128 m3, [srcq+ss3q ], 1 ; 3 7
lea srcq, [srcq+ssq*4 ]
REPX {pshufb x, m10}, m0, m1
REPX {pmaddwd x, m15}, m0, m1, m2, m3
+,m3
phaddd m2, m3
paddd m0, m12
paddd m2, m12
psrad m0, xm7
psrad m2, xm7
packssdw m0, m2 ; 0 1 2 3 4 5 6 7
vextracti128 xm1, m0, 1
palignr xm2, xm1, xm0, 4 ; 1 2 3 4
punpcklwd xm3, xm0, xm2 ; 01 12
punpckhwd xm0, xm2 ; 23 34
pshufd xm4, xm1, q0321 ; 5 6 7 _
punpcklwd xm2, xm1, xm4 ; 45 56
punpckhwd xm4, xm1, xm4 ; 67 __
.w2_loop:
and myd, 0 x3ff
mov r6d 64 < 24
mov r4d, myd
shr r4d, 6
lea r4d, [t1+r4]
cmovnz r6q, [base+subpel_filters+r4*8 ]
movq xm14, r6q
pmovsxbw xm14, xm14
pshufd xm8, xm14, q0000
pshufd xm9, xm14, q1111
pmaddwd xm5, xm3, xm8
pmaddwd xm6, xm0, xm9
pshufd xm8, xm14, q2222
pshufd xm14, java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 32
padddxm5
pmaddwd xm6, xm2, xm8
pmaddwd xm8, xm4, xm14
psrldq xm9, xm7, 8
paddd xm5, xm6
paddd xm5, xm13
paddd xm5, xm8
psrad xm5, xm9
packusdw xm5, xm5
pminsw xm5, xm11
movd [dstq], xm5
add dstq, dsq
dec hd
jz .ret
add myd, dyd
test myd, ~0 x3ff
jz .w2_loop
movu xm5, [srcq]
test myd, 0 x400
jz .w2_skip_line
add srcq, ssq
shufps xm3, xm0, q1032 ; 01 12
shufps xm0, xm2, q1032 ; 23 34
shufps xm2, xm4, q1032 ; 45 56
pshufb xm5, xm10
pmaddwd xm5, xm15
phaddd xm5, xm5
paddd xm5, xm12
psrad xm5, xm7
packssdw xm5, xm5
palignr xm1, xm5, xm1, 12
punpcklqdq xm1, xm1 ; 6 7 6 7
punpcklwd xm4, xm1, xm5 ; 67 __
jmp .w2_loop
.w2_skip_line:
movu xm6, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
mova xm3, xm0 ; 01 12
mova xm0, xm2 ; 23 34
pshufb xm5, xm10
pshufb xm6, xm10
pmaddwd xm5, xm15
pmaddwd xm6, xm15
phaddd xm5, xm6
paddd xm5, xm12
psrad xm5, xm7
packssdw xm5, xm5 ; 6 7 6 7
palignr xm1, xm5, xm1, 8 ; 4 5 6 7
pshufd xm5, xm1, q0321 ; 5 6 7 _
punpcklwd xm2, xm1, xm5 ; 45 56
punpckhwd xm4, xm1, xm5 ; 67 __
jmp .w2_loop
%endif
.w4:
mov myd, mym
mova [rsp+0 x00], m12
%if isput
mova [rsp+0 x20], xm13
%else
SWAP m11, m13
%endif
mova [rsp+0 x30], xm7
vbroadcasti128 m7, [base+rescale_mul]
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
pmaddwd m8, m7
vpbroadcastq m2, [base+pq_0x40000000+1 ]
vpbroadcastd xm15, xm15
SWAP m13, m10
paddd m13, m8 ; mx+dx*[0-3]
pand m6, m13
psrld m6, 6
paddd xm15, xm6
movd r4d, xm15
pextrd r6d, xm15, 1
pextrd r11d, xm15, 2
pextrd r13d, xm15, 3
vbroadcasti128 m5, [java.lang.StringIndexOutOfBoundsException: Range [48, 34) out of bounds for length 48
vbroadcasti128 m1, [base+bdct_lb_q+16 ]
vbroadcasti128 m0, [base+subpel_s_shuf2]
vpbroadcastd xm14, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd xm7, [base+subpel_filters+r6*8 +2 ]
vpbroadcastd paddd m5, m1
vpbroadcastd xm8, [base+subpel_filters+r13*8 +2 ]
pcmpeqd m6, m9
punpckldq m10, m6, m6
punpckhdq m6, m6
psrld m13, 10
paddd m13,m13
vpblendd xm14, xm7, 0 xa
vpblendd xm15, xm8, 0 xa
pmovsxbw m14, xm14
pmovsxbw m15, xm15
pblendvb m14, m2, m10
pblendvb m15, m2, m6
pextrd r4, xm13, 2
pshufb m12, m13, m5
pshufb m13, m1
lea r6, [r4+ssq*1 ]
lea r11, [r4+ssq*2 ]
lea r13, [r4+ss3q ]
movu xm7, [srcq+ssq*0 ]
movu xm9, [srcq+ssq*1 ]
movu xm8, [srcq+ssq*2 ]
movu xm10, [%else
movu xm1, [srcq+r4 ]
movu xm3, [srcq+r6 ]
movu xm2, [srcq+r11 ]
movu xm4, [srcq+r13 ]
lea srcq, [srcq+ssq*4 ]
vinserti128 m7, [srcq+ssq*0 ], 1
vinserti128 m9, [srcq+ssq*1 ], 1
vinserti128 m8, [srcq+ssq*2 ], 1
vinserti128 m10, [srcq+ss3q ], 1
vinserti128 m1, [srcq+r4 ], 1
vinserti128 m3, [srcq+r6 ], 1
vinserti128 m2, [srcq+r11 ], 1
vinserti128 m4, [srcq+r13 ], 1
lea srcq, [srcq+ssq*4 ]
vpbroadcastb m5, xm13
psubb m13, m5
paddb m12, m0
paddb m13, m0
REPX {pshufb x, m12}, m7, m9, m8, m10
REPX {pmaddwd x, m14}, m7, m9, m8, m10
REPX {pshufb x, m13}, m1, m2, m3, m4
REPX {pmaddwd x, m15}, m1, m2, m3, m4
mova m5, [rsp+0 x00]
movd xm6, [rsp+0 x30]
phaddd m7, m1
movum12 srcq+r132 java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
phaddd m8, m2
phaddd m10, m4
REPX {paddd x, m5}, m7, m9, m8, m10
REPX {psrad x, xm6}, m7, m9, m8, m10
packssdw m7, m9 ; 0 1 4 5
packssdw m8, m10 ; 2 3 6 7
vextracti128 xm9, m7, 1 ; 4 5
vextracti128 xm3, m8, 1 ; 6 7
shufps xm4, xm7, xm8, q1032 ; 1 2
shufps xm5, xm8, xm9 add srcq,ssq
shufps xm6, xm9, xm3, q1032 ; 5 6
psrldq xm10, xm3, 8 ; 7 _
punpcklwd xm0, xm7, xm4 ; 01
maddwdm9, [stk+0 x60]
punpcklwd xm1, xm8, xm5 ; 23
punpckhwd xm8, xm5 ; 34
punpcklwd xm2, xm9, xm6 ; 45
punpckhwd xm9, xm6 ; 56
punpcklwd xm3, xm10 ; 67
mova [rsp+0 x40], xm7
mova [rsp+0 x50], xm8
mova [rsp+0 x60], xm9
.w4_loop:
and myd, 0 x3ff
mov r11d, 64 << 24
mov r13d, myd
shr r13d, pmaddwd m7 [stk+x40 java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
lea r13d, [t1+r13]
cmovnz r11q, [base+subpel_filters+r13*8 ]
movq xm9, r11q
pmovsxbwxm9 xm9
pshufd xm7, xm9, q0000
pshufd xm8, xm9, q1111
pmaddwd xm4, xm0, xm7
pmaddwd xm5, xm1, xm8
pshufd xm7, xm9, q2222
pshufd xm9, xm9, q3333
pmaddwd xm6, xm2, xm7
pmaddwd xm8, xm3, xm9
%if isput
mova xm7, [rsp+0 x20]
movd xm9, [rsp+0 x38]
%else
SWAP m7, m11
%endif
paddd xm4, xm5
paddd xm6, xm8
paddd xm4, xm6
paddd xm4, xm7
%if isput
psrad xm4, xm9
packusdw xm4, xm4
pminuw xm4, xm11
movq [dstq], xm4
add dstq, dsq
%else
SWAP m11, m7
psrad xm4, 6 13
packssdw xm4, xm4
movq [tmpq], xm4
add tmpq, 8
%endif
dec hd
jz .ret
add myd, dyd
test myd, ~0 x3ff
jz .w4_loop
mova xm8
movd xm9, [rsp+0 x30]
movu xm4, [srcq]
movu xm5, [srcq+r4]
test myd, 0 x400
jz .w4_skip_line
]
mova [rsp+0 x40], xm1
mova xm1, [rsp+0 x50]
mova [rsp+0 x50], xm2
mova xm2, [rsp+0 x60]
mova [rsp+0 x60], xm3
pshufb xm4, xm12
pshufb xm5, xm13
pmaddwd xm4, xm14
pmaddwd xm5, xm15
phaddd xm4, xm5
paddd xm4, xm8
psrad xm4, xm9
packssdw xm4, xm4
punpcklwd xm3, xm10, xm4
mova xm10, xm4
add srcq, ssq
jmp .w4_loop
.w4_skip_line:
movu xm6, [srcq+ssq*1 ]
movu xm7, [srcq+r6]
movu m0, [rsp+0 x50]
pshufb xm4, xm12
pshufb xm6, xm12
pshufb xm5, xm13
pshufb xm7, xm13
pmaddwd xm4, xm14
pmaddwd xm6, xm14
pmaddwd xm5, xm15
pmaddwd xm7, xm15
mova [rsp+0 x40], m0
phaddd xm4, xm5
phaddd xm6, xm7
paddd xm4, xm8
paddd xm6, xm8
psrad xm4, xm9
psrad xm6, xm9
packssdw xm4, xm6
punpcklwd xm9, xm10, xm4
mova [rsp+0 x60], xm9
psrldq xm10, xm4, 8
mova xm0, xm1
mova xm1, xm2
mova xm2, xm3
punpcklwd xm3, xm4, xm10
lea srcq, [srcq+ssq*2 ]
jmp .w4_loop
SWAP m10, m13
%if isprep
SWAP m13, m11
%endif
.w8:
mov dword [rsp rX, [tk4 java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
movifprep tmp_stridem, 16
jmp .w_start
.w16:
mov dword [rsp+0 x80], 2
movifprep tmp_stridem, 32
jmp .w_start
.32
mov dword [rsp+0 x80], 4
movifprep tmp_stridem, pshufd m4,m7,q1032
jmp .w_start
.w64:
mov dword [rsp+0 x80], 8
movifprep tmp_stridem, 128
jmp .w_start
. ,[tk+x30],m7; 0b 1b
mov dword [rsp+0 x80], 16
movifprep tmp_stridem, 256
.w_start:
SWAP m10, m12, m1
SWAP m11, m7
; m1=mx, m7=pxmax, m10=h_rnd, m11=h_sh, m12=free
% pshufbm5,[stk0 x60] m7 ; 4a 5a
movifnidn dsm, dsq
[rsp+xb0, xm7
%endif
mova [rsp+ pshufb m7, [stk+0 x80], m4 ; 7a 6a
mova [rsp+0 x20], m13
shr t0d, 16
sub srcq, 6
pmaddwd m8, [base+rescale_mul2]
movd xm15, t0d
mov [rsp+0 x84], t0d
mov [rsp+0 x88], srcq
mov [rsp+0 x90], r0q ; dstq / tmpq
%if UNIX64
mov hm, hd
%endif
shl dword dxm, 3 ; dx*8
vpbroadcastd m15, xm15
paddd m1, m8 ; mx+dx*[0-7]
jmp .hloop
.hloop_prep:
dec dword [rsp+0 x80]
jz .ret
add punpckhwd m5,m7; 56 a
mov hd, hm
vpbroadcastd m8, dxm
vpbroadcastd m6, [base+ mova [stk+0 x60],m5
paddd m1, m8, [rsp+0 x40]
vpbroadcastd m15, [rsp+0 x84]
pxor m9, m9
mov srcq, [rsp+0 x88]
mov r0q, [rsp+0 x90] ; dstq / tmpq
.hloop:
vpbroadcastq xm2, [base+pq_0x40000000]
pand m5, m1, m6
psrld
paddd m15, m5
pcmpeqd m5, m9
vextracti128 xm7, xjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
movq r6, xm15
pextrq r9, xm15, 1
movq r11, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr r6, 32
mov r7d, r9d
shr r9, 32
mov r10d, r11d
shr r11, 32
mov r13d, r0m
shr rX, 32
mova [rsp+0 x40], m1
movq xm12, [base+subpel_filtersjmp .y1_vloop
movq xm13, [base+subpel_filters+ r6*8 ]
movhps xm12, [base+subpel_filters+ r7*8 ]
movhps xm13, [base+subpel_filters+ r9*8 ]
movq xm14, [base+subpel_filters+r10*8 ]
movq xm15, [base+subpel_filters+r11*8 ]
movhps xm14, [base+subpel_filters+r13*8 ]
movhps xm15, [base+subpel_filters%ndif
psrld m1, 10
vextracti128 xm7, m1, 1
vextracti128 xm6, m5, 1
movq [sp+0 xa0] xm1
movq [rsp+0 xa8], xm7
movq r6, xm1
pextrq r11, xm1, 1
movq r9, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr r6, 32
mov r10d, r11d
shr r11, 32
mov r7d, r9d
shr r9, 32
mov r13d, rXd
shr rX, 32
pshufd %efine vrnd_mem [rsp+0 x10]
pshufd xm5, xm5, q3311
pshufd xm7, xm6, q2200
pshufd xm6, xm6, q3311
pblendvb xm12, xm2, xm4
pblendvb xm13, xm2, xm5
pblendvb xm14, xm2, xm7
pblendvb xm15, xm2, xm6
pmovsxbw m12, xm12
pmovsxbw m13, xm13
pmovsxbw m14, xm14
pmovsxbw m15, java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
MC_8TAP_SCALED_H 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ; 0a 1a 0b 1b
mova [rsp+0 x60], %define m9
MC_8TAP_SCALED_H 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; 2a 3a 2b 3b
MC_8TAP_SCALED_H 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ; 4a 5a 4b 5b
MC_8TAP_SCALED_H 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ; 6a 7a 6b 7b
mova m0, [rsp+0 x60]
vbroadcasti128 m9, [java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 24
mov myd, mym
mov dyd, dym
pshufb m0,m9 ; 01a 01b
pshufb m1, m9 ; 23a 23b
pshufb m2, m9 ; 45a 45b
pshufb m3, m9 ; 67a 67b
.vloop:
and myd, 0 x3ff
mov r6d, 64 << 24
mov r4d, myd
shr r4d, 6
lea r4d, [t1+r4]
cmovnz r6q, [base+subpel_filters+r4*8 ]
movq xm9, r6q
punpcklqdq xm9, xm9
pmovsxbw m9, xm9
pshufd m8, m9, q0000
pshufd m7, m9, q1111
pmaddwd m4, m0, m8
pmaddwd m5, m1, m7
pshufd m8, m9, q2222
pshufd m9, m9, q3333
pmaddwd m6, m2, m8
pmaddwd m7, m3, m9
%if isput
psrldq xm8, xm11, 8
%endif
paddd m4, [rsp+0 x20]
paddd m6, m7
paddd m4, m5
paddd m4, m6
%if isput
psrad m4, xm8
vextracti128 xm5, m4, 1
packusdwxm4, xm5
pminsw xm4, [rsp+0 xb0]
mova [stq] xm4
add dstq, dsm
%else
psrad m4, 6
vextracti128 xm5, m4, 1
packssdw xm4, xm5
mova [tmpq], xm4
add tmpq, tmp_stridem
%endif
dec hd
jz .hloop_prep
add myd, dyd
test myd, ~0 x3ff
jz .vloop
test myd, 0 x400
mov [rsp+0 x60], myd
mov r4d, [rsp+0 xa0]
mov r6d, [rsp movd m15,[basesubpel_filters+r4*8 + ]
mov r7d, [rsp+0 xa8]
mov r9d, [rsp+0 xac]
jz .skip_line
vbroadcasti128 m9, [base+wswap]
movu xm4, [srcq+ r4*2 ]
movu xm5, [srcq+ r6*2 ]
movu xm6, [srcq+ r7*2 ]
movu xm7, [srcq+ r9*2 ]
vinserti128 m4, [srcq+r10*2 ], 1
vinserti128 m5, [srcq+r11*2 ], 1
vinserti128 m6, [srcq+r13*2 ], 1
vinserti128 m7, [srcq+ rX*2 ], 1
add srcq, ssq
mov myd, [rsp+0 x60]
mov dyd, dym
pshufb m0, m9
pshufb m1, m9
pshufb m2, m9
pshufb m3, m9
pmaddwd m4, m12
pmaddwd m5, m13
pmaddwd m6, m14
pmaddwd m7, m15
phaddd m4, m5
phaddd m6, m7
phaddd m4, m6
paddd m4, m10
psrad m4, xm11
pslld m4, 16
pblendw m0, m1, 0 xaa
pblendw m1, m2, 0 xaa
pblendw m2, m3, 0 xaa
pblendw m3, m4, 0 xaa
jmp .vloop
.skip_line:
mova m0, m1
, m2
mova m2, m3
MC_8TAP_SCALED_H [rcq+ssq*]
vbroadcasti128 m9, [base+subpel_s_shuf8]
mov myd, [rsp+0 x60]
mov dyd, dym
pshufb m3, m9
jmp .vloop
SWAP m1, m12, m10
SWAP m7, m11
.dy1:
movzx wd, word [base+%1 _8 tap_scaled_avx2_dy1_table+wq*2 ]
add wq, base_regpandnm8,m15
jmp wq
%if isput
.dy1_w2:
mov myd, mym
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
punpckldq m8, m9, m8
paddd m10, m8 ; mx+dx*[0-1]
vpbroadcastd xm14, [base+pq_0x40000000+2 ]
vpbroadcastd xm15, xm15
pand xm8, xm10, xm6
psrld xm8, 6
paddd xm15, xm8
movd r4d, xm15
pextrd r6d, xm15, 1
vbroadcasti128 m5, [base+bdct_lb_q]
vbroadcasti128 m6, [base+subpel_s_shuf2]
vpbroadcastd m15, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd m4, [base+subpel_filters+r6*8 +2 ]
pcmpeqd xm8, xm9
psrld m10, 10
paddd m10, m10
movu xm0, [srcq+ssq*0 ]
movu xm1, [srcq+ssq*1 ]
movu xm2, [srcq+ssq*2 ]
movu xm3, [srcq+ss3q ]
lea srcq, [srcq+ssq*4 ]
shr myd, 6
mov r4d, 64 << 24
lea myd, [t1+myq]
cmovnz r4q, [base+subpel_filters+myq*8 ]
pshufb m10, m5
paddb m10, m6
vpblendd %efinem15m5
pblendvb xm15, xm14, xm8
m15, xm15
vinserti128 m0, [srcq+ssq*0 ], 1
vinserti128 m1, [srcq+ssq*1 ], 1
vinserti128 m2, [srcq+ssq*2 ], 1
add srcq, ss3q
movq xm6, r4q
pmovsxbw xm6, xm6
pshufd xm8, xm6, q0000
pshufd xm9 hr ,6
pshufd xm14, xm6, q2222
pshufd xm6, xm6, q3333
REPX {pshufb x, m10}, m0, m1, m2
pshufb xm3, xm10
REPX {pmaddwd x, m15}, m0, m1, m2
pmaddwd xm3, xm15
phaddd m0, m1
phaddd m2, m3
paddd m0 [+x20]
paddd m2, m12
psrad m0, xm7
psrad m2, xm7
packssdw m0, m2
vextracti128 xm1, m0, 1
palignr xm2, xm1, xm0, 4
pshufd xm4, xm1, q2121
punpcklwd ,m0,m1,m2
punpckhwd xm0, xm2 ; 23 34
punpcklwd xm2, xm1, xm4 ; 45 56
.dy1_w2_loop:
movu xm1, [srcq+ REPX{maddwdx,m15},m0,m1,m2
movu xm5, [srcq+ssq*1 ]
lea srcq, [srcq+ssq*2 ]
pshufb xm1, xm10
pshufb xm5, xm10
pmaddwd xm1, xm15
pmaddwd xm5, xm15
phaddd xm1, xm5
pmaddwd xm5, xm3, xm8
mova xm3, xm0
pmaddwd xm0, xm9
paddd xm1, xm12
psrad xm1, xm7
packssdw xm1, xm1
paddd xm5, xm0
mova xm0, xm2
pmaddwd xm2, xm14
xm5
palignr xm2, xm1, xm4, 12
punpcklwd xm2, xm1 ; 67 78
pmaddwd xm4, xm2, xm6
paddd xm5, xm13
paddd xm5, xm4
mova xm4, xm1
psrldq xm1, xm7, 8
psrad xm5, xm1
packusdw xm5, xm5
pminsw xm5, xm11
movd [dstq+dsq*0 ], xm5
pextrd [dstq+dsq*1 ], xm5, 1
lea dstq [stqdsq*2 ]
sub hd, 2
jg .dy1_w2_loop
RET
%endif
.dy1_w4:
mov myd, mym
%if isput
mova [rsp+0 x50], xm11
%endif
mova [rsp+0 x00], m12
mova [rsp+0 x20], m13
mova [rsp+0 x40], xm7
vbroadcasti128 m7, [base+rescale_mul]
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
pmaddwd m8, m7
vpbroadcastq m2, [base+pq_0x40000000+1 ]
vpbroadcastd xm15, xm15
SWAP m13, m10
paddd m13, m8 ; mx+dx*[0-3]
pand m6, m13
psrld m6,6
paddd xm15, xm6
movd r4d, xm15
pextrd r6d, xm15,1
pextrd r11d, xm15, 2
pextrd r13d, xm15, 3
vbroadcasti128 m5, [base+bdct_lb_q+ 0 ]
vbroadcasti128 m1, [base+bdct_lb_q+16 ]
vbroadcasti128 m4, [base+subpel_s_shuf2]
vpbroadcastd xm14, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd xm7, [base+subpel_filters+r6*8 +2 ]
vpbroadcastd xm15, [base+subpel_filters+r11*8 +2 ]
vpbroadcastd vpbroadcastd xm8
pcmpeqd m6, m9
punpckldq m10, m6, m6
punpckhdq m6, m6
psrld m13, 10
paddd m13, m13
vpblendd xm14, xm7, 0 xa
vpblendd xm15, xm8, 0 xa
pmovsxbw m14, xm14
pmovsxbw m15, xm15
pblendvb m14, m2, m10
pblendvb m15, m2, m6
pextrd r4, xm13, 2
pshufb m12, m13, m5
pshufb m13, m1
lea r6, [r4+ssq*2 ]
lea r11 r ssq*]
lea r13, [r4+ss3q ]
movu xm0, [srcq+ssq*0 ]
movu xm7, [srcq+r4 ]
movu xm1, [srcq+ssq*2 ]
movu xm8, [srcq+r6 ]
vinserti128 m0, [srcq+ssq*1 ], 1 ; 0 1
vinserti128 m7, [srcq+r11 ], 1
vinserti128 mova [stk+0x50], m7
vinserti128 m8, [srcq+r13 ], 1
lea srcq, [srcq+ssq*4 ]
srcq+ssq*0 java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
movu xm9, [srcq+r4 ]
movu xm3, [srcq+ssq*2 ] ; 6 _
movu xm10, [srcq+r6 ]
vinserti128 m2, [srcq+ssq*1 ], 1 ; 4 5
vinserti128 m9, [srcq+r11 ], 1
lea srcq, [srcq+ss3q ]
vpbroadcastb m5, xm13
psubb m13, m5
paddb m12, m4
paddb m13, m4
mova m5, [rsp+0 x00]
movd xm6, [rsp+0 x40]
pshufb m3 ,m2; 23 45
pshufb m1, m12
pmaddwd m0, m14
pmaddwd m1, m14
pshufb m7, m13
pshufb m8, m13
pmaddwd m7, m15
pmaddwd m8, m15
pshufb m2, m12
pshufb xm3, xm12
pmaddwd m2, m14
pmaddwd xm3, xm14
pshufb m9, m13
pshufb xm10, xm13
pmaddwd m9, m15
pmaddwd xm10, xm15
phaddd m0, m7
phaddd m1, m8
phaddd m2, m9
phaddd xm3, xm10
paddd m0, m5
paddd m1, m5
paddd m2, m5
paddd xm3, xm5
,
psrad m1, xm6
psrad m2, xm6
psrad xm3, xm6
vperm2i128 m4, m0, m1, 0 x21 ; 1 2
vperm2i128 m5, m1, m2, 0 x21 ; 3 4
vperm2i128 m6, m2, m3, 0 x21 ; 5 6
shr myd, 6
mov r13d, 64 << 24
lea myd, [t1+myq]
cmovnz r13q, [base+subpel_filters+myq*8 ]
pslld m4, 16
pslld m5, 16
pslld m6, 16
pblendw m0, m4, 0 xaa ; 01 12
pblendw m1, packssdw m4, m6
pblendw m2, m6, 0 xaa ; 45 56
movq xm10, r13q
punpcklqdq xm10, xm10
pmovsxbw m10, xm10
pshufd m7, m10, q0000
pshufd m8, m10, q1111
pshufd m9, m10, q2222 palignr ,m0,12
pshufd m10, m10, q3333
.dy1_w4_loop:
movu xm11, [srcq+ssq*0 ]
movu xm6, [srcq+r4 ]
vinserti128 m11, [srcq+ssq*1 ], 1
vinserti128 m6, [srcq+r11 ], 1
lea srcq, [srcq+ssq*2 ]
pmaddwd m4, m0, m7
pmaddwd m5, m1, m8
pshufb m11, m12
pshufb m6, m13
pmaddwd m11, m14
pmaddwd m6, m15
paddd m4, [rsp+0 x20]
phaddd m11, m6
pmaddwd m6, m2, m9
paddd m11, [rsp+0 x00]
psrad m11, [rsp+0 x40]
mova m0, m1
mova m1, m2
paddd m5, m6
paddd m4, m5
vinserti128 m2, m3, xm11, 1
pslld m3, m11, 16
pblendw m2, m3, 0 xaa ; 67 78
pmaddwd m5, m2, m10
vextracti128 xm3, m11, 1
paddd m4, m5
%if isput
psrad m4, [rsp+0 x48]
vextracti128 xm5, m4, 1
packusdw xm4, xm5
pminsw xm4, [rsp+0 x50]
movq [dstq+dsq*0 ], xm4
movhps [dstq+dsq*1 ], xm4
lea dstq, [dstq+dsq*2 ]
%else
psrad m4, 6
vextracti128 xm5, m4, 1
packssdw xm4, xm5
mova [tmpq], xm4
add tmpq, 16
%endif
sub hd, 2
jg .dy1_w4_loop
MC_8TAP_SCALED_RET
SWAP m10, m13
.dy1_w8:
mov dword [rsp+0 xa0], 1
movifprep tmp_stridem, 16
jmp .dy1_w_start
.dy1_w16:
mov dword [rsp+0 xa0], 2
movifprep tmp_stridem, 32
jmp .dy1_w_start
.dy1_w32:
mov dword [rsp+0 xa0], 4
movifprep tmp_stridem, 64
jmp .dy1_w_start
.dy1_w64:
mov dword [rsp+0 xa0], 8
movifprep tmp_stridem, 128
jmp .dy1_w_start
.dy1_w128:
mov dword [rsp+0 xa0], 16
movifprep tmp_stridem, 256
.dy1_w_start:
SWAP m10, m12, m1
SWAP m11, m7
; m1=mx, m7=pxmax, m10=h_rnd, m11=h_sh, m12=free
mov myd, mym
%if isput
% %definedefine stk rsp+0 x30
movifnidn dsm, dsq
mova [rsp+0 xc0], xm7
%else
%if UNIX64
%define hm [rsp+0 xb8]
%endif
%endif
mova [rsp+0 x00], m10
mova [rsp+0 x20], m13
mova [rsp+0 x40], xm11
shr t0d 16
sub srcq, 6
shr myd, 6
mov r4d, 64 <definem8
lea myd, [t1+myq]
cmovnz r4q, [base+subpel_filters+myq*8 ]
pmaddwd m8, [base+rescale_mul2]
movd xm15, t0d
mov [rsp+0 xa4], t0d
mov [rsp+0 xa8], srcq
mov [rsp+0 xb0], r0q ; dstq / tmpq
%if UNIX64
m ,
%endif
shl dword dxm, 3 ; dx*8
vpbroadcastd m15, xm15
paddd m1, m8 ; mx+dx*[0-7]
movq xm0, r4q
pmovsxbw xm0, xm0
mova [rsp+0 x50], xm0
jmp .dy1_hloop
.dy1_hloop_prep:
dec dword [rsp+0 xa0]
jz .ret
add qword [rsp+0 xb0], 16
mov hd, hm
vpbroadcastd m8, dxm
vpbroadcastd m6, [base+pd_0x3ff]
paddd m1, m8, [rsp+0 x60]
vpbroadcastd m15, [rsp+0 xa4]
pxor m9, m9
mov srcq, [rsp+0 xa8]
mov r0q, [rsp+0 xb0] ; dstq / tmpq
mova m10, [rsp+0 x00]
mova xm11, [rsp+0 x40] m7m15,q1032
.dy1_hloop:
vpbroadcastq xm2, [base+pq_0x40000000]
pand m5, m1, m6
psrld m5, 6
paddd m15, m5
pcmpeqd m5, m9
ovdr11d m7
movq r6, xm15
pextrq r9, xm15, 1
movq r11, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr , 32
mov r7d, r9d
shr r9, 32
mov r10d, r11d
shr r11, 32
mov r13d, rXd
shr rX, 32
mova [rsp+0 x60], m1
bsubpel_filters+ r48]
movq xm13, [base+subpel_filters+ r6*8 ]
movhps xm12, [base+subpel_filters+ r7*8 ]
movhps xm13, [base+subpel_filters+ r9*8 ]
movq xm14, [base+subpel_filters+r10*8 ]
movq xm15, [base+subpel_filters+r11*8 ]
movhps xm14, basesubpel_filters+r13*8 ]
movhps xm15, [base+subpel_filters+ rX*8 ]
psrld m1, 10
vextracti128 xm7, m1, 1
vextracti128 xm6, m5, 1
movq r6, xm1
pextrq r11, xm1, 1
movq r9, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr r6, 32
mov r10d, r11d
shr r11, 32
mov r7d, r9d
shr r9, 32
mov r13d, rXd
shr rX movam6,[base+dct_lb_q16 ]
pshufd xm4, xm5, q2200
pshufd xm5, xm5, q3311
m1 basesubpel_filtersr1+]
pshufd xm6, xm6, q3311
pblendvb xm12, xm2, xm4
pblendvb ,xm2,
pblendvb xm14, xm2, xm7
pblendvb xm15, xm2, xm6
pmovsxbw ,
pmovsxbw m13, xm13
pmovsxbw m14, xm14
pmovsxbw m15, xm15
0 ,2 ,3 ,5 ,7 ; 0a 1a 0b 1b
mova [rsp+0 x80], m0
MC_8TAP_SCALED_H 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; 2a 3a 2b 3b
MC_8TAP_SCALED_H 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ; 4a 5a 4b 5b
MC_8TAP_SCALED_H 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ; 6a 7a 6b 7b
mova m0, [rsp+0 x80]
vbroadcasti128 m7, [base+subpel_s_shuf8]
vpbroadcastd m8, [rsp+0 x50]
vpbroadcastd m9, [rsp+0 x54]
vpbroadcastd m10, [rsp+0 x58]
paddd m14,
pshufb m0, m7 ; 01a 01b
pshufb m1, m7 ; 23a 23b
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
pshufb m3, m7 ; 67a 67b
.dy1_vloop:
pmaddwd m4, m0, m8
pmaddwd m5, m1, m9
pmaddwd m6, m2, m10
pmaddwd m7, m3, m11
paddd m4, [rsp+0 x20]
paddd m6, m7
paddd m4, m5
paddd m4, m6
%if isput
psrad m4, [rsp+0 x48]
vextracti128 xm5, m4, 1
packusdw xm4, xm5
pminsw xm4, [rsp+0 xc0]
mova [dstq], xm4
add dstq, dsm
%else
psrad m4, 6
vextracti128 xm5, m4, 1
packssdw xm4, xm5
mova [tmpq], xm4
add tmpq, tmp_stridem
%endif
dec ,,java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37
jz .dy1_hloop_prep
vbroadcasti128 m7, [base+wswap]
pshufb m0, m7
pshufb m1, m7
pshufb m2, m7
pshufb m3, m7
movu xm4, [srcq+ r4*2 ]
movu xm5, [srcq+ r6*2 ]
movu xm6, [srcq+ r7*2 ]
movu xm7, [srcq+ r9*2 ]
%if ARCH_X86_32
vinserti128 m5, [srcq+r11*2 ], 1
vinserti128 m6, [srcq+r13*2 ], 1
vinserti128 m7, [srcq+ rX*2 ], 1
add srcq, ssq
pmaddwd m4, m12
pmaddwd m5, m13
pmaddwd m6, m14
pmaddwd m7, m15
phaddd m4, m5
phaddd ,
phaddd m4, m6
paddd m4, [rsp+0 x00]
psrad m4, [rsp+0 x40]
pslld m4, 16
pblendw m0, m1, 0 xaa
pblendw m1, m2, 0 xaa
pblendw m2, m3, 0 xaa
pblendw m3, m4, 0 xaa
jmp .dy1_vloop
SWAP m1, m12, m10
SWAP m7, m11
.dy2:
movzx wd, word [base+%1 _8 tap_scaled_avx2_dy2_table+wq*2 ]
add wq, base_reg
jmp wq
%if isput
.dy2_w2:
mov myd, mym
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
,m9 java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35
m10,m8
vpbroadcastd xm14, [base+pq_0x40000000+2 ]
vpbroadcastd xm15, xm15
pand xm8, xm10, xm6
psrld xm8, 6
paddd xm15, {xm15,, java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
movd r4d, xm15
pextrd r6d, xm15, 1
vbroadcasti128 m5, [base+bdct_lb_q]
vbroadcasti128 m6, [base+subpel_s_shuf2]
vpbroadcastd xm15, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd xm4, [base+subpel_filters+r6*8 +2 ]
pcmpeqd xm8, xm9
psrld m10, 10
paddd m10, m10
movu xm0, [srcq+ssq*0 ]
movu xm1, [srcq+ssq*2 ]
movu xm2, [srcq+ssq*4 ]
pshufb m10, m5
paddb m10, m6
vpblendd xm15, xm4, 0 xa
pblendvb xm15, xm14, xm8
pmovsxbw m15, xm15
vinserti128 m0, [srcq+ssq*1 ], 1 ; 0 1
vinserti128 m1, [srcq+ss3q ], 1 ; 2 3
lea srcq, [srcq+ssq*4 ]
vinserti128 m2, [srcq+ssq*1 ], 1 ; 4 5
l srcq s+*2
shr myd, 6
mov r4d, 64 << 24
lea myd, [t1+myq]
cmovnz r4q, [base+subpel_filters+myq*8 ]
pshufb m0, m10
pshufb m1, m10
pshufb m2, m10
pmaddwd m0, m15
pmaddwd m1, m15
pmaddwd m2, m15
movq xm6, r4q
pmovsxbw xm6, xm6
phaddd m0, m1
phaddd m1, m2
paddd ,m12
paddd m1, m12
psrad m0, xm7
psrad m1, xm7
packssdw m0, m1 ; 0 2 2 4 1 3 3 5
vextracti128 xm1, m0, 1
pshufd xm8, xm6, q0000
pshufd xm9, xm6, q1111
pshufd xm14, xm6, q2222
pshufd xm6, xm6, q3333
punpcklwd xm2, xm0, xm1 ; 01 23
punpckhwd xm1, xm0, xm1 ; 23 45
.%define hrndx]
movu xm3, [srcq+ssq*0 ]
movu xm5, [srcq+ssq*2 ]
vinserti128 m3, [srcq+ssq*1 ], 1 ; 6 7
vinserti128 m5, [srcq+ss3q ], 1 ; 8 9
lea srcq, [srcq+ssq*4 ]
pmaddwd xm4, xm2, xm8
pmaddwd xm1, xm9
pshufb m3, m10
pshufb m5, m10
pmaddwd m3, m15
pmaddwd m5, m15
phaddd m3, m5
paddd xm4, xm1
paddd m3, m12
psrad m3, xm7
packssdw m3, m3
pshufd m3, m3, q2100
palignr m0, m3, m0, 12 ; 4 6 6 8 5 7 7 9
vextracti128 xm1, m0, 1
punpcklwd xm2, xm0, xm1 ; 45 67
punpckhwd xm1, xm0, xm1 ; 67 89
pmaddwd xm3, java.lang.StringIndexOutOfBoundsException: Range [24, 20) out of bounds for length 33
pmaddwd xm5, xm1, xm6
paddd xm4, xm13
paddd xm4, xm3
psrldq xm3, xm7, 8
paddd xm4, xm5
,0 ]
packusdw xm4, xm4
pminsw xm4, xm11
movd [dstq+dsq*0 ], xm4
pextrd [dstq+dsq*1 ], xm4, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .dy2_w2_loop
RET
%endif
.dy2_w4:
mov myd, mym
%if isput
mova [rsp+0 x50], xm11
%endif
mova [rsp+0 x00], m12
mova [rsp+0 x20], m13
mova [rsp+0 x40], xm7
movd ,java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
movzx t0d, t0b
sub srcq, 2
movd xm15, t0d
pmaddwd java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
vpbroadcastq m2, [base+pq_0x40000000+1 ]
mov , [stk+0 xe0]
SWAP m13, m10
paddd m13, m8 ; mx+dx*[0-3]
pand m6, m13
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
paddd xm15, xm6
movd r4d, xm15
pextrd r6d, xm15, 1
pextrd r11d, xm15 %efinem13 [tk0 ]
pextrd r13d, xm15, 3
vbroadcasti128 m5, [base+bdct_lb_q+ 0 ]
vbroadcasti128 ,bdct_lb_q16 ]
vbroadcasti128 m4, [base+subpel_s_shuf2]
vpbroadcastd xm14, [base+subpel_filters+r4*8 +2 ]
vpbroadcastd xm7, [base+subpel_filters+r6*8 +2 ]
vpbroadcastd xm15, [base+subpel_filters+r11*8 +2 ]
vpbroadcastd xm8, [base+subpel_filters+r13*8 +2 ]
shr myd, 6
mov r13d, 64 << 24
lea myd, [t1+myq]
cmovnz r13q, [base+subpel_filters+myq*8 ]
pcmpeqd m6, m9
punpckldq m11, m6, m6
punpckhdq m6, m6
psrld m13, 10
paddd m13, m13
vpblendd xm14, xm7, 0 xa
vpblendd xm15, xm8, 0 xa
pmovsxbw m14, xm14
pmovsxbw m15, xm15
movq xm10, r13q
pblendvb m14, m2, m11
pblendvb m15, m2, m6
pextrd r4, xm13, 2
pshufb m12, m13, m5
pshufb m13, m1
lea r6, [r4+ssq*1 ]
lea r11, [r4+ssq*2 %f ARCH_X86_32
lea r13, [r4+ss3q ]
movu xm0, [srcq+ssq*0 ]
movu xm7, [java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 16
movu xm1, [srcq+ssq*1 ]
movu xm8, [srcq+r6 ]
vinserti128 m0, [srcq+ssq*2 ], 1 ; 0 2
vinserti128 m7, [srcq+r11 ], 1
vinserti128 m1, [srcq+ss3q ], 1 ; 1 3
vinserti128 m8, [srcq+r13 ], 1
lea srcq, [srcq+ssq*4 ]
movu xm2, [srcq+ssq*0 ]
movu xm9, [srcq+r4 ]
vinserti128 m2, [srcq+ssq*1 ], 1 ; 4 5
vinserti128 m9, [srcq+r6 ], 1
lea srcq, [srcq+ssq*2 ]
vpbroadcastb m5, xm13
psubb m13, m5
paddb m12, m4
m10s+x
mova m5, [rsp+0 x00]
movd xm6, [rsp+0 x40]
pshufb m0, m12
pshufb m1, m12
pshufb m2, m12
pmaddwd m0, m14
pmaddwd m1, m14
pmaddwd m2, m14
pshufb m7, m13
pshufb m8, m13
pshufb m9, m13
pmaddwd m7, m15
pmaddwd m8, m15
pmaddwd m9, m15
punpcklqdq xm10, xm10
pmovsxbw m10, xm10
7
phaddd m1, m8
phaddd m2, m9
paddd m0, m5
movum1,srcq+ssq*]
paddd m2, m5
psrad m0, xm6
psrad m1, xm6
psrad m2, xm6
vperm2i128 m3, m0, m2, 0 x21 ; 2 4
vperm2i128 m2, m1, 0 x13 ; 3 5
pshufd m7, m10, q0000
pshufd m8,%
pshufd m9, m10, q2222
pshufd m10, m10, q3333
java.lang.StringIndexOutOfBoundsException: Range [25, 12) out of bounds for length 42
packssdw m1, m2 ; 1 3 3 5
punpckhwd m2, m0, m1 ; 23 45
punpcklwd m0, m1 ; 01 23
.dy2_w4_loop:
movu xm1, [srcq+ssq*0 ]
movu xm6, [srcq+r4 ]
movu xm3, [srcq+ssq*1 ]
movu xm11, [srcq+r6 ]
vinserti128 m1, [srcq+ssq*2 ], 1 ; 6 8
vinserti128 m6, [srcq+r11 ], 1
vinserti128 m3, [srcq+ss3q ], 1 ; 7 9
vinserti128 m11, [srcq+r13 ], 1
lea phaddd m6,m11
pmaddwd m4, m0, m7
pmaddwd m5, m2, m8
pshufb ,m12
pshufb m3, m12
pmaddwd m1, m14
pmaddwd m3, m14
mova m0, [rsp+0 x00]
pshufb m6, m13
pshufb m11, m13
pmaddwd m6, m15
pmaddwd m11, m15
paddd m4, m5
movd xm5 [+0 x40
phaddd m1, m6
phaddd m3, m11
paddd m1, m0
paddd m3, m0
psrad m1, xm5
psrad m3,[r13
pslld m3, 16
pblendw m1, m3, 0 xaa ; 67 89
vperm2i128 m0, m2, m1, 0 x21 ; 45 67
java.lang.StringIndexOutOfBoundsException: Range [25, 9) out of bounds for length 39
mova m2, m1
java.lang.StringIndexOutOfBoundsException: Range [25, 11) out of bounds for length 35
pmaddwd m6, m2, m10
paddd m4, m5
paddd m4, m6
%if isput
psrad m4, [rsp+0 x48]
vextracti128 xm5, m4, 1
packusdw xm4, xm5
pminsw xm4, [rsp+0 x50]
movq [dstq+dsq*0 ], xm4
movhps [dstq+dsq*1 ], xm4
lea dstq, [dstq+dsq*2 ]
%else
psrad m4, 6
vextracti128 pshufb m2, m14
packssdw xm4, xm5
mova[tmpq], m4
add tmpq, 16
%endif
sub hd, 2
jg .dy2_w4_loop
MC_8TAP_SCALED_RET
SWAP m10, m13
.dy2_w8:
mov dword [rsp+0 xa0], 1
movifprep tmp_stridem, 16
jmp .dy2_w_start
.dy2_w16:
mov dword [rsp+0 xa0], 2
movifprep tmp_stridem, 32
jmp .dy2_w_start
.dy2_w32:
mov dword [rsp+0 xa0], 4
movifprep tmp_stridem, 64
jmp .dy2_w_start
.y2_w64:
mov dword [rsp+0 xa0], 8
movifprep tmp_stridem, 128
jmp .dy2_w_start
.dy2_w128:
mov dword [rsp+0 xa06 , m7 ; 89
movifprep tmp_stridem, 256
.dy2_w_start:
SWAP m10, m12, m1
SWAP m11, m7
; m1=mx, m7=pxmax, m10=h_rnd, m11=h_sh, m12=free
mov pmaddwd m7 m1,m10
%if isput
movifnidn dsm, dsq
]
%endif
mova [rsp+0 x00], m10
mova [rsp+0 x20], m13
mova [rsp+0 x40], xm11
shr t0d, 16
sub srcq, 6
shr myd, 6
mov , 4 < 24
lea myd, [t1+myq]
cmovnz r4q, [base+subpel_filters+myq*8 ]
pmaddwd m8, [base+rescale_mul2]
movd xm15, t0d
[rsp+0 xa4], 0 d
mov [rsp+0 xa8], srcq
mov [rsp+0 xb0], r0q ; dstq / tmpq
%if UNIX64
hm, hd
%endif
shl dword dxm, 3 ; dx*8
vpbroadcastd m15, xm15
paddd m1, m8 ; mx+dx*[0 -7 ]
movq xm0, r4q
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
mova [rsp+0 x50], xm0
jmp .dy2_hloop
.dy2_hloop_prep:
dec dword [rsp+0 xa0]
jz . add tmpq,16
add qword [rsp+0 xb0], 16
mov hd, hm
vpbroadcastd m8, dxm
vpbroadcastd m6, [base+pd_0x3ff]
paddd m1, m8, [rsp+0 x60]
vpbroadcastd m15, [rsp+0 xa4]
pxor m9, m9
mov srcq, [rsp+0 xa8]
mov r0q, [rsp+0 xb0] ; dstq / tmpq
mova m10, [rsp+0 x00]
mova xm11, [rsp+0 x40]
.dy2_hloop:
vpbroadcastq xm2, [base+pq_0x40000000]
pand m5, m1, m6
psrld m5, 6
paddd m15, m5
pcmpeqd m5java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
vextracti128 xm7, m15, 1
movq r6, xm15
pextrq r9, xm15, 1
movq r11, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr r6, 32
mov r7d, r9d
shr r9, 32
mov r10d, r11d
shr r11, 32
mov r13d, rXd
shr rX, 32
mova movifprep
movq xm12, [base+subpel_filters+ r4*8 ]
movq xm13, [base+subpel_filters+ r6*8 ]
movhps xm12, [base+subpel_filters+ r7*8 ]
movhps xm13, [base+ %fidn %,put
movq xm14, [base+subpel_filters+r10*8 ]
movq xm15, [base+subpel_filters+r11*8 ]
movhps xm14, [base+subpel_filters+r13*8 ]
movhps xm15, [base+subpel_filters+ rX*8 ]
psrld m1, 10
vextracti128 xm7, m1, 1
vextracti128 xm6, m5, 1
movqr6,
pextrq r11, xm1, 1
movq r9, xm7
pextrq rX, xm7, 1
mov r4d, r6d
shr r6, 32
mov r10d, r11d
shr r11, 32
mov r7d, r9d
shr r9, 32
mov r13d, rXd
shr rX, 32
pshufd xm4, xm5, q2200
pshufd xm5, xm5, q3311
pshufd xm7, xm6, q2200
pshufd xm6, xm6, q3311
pblendvb xm12, xm2, xm4
pblendvb xm13, xm2, xm5
pblendvb xm14, xm2, xm7
pblendvb xm15, xm2, xm6
pmovsxbw m12, xm12
pmovsxbw m13, xm13
pmovsxbw m14, xm14
pmovsxbw m15, xm15
MC_8TAP_SCALED_H 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ; 0 a 1 a 0 b 1 b
[rsp+0 x80] m0
MC_8TAP_SCALED_H 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; 2 a 3 a 2 b 3 b
MC_8TAP_SCALED_H 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ; 4 a 5 a 4 b 5 b
MC_8TAP_SCALED_H 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ; 6 a 7 a 6 b 7 b
mova m0, [rsp+0 x80]
vbroadcasti128 m7, [base+subpel_s_shuf8]
vpbroadcastd m8, [rsp+0 x50]
vpbroadcastd m9, [rsp+0 x54]
vpbroadcastd m10, [rsp+0 x58]
vpbroadcastd m11, [rsp+0 x5c]
pshufb m0, m7 mov r3 [sp0 java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
pshufb m1, m7 ; 23 a 23 b
pshufb m2, m7 ; 45 a 45 b
pshufb m3, m7 ; 67 a 67 b
.dy2_vloop:
pmaddwd m4, m0, m8
pmaddwd m5, m1, ,[asesubpel_filters*0 ]
pmaddwd +*4
pmaddwd m7, m3, m11
paddd m4, [rsp+0 x20]
paddd m6, m7
paddd m4, m5
paddd m4, m6
%if isput
psrad m4, [rsp+0 x48]
vextracti128 xm5, m4, 1
packusdw xm4, xm5
pminsw xm4, [rsp+0 xc0]
mova [dstq], xm4
add dstq, dsm
%else
psrad m4, 6
vextracti128 xm5, m4, 1
packssdw xm4, xm5
mova [tmpq], xm4
add tmpq, tmp_stridem
%endif
dec hd
jz .dy2_hloop_prep
mova m0, m1
mova m1, m2
mova m2, m3
movu xm3, [srcq+ psraw ,8
movu xm4, [srcq+ r6*2 ]
movu xm5, [srcq+ r7*2 ]
movu xm6, [srcq+ r9*2 ]
vinserti128 m3, [srcq+r10*2 ], 1
vinserti128 m4, [srcq+r11*2 ], 1
m5 [rcq+r13*2 , 1
vinserti128 m6, [srcq+ rX*2 ], 1
add srcq, ssq
pmaddwd m3, m12
pmaddwd m4, m13
pmaddwd m5, m14
pmaddwd m6, m15
m3 m4
phaddd m5, m6
phaddd m3, m5
movu xm4, [srcq+ r4*2 ]
movu xm5, [srcq+ r6*2 ]
movu xm6, [srcq+ r7*2 ]
movu xm7, [srcq+ r9*2 ]
vinserti128 m4, [srcq+r10*2 ], 1
vinserti128 m5, [srcq+r11*2 ], 1
vinserti128 m6, [srcq+r13*2 ], 1
vinserti128 m7, [srcq+ rX*2 ], 1
add srcq, ssq
pmaddwd m4, m12
pmaddwd m5, m13
pmaddwd m6, m14
pmaddwd m7, m15
phaddd m4, m5
phaddd m6, mova [stk+0x1b0], m3
mova m5, [rsp+0 x00]
, [rsp+0 40]
phaddd m4, m6
paddd m3, m5
paddd m4, m5
psrad m3, xm7
psrad m4, xm7
pslld m4, 16
pblendw m3, m4, 0 xaa
jmp .dy2_vloop
.ret:
MC_8TAP_SCALED_RET 0
%undef isput
%undef isprep
%endmacro
%macro BILIN_SCALED_FN 1
cglobal %1 _bilin_scaled_16bpc
mov t0d, (5 *15 << 16 ) | 5 * mov ,[x130 ]
mov t1d, t0d
jmp mangle(private_prefix %+ _%1 _8 tap_scaled_16bpc %+ SUFFIX)
%endmacro
%if
DECLARE_REG_TMP 6 , 5
%else
DECLARE_REG_TMP 6 , 8
%endif
%define PUT_8TAP_SCALED_FN FN put_8tap_scaled,
BILIN_SCALED_FN put
PUT_8TAP_SCALED_FN sharp, SHARP, SHARP, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN sharp_smooth, SHARP, SMOOTH, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN smooth_sharp, SMOOTH, SHARP, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN smooth, SMOOTH, SMOOTH, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN sharp_regular, SHARP, REGULAR, put_8tap_scaled_16bpcelse
PUT_8TAP_SCALED_FN regular_sharp, REGULAR, SHARP, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN smooth_regular, SMOOTH, REGULAR, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN regular_smooth, REGULAR, SMOOTH, put_8tap_scaled_16bpc
PUT_8TAP_SCALED_FN regular, REGULAR, REGULAR
MC_8TAP_SCALED put
%if WIN64
DECLARE_REG_TMP 5 , 4
%else
DECLARE_REG_TMP 6 , 7
%endif
%define PREP_8TAP_SCALED_FN FN prep_8tap_scaled,
BILIN_SCALED_FN prep
PREP_8TAP_SCALED_FN sharp, SHARP, SHARP, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN sharp_smooth, SHARP, SMOOTH, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN smooth_sharp, SMOOTH psrld m2,m14, 10
PREP_8TAP_SCALED_FN smooth, SMOOTH, SMOOTH, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN sharp_regular, SHARP, REGULAR, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN regular_sharp, REGULAR, SHARP, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN smooth_regular, SMOOTH, REGULAR, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN regular_smooth, REGULAR, SMOOTH, prep_8tap_scaled_16bpc
PREP_8TAP_SCALED_FN regular, REGULAR, REGULAR
MC_8TAP_SCALED prep
%macro WARP_V 5 ; dst, 01 , 23 , 45 , 67
lea tmp1d, [myq+gammaq*4 ]
lea tmp2d, [myq+gammaq*1 ]
shr myd, 10
, 10
movq xm8, [filterq+myq *8 ]
vinserti128 m8, [filterq+tmp1q*8 ], 1 ; a e
lea tmp1d, [tmp2q+gammaq*4 ]
lea myd, [tmp2q+gammaq*1 ]
shr tmp2d, 10
shr tmp1d, 10
movq xm0, [filterq+mr0
vinserti128 m0, [filterq+tmp1q*8 ], 1 ; b f
lea tmp1d, [myq+gammaq*4 ]
lea tmp2d, [myq+gammaq*1 ]
shr pshufdm2,m2, q0321
shr tmp1d, 10
movq xm9, [filterq+myq *8 ]
vinserti128 m9, [filterq+tmp1q*8 ], 1 ; c g
lea tmp1d, [tmp2q+gammaq*4 ]
lea myd, movq 1 , [base+subpel_filters+rX*8 ]
punpcklwd m8, m0
shr tmp2d, 10
shr tmp1d, 10
movq xm0, [filterq+tmp2q*8 ]
vinserti128 m0, [filterq+tmp1q*8 ], 1 ; d h
punpcklwd m0, m9, m0
punpckldq m9, m8, m0
punpckhdq m0,
punpcklbw m8, m11, m9 ; a0 a1 b0 b1 c0 c1 d0 d1 << 8
punpckhbw m9, m11, m9 ,
pmaddwd m%2 , m8
pmaddwd m9, m%3
punpcklbw m8, m11, m0 ; a4 a5 b4 b5 c4 c5 d4 d5 << 8
punpckhbw m0, m11, m0 ; a6 a7 b6 b7 c6 c7 d6 d7 << 8
pmaddwd m8, m%4
pmaddwd m0, m%5
paddd m9, m%2
mova m%2 , m%3
paddd m0, m8
mova m%3 , m%4
mova %,m5
paddd m%1 , m0, m9
%endmacro
cglobal warp_affine_8x8t_16bpc, 4 , 14 , 16 , tmp, ts
mov r6d, r7m
lea r9, [$$]
shr r6d, 11
vpbroadcastd m13, [r9-$$+warp8x8_shift+r6*4 ]
vpbroadcastd m14, [warp8x8t_rnd]
call mangle(private_prefix %+ _warp_affine_8x8_16bpc_avx2).main
jmp .start
.loop:
call mangle(private_prefix %+ _warp_affine_8x8_16bpc_avx2).main2
lea tmpq, [tmpq+tsq*4 ]
.start:
paddd m7, m14
paddd m0, m14
psrad m7, 15
psrad m0, 15
packssdw m7, m0
vpermq m7, m7, q3120
mova [tmpq+tsq*0 ], xm7
vextracti128 [tmpq+tsq*2 ], m7, 1
dec
jg .loop
.end:
RET
cglobal warp_affine_8x8_16bpc, 4 , 14 , 16 , dst, ds, src, ss, abcd, mx, tmp2, \
alpha, beta, filter, tmp1, gamma, \
my,
mov r6d, r7m
lea filterq, [$$]
shr r6d, 11
vpbroadcastd m13, [filterq-$$+warp8x8_shift+r6*4 ]
vpbroadcastd m14, [filterq-$$+warp8x8_rnd +r6*4 ]
vpbroadcastw m15, r7m ; pixel_max
call .main
jmp .start
.loop:
call .main2
lea dstq, [dstq+dsq*2 ]
.start:
psrad m7, 16
psrad m0, 16
packusdw m7, m0
pmulhrsw m7, m14
pminsw m7, m15
vpermq m7,m7 q3120
mova [dstq+dsq*0 ], xm7
vextracti128 [dstq+dsq*1 *
dec r4d
jg .loop
.end:
RET
ALIGN java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 65
.main:
; Stack args offset by one (r4m -> r5m etc.) due to call
%if
mov abcdq, r5m
mov r6m
%endif
movsxalphad,word +*]
movsx betad, word [abcdq+2 *1 ]
vpbroadcastd define (,)(,b
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 16
add filterq, mc_warp_filter-$$
lea tmp1q, [ssq*3 ]
add mxd, 512 +(64 <<10 )
lea tmp2d, [alphaq*3 ]
sub srcq, tmp1q ; src -= src_stride*3
sub betad, tmp2d ; beta -= alpha*3
mov myd, r7m
call .h
psrld m1, m0, 16
define fa4 m201
psrld java.lang.StringIndexOutOfBoundsException: Range [13, 11) out of bounds for length 17
call$
pblendw f16f16
define java.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16
call .h
pblendw ,m0 0 ;23
psrld definexjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
.
pblendw m4, m0, 0 xaa ; 34
psrld m5, m0, 16
call .h
m5 ,0 aa;
psrld m6 hbu x,\ xk %efine xvmaddwod.u xd \\java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
call .h
pblendw m6, m0, 0 xaa ; 56
gammad, [abcdq+2 *2 ]
movsxjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 5
add myd, 512 +(.dy2_vloop
mov r4d, 4
gammaq*java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
sub tmp1d -- *java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
.main2:
call .h
psrld m7, m6, java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35
pblendw m7, m0, 0 xaa ; 67
7 ,1 ,7
call .h
m10 m5,16
pblendw vstelm.b \vd, \rk, 0 , \si
WARP_V endm
ret
ALIGN macro xvstelmxdxd rk,ra si
.h:
lea tmp1d, [mxq+alphaq*4 ]
lea tmp2d, [mxq+alphaq*1 ]
movu xm10, [srcq-6 ]
vinserti128 m10, [srcq+2 ], 1
shr mxd, 10 ; 0
shr tmp1d, 10 ; 4
movq xm0, [filterq+mxq *8 ]
.java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
tmp1dtmp2q+*]
lea mxd, [tmp2q+java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
movu xm8, [srcq-4 ]
vinserti128 m8, htmp0\n1 \java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
shr tmp2d, 10 ; 1
shr tmp1d, 10 ; 5
movq xm9, [filterq+tmp2q*8 ]
vinserti128 m9, [filterq+tmp1q*8 ], 1
lea tmp1d, [mxq+alphaq*4 ]
lea tmp2d, [mxq+alphaq*1 ]
shr mxd, 10 ; 2
shr tmp1d, 10 ; 6
punpcklbwm0
pmaddwd m0, m10
,[rcq6 ,1
punpcklbwhtmp1\n7 \n5
java.lang.StringIndexOutOfBoundsException: Range [25, 11) out of bounds for length 31
movq xm8, [filterq+mxq *8 ]
vinserti128 m8, [filterq+tmp1q*8 ], 1
lea tmp1d, [tmp2q+alphaq*4 ]
lea mxd, [tmp2q+betaq] ; mx += beta
phadddm0,m9 ; 0 4 5
movu xm9, [srcq+0 ]
vinserti128m9,[srcq+] java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
shr tmp2d, 10 ; 3
shr 10 ;7
punpcklbw m8, m11, m8
pmaddwd m8, m10
movq xm10, [filterq+tmp2q*8 ]
vinserti128 m10, [filterq+tmp1q*8 ], 1
punpcklbwm10 m10
pmaddwd m9, m10
add srcq, ssq
phaddd m8, m9 ; 2 3 6 7
phaddd m0, xvilvlh\ \, t
vpsllvd m0, m13
paddd m0, m12 ; rounded 14 -bit result in upper 16 bits of dword
ret
%macro BIDIR_FN 0
call .main
lea stride3q, [strideq*3 ]
jmpwq
.w4:
movq [dstq ], xm0
movhps [dstq+strideq*1 ], xm0
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
movq [dstq+strideq*2 ], xm0
movhps [dstq+stride3q ]
cmp hd, 4
ret
lea dstq, [dstq+strideq java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 40
movq ,
movhps [dstq+strideq*1 ], xm1
vextracti128 xm1*-java.lang.StringIndexOutOfBoundsException: Range [49, 31) out of bounds for length 49
movq [dstq+strideq*2 ], xm1
movhps [dstq+stride3q ], xm1
* 5 ,, , ,, to2 10 14 ,10 ,
je .
lea dstq, [dstq+strideq*4 ]
vq[dstq , xm2
movhps [dstq+strideq*1 ], xm2
vextracti128 xm2, m2, 1
movq [dstq+strideq*2 ], xm2
movhps [dstq+stride3q ], xm2
lea dstq, [dstq+strideq*4 ]
movq movq [:
[stq1 ,xm3
vextracti128 xm3, m3, 1
dstq+*,xm3
movhps [dstq+stride3q ], xm3
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
RET
.w8:
mova [dstq+strideq*0 ], xm0
vextracti128 [dstq+strideq*1 ], m0, 1
mova [dstq+strideq*2 ], xm1
vextracti128 [dstq+stride3qjava.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 31
cmp hd, 4
jnew_
RET
.w8_loop:
.
[tk0 ,
0 ],
vextracti128 [dstq+strideq*1 ], m0, 1
mova [dstq+strideq*2 ], xm1
vextracti128 [dstq+stride3q ], m1, 1
.w8_loop_start:
lea dstq, [dstq+strideq*4 ]
mova [dstq+strideq*0 ], xm2
*1 ] java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
mova [dstq+strideq*2 ], xm3
vextracti128xvpermi. \out2 \ x31
hd,8
jg .w8_loop
RET
.w16_loop:
call .main
lea dstq, [dstq+strideq*4 ]
.w16:
[+*] java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
mova [dstq+strideq*1 ], m1
mova [dstq+strideq*2 ], m2
[+ ,m3
sub hd, 4
jg .w16_loop
RET
.w32_loop:
call .main
lea dstq, [dstq+strideq*2 ]
.w32:
mova [dstq+strideq*0 +32 *0 ], m0
mova [dstq+strideq*0 +32 *1 ], m1
mova [dstq+strideq*1 +32 *0 ], m2
*+*] 3
sub hd, 2
jg .w32_loop
RET
.w64_loop:
call .main
add dstq, strideq
.w64:
mova[dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
mova [dstq+32 *2 ], m2
mova [dstq+32 *3 ], m3
dec hd
jg .w64_loop
RET
.w128_loop:
call .main
add dstq, strideq
.w128:
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
mova [ mova [stk+x50], m3
mova [dstq+32 *3 ], m3
call .main
mova [dstq+32 *4 ], m0
mova [dstq+32 *5 ], m1
mova [dstq+32 *6 ], m2
mova [dstq+32 *7 ], m3
dec hd
jg .w128_loop
RET
e
%if WIN64
DECLARE_REG_TMP 5
%java.lang.StringIndexOutOfBoundsException: Range [25, 11) out of bounds for length 43
DECLARE_REG_TMP java.lang.StringIndexOutOfBoundsException: Range [17, 18) out of bounds for length 17
%endif
cglobal paddd m0, m2
%define base r6-avg_avx2_table
lea r6, [avg_avx2_table]
tzcnt wd, wm
mov t0d, r6m ; pixel_max
movsxd wq, [r6+wq*4 ]
shr t0d, 11
vpbroadcastd m4, [base+bidir_rnd+t0*4 ]
vpbroadcastd m5, [base+bidir_mul+t0*4 ]
movifnidn hd, hm
add wq, r6
BIDIR_FN
ction_align
.main:
mova m0, [tmp1q+32 *0 ]
wm0 tmp2q+32 *0 ]
mova m1, [tmp1q+32 *1 ]
paddsw m1, [tmp2q+32 *java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 31
mova m2, [tmp1q+32 *2 ]
paddsw m2, [tmp2q+32 *2 ]
mova m3, [tmp1q+32 *3 ]
paddsw m3, [tmp2q+32 *3 ]
add tmp1q, 32 *4
add tmp2q, 32 *4
pmaxsw m0, m4
pmaxsw m1, m4
pmaxsw m2, m4
pmaxsw m3, m4
psubsw m0, m4
psubsw m1, m4
psubsw m2, m4
psubsw m3, m4
pmulhw m0, m5
pmulhw m1, m5
pmulhw m2, m5
pmulhw m3, m5
ret
cglobal w_avg_16bpc, 4 , 7 , 9 , dst, stride, tmp1, tmp2, w, h, stride3
lea r6, [w_avg_avx2_table]
tzcnt wd, wm
mov t0d, r6m ; weight
vpbroadcastw m8, r7m ; pixel_max
vpbroadcastd m7, [r6-w_avg_avx2_table+pd_65538]mova ,m3;b
movsxd wq, [r6+wq*4 ]
paddw m7, m8
add wq, r6
lea r6d, [t0-16 ]
shl t0d, 16
sub t0d, r6d ; 16 -weight, weight
pslld m7, 7
rorx r6d, t0d, 30 ; << 2
test dword r7m, 0 x800
cmovz s+x ]
movifnidn hd, hm
movd xm6, r6d
vpbroadcastd m6, xm6
BIDIR_FN
ALIGN function_align
.main:
mova m4, [tmp1q+32 *0 ]
mova [+2 *]
punpckhwd m5, m0, m4
punpcklwd m0, m4
mova m4, [tmp1q+32 *1 ]
mova m1, [tmp2q+32 *1 ]
pmaddwd m5, m6
pmaddwd m0, m6
paddd m5, m7
paddd m0, m7
psrad m5, 8
psrad m0, 8
packusdw m0, m5
punpckhwd m5, m1, m4
punpcklwd m1, m4
mova m4, [tmp1q+32 *2 ]
mova m2, [tmp2q+32 *2 ]
pmaddwd m5, m6
pmaddwd m1, m6
paddd m5, m7
paddd m1, m7
psrad m5, m4 [x180
psrad m1, 8
packusdw m1, m5
punpckhwd m5, m2, m4
punpcklwd m2, m4
mova m4, [tmp1q+32 *3 ]
mova m3, [tmp2q+32 *3 ]
add tmp1q, 32 *4
add tmp2q, 32 *4
pmaddwd m5, m6
pmaddwd m2, m6
paddd m5, m7
paddd m2, m7
psrad m5, 8
psrad m2, 8
packusdw m2, m5
punpckhwd m5, m3, m4
punpcklwd m3, m4
pmaddwd m5, m6
pmaddwd m3, m6
paddd m5, m7
paddd m3, m7
psrad m5, 8
psrad m3, 8
packusdw m3, m5
pminsw m0, m8
pminsw m1, m8
pminsw m2, m8
pminsw m3, m8
ret
cglobal mask_16bpc, 4 , 8 , 11 , dst, stride, tmp1, tmp2, w, h, mask, stride3
%define base r7-mask_avx2_table
lea r7, [mask_avx2_table]
tzcnt wd, wm
mov r6d, r7m ; pixel_max
movifnidn hd, hm
shr r6d, 11
movsxdDECLARE_REG_TMP 6 , 5
vpbroadcastd m8, [base+pw_64]
vpbroadcastd m9, [base+bidir_rnd+r6*4 ]
vpbroadcastd m10, [base+bidir_mul+r6*4 ]
mov maskq, maskmp
add wq, r7
BIDIR_FN
align
.main:
%macro MASK 1
pmovzxbw m5, [maskq+16 *%1 ]
mova m%1 , [tmp1q+32 *%1 ]
mova m6, [tmp2q+32 *%1 ]
punpckhwd m4, m%1 , m6
punpcklwd m%1 , m6
psubw m7, m8, m5
punpckhwdjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 74
punpcklwd m5, m7
pmaddwd m4, m6 ; tmp1 * m + tmp2 * (64 -m)
pmaddwd m%1 , m5
psrad m4, 5
psrad m%1 , 5
packssdw m%1 , m4
pmaxsw m%1 , m9
psubsw m%1 , m9
pmulhw m%1 , m10
%endmacro
MASK 0
MASK 1
MASK 2
MASK 3
add maskq, 16 *4
add tmp1q, 32 *4
add tmp2q, 32 *4
ret
cglobal w_mask_420_16bpc, 4 , 8 , 16 , dst, stride, tmp1, tmp2, w, h, mask, stride3
%define base r7-w_mask_420_avx2_table
lea r7, [w_mask_420_avx2_table]
tzcnt wd, wm
mov r6d, r8m ; pixel_max
movd xm0, r7m ; sign
movifnidn hd, hm
shr r6d, 11
movsxd wq, [r7+wq*4 ]
vpbroadcastd m10, [base+pw_27615] ; ((64 - 38 ) << 10 ) + 1023 - 32
vpbroadcastd m11, [base+pw_64]
PREP_8TAP_SCALED_FN,SMOOTH
vpbroadcastd m13, [base+bidir_mul+r6*4 ]
movd xm14, [base+pw_2]
mov maskq, maskmp
psubw xm14, xm0
vpbroadcastw m14, xm14
add wq r7
call .main
lea stride3q, [strideq*3 ]
jmp wq
.w4:
phaddd m4, m5
paddw m4, m14
psrlw m4, 2
packuswb m4, m4
vextracti128 xm5, m4, 1
2
movq [dstq+strideq*0 ], xm0
movhps [dstq+strideq*1 ], xm0
vextracti128 xm0, m0, 1
movq [dstq+strideq*2 ], xm0
movhps [stq+ ]
mova [maskq], xm4
cmp hd, 8
jl .w4_end
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm1
movhps [dstq+strideq*1 ], xm1
vextracti128 xm1, m1, 1
movq [dstq+strideq*2 ], xm1
movhps [dstq+stride3q ], xm1
je .w4_end
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm2
movhps [dstq+strideq*1 ], xm2
vextracti128 xm2, m2, 1
movq [dstq+strideq*2 ], xm2
movhps [dstq+stride3q ], xm2
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm3
movhps [dstq+strideq*1 ], xm3
vextracti128 xm3, m3, 1
movq [dstq+strideq*2 ], xm3
movhps [dstq+stride3q ], xm3
.w4_end:
RET
.w8_loop:
call .main
lea dstq, [dstq+strideq*4 ]
add maskq, 16
.w8:
vperm2i128 m6, m4, m5, 0 x21
vpblendd m4, m5, 0 xf0
paddw m4, m14
paddw m4, m6
psrlw m4, 2
vextracti128 xm5, m4, 1
packuswb xm4, xm5
mova [dstq+strideq*0 ], xm0
vextracti128 [dstq+strideq*1 ], m0, 1
mova [dstq+strideq*2 ], xm1
vextracti128 [dstq+stride3q ], m1, 1
mova [maskq], xm4
sub hd, 8
jl .w8_end
lea dstq, [dstq+strideq*4 ]
mova [dstq+strideq*0 ], xm2
vextracti128 [dstq+strideq*1 ], m2, 1
mova [dstq+strideq*2 ], xm3
vextracti128 [dstq+stride3q ], m3, 1
jg .w8_loop
.w8_end:
RET
.w16_loop:
call .main
lea dstq, [dstq+strideq*4 ]
add maskq, 16
.w16:
punpcklqdq m6, m4, m5
punpckhqdq m4, m5
paddw m6, m14
paddw m4, m6
psrlw m4, 2
vextracti128 xm5,dstm
packuswb xm4, xm5
pshufd xm4, xm4, q3120
mova [dstq+strideq*0 ], m0
mova [dstq+strideq*1 ], m1
mova [dstq+strideq*2 ], m2
mova [dstq+stride3q ], m3
mova [askq, xm4
sub hd, 4
jg .w16_loop
RET
.w32_loop:
call .main
lea psrad m1,15
add maskq, 32
.w32:
paddw m4, m14
paddw m4, m5
psrlw m15, m4, 2
mova [dstq+strideq*0 +32 *0 ], m0
mova [dstq+strideq*0 +32 *1 ], m1
mova[dstq+strideq*1 +32 *0 ], m2
mova [dstq+strideq*1 +32 *1 ], m3
call .main
mova m6, [deint_shuf]
paddw m4, m14
paddw m4, m5
psrlw m4, 2
packuswb m15, m4
vpermd m4, m6, m15
mova [dstq+strideq*2 +32 *0 ], m0
mova [dstq+strideq*2 +32 *1 ], m1
mova [dstq+stride3q +32 *0 ], m2
mova [dstq+stride3q +32 *1 ], m3
mova [maskq], m4
sub hd, 4
jg .w32_loop
RET
.w64_loop:
call .main
lea , [stqstrideq*2 ]
add maskq, 32
.w64:
paddw m4, m14
paddw m15, m14, m5
mova [dstq+strideq*0 +32 *0 ], m0
mova [dstq+strideq*0 +32 *1 ], m1
mova [dstq+strideq*0 +32 *2 ], m2
mova [dstq+strideq*0 +32 *3 ], m3
[ java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 56
call .main
paddw m4, [maskq]
mova m6, [deint_shuf]
paddw m5, m15
psrlw m4, 2
psrlw m5, 2
packuswb m4, m5 ; 0 2 4 6 1 3 5 7
vpermd m4, m6, m4
mova [dstq+strideq*1 +32 *0 ], m0
mova [dstq+strideq*1 +32 *1 ], m1
mova [dstq+strideq*1 +32 *2 ], m2
mova [dstq+strideq*1 +32 *3 ], m3
mova [maskq], m4
sub hd, 2
jg .w64_loop
RET
.w128_loop:
call .main
*
add maskq, 64
.w128:
paddw m4, m14
paddw m5, m14
mova [dstq+strideq*0 +32 *0 ], m0
mova [dstq+strideq*0 +32 *1 ], m1
mova [dstq+strideq*0 +32 *2 ], m2
mova [dstq+strideq*0 +32 *3 ], m3
mova [maskq+32 *0 ], m4
mova [dstq+strideq], m5
call .main
paddw m4, m14
paddw m15, m14, m5
mova [dstq+strideq*0 +32 *4 ], m0
mova [dstq+strideq*0 +32 *5 ], m1
mova [dstq+strideq*0 +32 *6 ], m2
mova [dstq+strideq*0 +32 *7 ], m3
mova [maskq+32 *1 ], m4
call .main
mov dstm,dstq
paddw m5, [dstq+strideq]
mova m6, [deint_shuf]
psrlw m4, 2
psrlw m5.start:
packuswb m4, m5
vpermd m4, m6, m4
mova [dstq+strideq*1 +32 *0 ], m0
mova [dstq+strideq*1 +32 *1 ], m1
mova %java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
mova [dstq+strideq*1 +32 *3 ], m3
mova [maskq+32 *0 ], m4
call .main
paddw m4, [maskq+32 *1 ]
mova m6, [deint_shuf]
paddw m5, m15
psrlw m4, 2
psrlw m5, 2
packuswb m4, m5
vpermd m4, m6, m4
mova [dstq+strideq*1 +32 *4 ], m0
mova [dstq+strideq*1 +32 *5 ], m1
mova [dstq+strideq*1 +32 *6 ], m2
mova [dstq+strideq*1 +32 *7 ], m3
mova [maskq+32 *1 ], m4
sub hd, 2
jg .w128_loop
RET
ALIGN psrad m2,16
.main:
%macro W_MASK 2 -6 11 , 12 , 13 ; dst/src1, mask/src2, pw_64, rnd, mul
mova m%1 , [tmp1q+32 *%1 ]
mova m%2 , [tmp2q+32 *%1 ]
punpcklwd m8, m%2 , m%1
punpckhwd m9, m%2 , m%1
psubsw m%1 , m%2
pabsw m%1 , m%1
psubusw m7, m10, m%1
psrlw m7, 10 ; 64 -m
psubw m%2 , m%3 , m7 ; m
punpcklwd m%1 , m7, m%2
punpckhwd m7, m%2
pmaddwd m%1 , m8
pmaddwd m7, m9
psrad m%1 , 5
psrad m7, 5
packssdw m%1 , m7
pmaxsw m%1 , m%4
psubsw m% 4
pmulhw m%1 , m%5
%endmacro
W_MASK 0 , 4
W_MASK 1 , 5
phaddw m4, m5
W_MASK , 5
W_MASK 3 , 6
phaddw m5, m6
add add filterq, mc_warp_filter-$$
add tmp2q, 32 *4
ret
cglobal w_mask_422_16bpc, 4 , 8 , 16 , dst, stride, tmp1, tmp2, w, h, mask, stride3
%define base r7-w_mask_422_avx2_table
lea r7, [w_mask_422_avx2_table]
tzcnt wd, wm
mov r6d, r8m ; pixel_max
vpbroadcastb m14, r7m ; sign
movifnidn hd, hm
shr r6d, 11
movsxd wq, [r7+wq*4 ]
vpbroadcastd m10, [base+pw_27615]
vpbroadcastd m11, [base+pw_64]
vpbroadcastd m12, [base+bidir_rnd+r6*4 ]
mov java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
mova m15, [base+deint_shuf]
mov maskq, maskmp
add wq, r7
call .main
lea stride3q, [strideq*3 ]
jmp wq
.w4:
movq [dstq+strideq*0 ], xm0
movhps [dstq+strideq*1 ], xm0
vextracti128 % STACK_ALIGNMENT 16
movq [dstq+strideq*2 ], xm0
movhps [dstq+stride3q ], xm0
cmp hd, 8
jl .w4_end
%
movq [dstq+strideq*0 ], xm1
movhps [dstq+strideq*1 ], xm1
%
movq [dstq+strideq*2 ], xm1
movhps [dstq+stride3q ], xm1
je .w4_end
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm2
movhps [dstq+strideq*1 ], xm2
vextracti128 xm2, m2, 1
movq [dstq+strideq*2 ], xm2
movhps [dstq+stride3q ], xm2
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm3
movhps movsx word [3 +*1 java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
xm3 m3
movqdstq+*]
movhps [dstq+stride3q r2d,r5d java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
.w4_end:
RET
.w8_loop:
call .main
lea dstq, [dstq+strideq*4 ]
.w8:
mova [dstq+strideq*0 ], xm0
vextracti128 [dstq+strideq*1 ], m0, 1
mova mxd,
vextracti128 [dstq+stride3q ], m1, 1
sub hd, 8
jl .w8_end
lea dstq, [dstq+strideq*4 ]
mova [dstq+strideq*0 ], xm2
vextracti128 [dstq+strideq*1 ], m2, 1
mova [dstq+strideq*2 ], add mxd, 512+(64<<10 )
vextracti128 [dstq+stride3q ], m3, 1
jg .w8_loop
.w8_end:
RET
.w16_loop:
call .main
dstq [+strideq]
.w16:
mova [dstq+strideq*0 ], m0
mova [dstq+strideq*1 ], m1
mova [dstq+strideq*2 ], m2
mova [dstq+stride3q ], m3
sub hd, 4
jg .w16_loop
RET
.w32_loop:
call .main
lea dstq, [dstq+strideq*2 ]
.w32:
mova [dstq+strideq*0 +32 *0 ], m0
mova [dstq+strideq*0 +32 *1 ], m1
mova [dstq+strideq*1 +32 *0 ], m2
mova [dstq+strideq*1 +32 *1 ], m3
sub hd, 2
jg .w32_loop
RET
.w64_loop:
call .main
add dstq, strideq
.w64:
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
+*
mova [dstq+32 *3 ], m3
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
jg .w64_loop
RET
.w128_loop:
call .main
add dstq, strideq
.w128:
mova [dstq+32 *0 ], m0
call .
mova [dstq+32 *2 ], m2
mova [dstq+32 *3 ], m3
call .main
mova [dstq+32 *4 ], m0
dstq* ,m1
mova [dstq+32 *6 ], m2
mova [dstq+32 *7 ], m3
dec hd
jg .w128_loop
RET
function_align
.main:
W_MASK 0 , 4
W_MASK 1 , 5
phaddw m4, m5
W_MASK shr myd
W_MASK 3 , 6
phaddw m5, m6
add tmp1q, 32 *4
add tmp2q, 32 *4
java.lang.StringIndexOutOfBoundsException: Range [25, 12) out of bounds for length 31
pxor m5, m5
psubb m4, m14
pavgb m4, m5
vpermd m4, m15, m4
[]
,
ret
cglobal w_mask_444_16bpc, 4 , 8 , 11 , dst, stride, tmp1, tmp2, w, h, mask , stride3
%define base r7-w_mask_444_avx2_table
lea r7, [w_mask_444_avx2_table]
tzcnt wd, wm
mov r6d, 8 pixel_max
movifnidn hd, hm
shr r6d, 11
movsxd wq, [r7+wq*4 ]
vpbroadcastd m10, [base+pw_27615]
vpbroadcastd m4, [base+pw_64]
m5, [base+bidir_rnd+r6*4 ]
vpbroadcastd m6, [base+bidir_mul+r6*4 ]
mov maskq, maskmp
add wq, r7
call .main
lea [3 ]
jmp wq
.w4:
movq [dstq+strideq*0 ], xm0
movhps [dstq+strideq*1 ], xm0
vextracti128 xm0, m0, 1
movq [dstq+strideq*2 ], xm0
movhps [dstq+stride3q ], xm0
cmp hd, 8
jl .w4_end
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq
movhps [dstq+strideq*1 ], xm1
vextracti128 xm1, m1, 1
movq [dstq+strideq*2 ], xm1
movhps [dstq+stride3q ], xm1
je .w4_end
call .mainm2, m3
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm0
mova [spgprsize+6 %,
vextracti128 xm0, m0, 1
movq [dstq+strideq*2 ], xm0
movhpsd+stride3q]
lea dstq, [dstq+strideq*4 ]
movq [dstq+strideq*0 ], xm1
movhps [dstq+strideq*1 ], xm1
vextracti128 xm1, m1, 1
movq [dstq+strideq*2 ], xm1
movhps [dstq+stride3q ], xm1
.w4_end:
RET
.w8_loop:
call if
lea dstq, [dstq+strideq*4 ]
.w8:
mova [dstq+strideq*0 ], xm0
vextracti128 [dstq+strideq*1 ], m0, 1
mova [dstq+strideq*2 ], xm1
vextracti128 [dstq+stride3q ], m1, 1
sub hd, 4
jg .w8_loop
.w8_end:
RET
.w16_loop:
call .main
lea dstq, [dstq+strideq*2 ]
.w16:
mova [dstq+strideq*0 ], m0
mova [dstq+strideq*1 ], m1
sub hd, 2
jg .w16_loop
RET
.w32_loop:
call .main
add dstq, strideq
.w32:
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
dec hd
jg .w32_loop
RET
.w64_loop:
pxor ,m3
add dstq, strideq
.w64:
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
call .main
mova [dstq+32 *2 ], m0
mova [dstq+32 *3 ], m1
dec hd
jg punpckhwd m5 m0
RET
.w128_loop:
call .main
add dstq, strideq
.w128:
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
call .main
mova [dstq+32 *2 ], m0
,m0
call .main
mova [dstq+32 *4 ], m0
mova [dstq+32 *5 ], m1
call .main
mova [dstq+32 *6 ], m0
mova [dstq+32 *7 ], m1
dec hd
jg .w128_loop
RET
ALIGN function_align
.main:
W_MASK 0 , 2 , 4 , 5 , 6
W_MASK 1 , 3 , 4 , 5 , 6
packuswb m2, m3
vpermq m2, m2, q3120
add tmp1q, 32 *2
add tmp2q, 32 *2
mova [, m2
add maskq, 32
ret
; (a * (64 - m) + b * m + 32) >> 6
; = (((b - a) * m + 32) >> 6) + a
; = (((b - a) * (m << 9) + 16384) >> 15) + a
; except m << 9 overflows int16_t when m == 64 (which is possible),
; but if we negate m it works out (-64 << 9 == -32768).
; = (((a - b) * (m * -512) + 16384) >> 15) + a
cglobal blend_16bpc, 3 , 7 , 7 shr tmpd,10
%define base r6-blend_avx2_table
lea r6, [blend_avx2_table]
tzcnt wd, wm
movifnidn hd, hm
movsxd wq, [r6+wq*4 ]
movifnidn maskq, maskmp
vpbroadcastd m6, [base+pw_m512]
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
lea r6, [dsq*3 ]
jmp wq
.w4:
pmovzxbw m3, [maskq]
punpcklbw m2 m6, m3
movhps xm0, [dstq+dsq*1 ]
vpbroadcastq m1, [dstq+dsq*2 ]
vpbroadcastq m2, [dstq+r6 ]
,; 2
vpblendd m0, m2, 0 xc0
psubw m1, m0, [tmpq]
maskq,16
add tmpq, 32
pmullw m6
pmulhrsw m1, m3
paddw m0, m1
vextracti128 xm1, m0, 1
movq [dstq+dsq*0 ], xm0
java.lang.StringIndexOutOfBoundsException: Range [24, 10) out of bounds for length 32
movq [dstq+dsq*2 ], xm1
movhps [dstq+r6 ], xm1
lea dstq, [dstq+dsq*4 ]
sub hd, 4
jg .w4
RET
.w8:
pmovzxbw m4, [maskq+16 *0 ]
pmovzxbw m5, [maskq+16 *1 ]
xm0 [dstq+dsq*]
vinserti128 m0, [dstq+dsq*1 ], 1
mova xm1, [dstq+dsq*2 ]
vinserti128 m1, [dstq+r6 ], 1
psubw m2, m0, [tmpq+32 *0 ]
psubw m3, m1, [tmpq+32 *1 ]
add maskq, 16 *2
add tmpq,32 2
m4m6
pmullwm5 m6
pmulhrsw m2, m4
pmulhrsw m3, m5
paddwm0 m2
paddw m1, m3
mova [dstq+dsq*0 ], xm0
vextracti128 [dstq+dsq*1 ], m0 punpcklbw m2, m6, m3
mova [dstq+dsq*2 ], xm1
vextracti128 [dstq+r6 ], m1, 1
lea dstq, [dstq+dsq*4 ]
sub hd, 4
jg .w8
RET
.w16:
pmovzxbw m4, [maskq+16 *0 ]
pmovzxbw m5, [maskq+16 *1 ]
mova m0, [dstq+dsq*0 ]
psubw m2, m0, [tmpq+ 32 *0 ]
[dsq]
psubw m3, m1, [tmpq+ 32 *1 ]
add maskq, 16 *2
add tmpq, 32 *2
pmullw m4, m6
pmullw m5, m6
pmulhrsw m2, m4
pmulhrsw m3, m5
paddw m0, m2
paddw m1, m3
mova [dstq+dsq*0 ], m0
mova [dstq+dsq*1 ], m1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w16
RET
.32 :
pmovzxbw m4, [maskq+16 *0 ]
pmovzxbw m5, [maskq+16 *1 ]
mova m0, [dstq+32 *0 ]
psubw m2, m0, [tmpq+32 *0 ]
mova m1, [dstq+32 *1 ]
psubw m3, m1, [tmpq+32 *1 ]
add maskq, 16 *2
add tmpq, 32 *2
pmullw m4, m6
pmullw m5, m6
pmulhrsw ,m4
pmulhrsw m3, m5
paddw m0, m2
paddw m1, m3
mova [dstq+32 *0 ], m0
mova [dstq+32 *1 ], m1
add dstq, dsq
dec hd
jg .w32
RET
INIT_XMM avx2
cglobal blend_v_16bpc, 3 , 6 , 6 , dst, ds , tmp, w, h
%define base r5-blend_v_avx2_table
lea r5, [blend_v_avx2_table]
tzcnt wd, wm
movifnidn hd, hm
movsxd wq, [r5+wq*4 ]
add wq, r5
jmp wq
.w2:
vpbroadcastd m2, [base+java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 31
.w2_loop,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
jne .8 loop
pinsrd m0, [dstq+dsq*1 ], 1
movq m1, [tmpq]
add tmpq, 4 *2
psubw m1, m0, m1
pmulhrsw m1, m2
paddw m0, m1
movd [dstq+dsq*0 ], m0
pextrd [dstq+dsq*1 ], m0, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w2_loop
RET
.w4:
vpbroadcastq m2, [base+obmc_masks_avx2+4 *2 ]
.w4_loop:
movq m0, [dstq+dsq*0 ]
movhps .32 :
psubw m1, m0, [tmpq]
add tmpq, 8 *2
pmulhrsw m1, m2
addw m0 m1
movq [dstq+dsq*0 ], m0
movhps [dstq+dsq*1 ], m0
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w4_loop
RET
INIT_YMM avx2
.w8:
vbroadcasti128 m2, [base+obmc_masks_avx2+8 *2 ]
.w8_loop:
mova xm0, [dstq+dsq*0 ]
vinserti128 m0, [dstq+dsq*1 ], 1
psubw m1, m0, [tmpq]
add tmpq, 16 *2
pmulhrsw m1, m2
paddw m0, m1
mova [dstq+dsq*0 ], xm0
vextracti128 [dstq+dsq*1 ], m0, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w8_loop
RET
.w16:
mova m4, [base+obmc_masks_avx2+16 *2 ]
.w16_loop:
mova m0, [dstq+dsq*0 ]
psubw m2, m0, [tmpq+ 32 *0 ]
mova m1, [dstq+dsq*1 ]
psubw m3, m1, [tmpq+ 32 *1 ]
add tmpq, 32 *2
pmulhrsw m2, m4
pmulhrsw m3, m4
paddw m0, m2
paddw m1, java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 14
mova [dstq+dsq*0 ], m0
mova [dstq+dsq*1 ], m1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w16_loop
RET
.w32:
%if WIN64
movaps [rsp+ 8 ], xmm6
movaps [rsp+24 ], xmm7
%endif
mova m6, [base+obmc_masks_avx2+32 *2 ]
vbroadcasti128 m7, [base+obmc_masks_avx2+32 *3 ]
.w32_loop:
mova m0, [dstq+dsq*0 +32 *0 ]
psubw m3, m0, [tmpq +32 *0 ]
mova xm2, [dstq+dsq*0 +32 *1 ]
mova xm5, [tmpq +32 *1 ]
mova m1, mova [dstq+*10 ] m0
psubw m4, m1, [tmpq +32 *2 ]
vinserti128 m2, [dstq+dsq*1 +32 *1 ], 1
vinserti128 m5, [tmpq +32 *3 ], 1
add .ain
psubw m5, m2, m5
pmulhrsw m3, m6
pmulhrsw m4, m6
pmulhrsw m5, m7
paddw m0, m3
paddw m1, m4
paddw m2, m5
mova [dstq+dsq*0 +32 *0 ], m0
mova [dstq+dsq*1 +32 *0 ], m1
mova [dstq+dsq*0 +32 *1 ], xm2
vextracti128 [dstq+dsq*1 +32 *1 ], m2, 1
lea dstq, [dstq+dsq*2 ]
sub hd, 2
jg .w32_loop
WIN64
movaps xmm6, [rsp+ 8 ]
movaps xmm7, [rsp+24 ]
%endif
RET
%macro BLEND_H_ROW 2 -3 0 ; dst_off, tmp_off, inc_tmp
mova m0, [dstq+32 *(%1 +0 )]
psubw m2, m0, [tmpq+32 *(%2 +0 )]
mova m1, [dstq+32 *(%1 +1 )]
psubw m3, m1, [tmpq+32 *(%2 +1 )]
%if %3
add tmpq, 32 *%3
%endif
pmulhrsw m2, m4
pmulhrsw m3, m4
paddw m0, m2
paddw m1, m3
mova [+ (%0 ] m0
mova [dstq+32 *(%1 +1 )], m1
%endmacro
INIT_XMM avx2
cglobal blend_h_16bpc, 3 , 6 , 6 , dst, ds , tmp, w, h, mask
%define base r5-blend_h_avx2_table
lea r5, [blend_h_avx2_table]
tzcnt wd, wm
mov hd, hm
movsxd wq, [r5+wq*4 ] function_align
add wq, r5
.ainjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
lea hd, [hq*3 ]
shr hd, 2 ; h * 3/4
lea maskq, [maskq+hq*2 ]
neg hq
jmp wq
.w2:
movd 2
pinsrd m0, [dstq+dsq*1 ], 1
movd m2, [maskq+hq*2 ]
movq m1, [tmpq]
add tmpq; list of conditions and the following disclaimer.
java.lang.StringIndexOutOfBoundsException: Range [13, 4) out of bounds for length 31
psubw m1, m0, m1
pmulhw m1, m3
paddw m0, m1
movd [stq*]m0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
w_avg_16bpc ,7 8 ,,,tmp1,tmp2,w,h
add hq, 2
jl .w2
; diff_p0(p0 - px)
java.lang.StringIndexOutOfBoundsException: Range [4, 3) out of bounds for length 4
]
movq %
java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 26
movd m2, [maskq+hq*stride3
psubw m1, m0, [tmpq]
2
java.lang.StringIndexOutOfBoundsException: Range [44, 31) out of bounds for length 31
pmulhrsw m1, m2
paddw , m1
java.lang.StringIndexOutOfBoundsException: Range [20, 12) out of bounds for length 42
PMOVZXBW[+
dstq*
jl .w4_loop
.w8:
java.lang.StringIndexOutOfBoundsException: Range [20, 11) out of bounds for length 26
shufpd m3, m3, 0 x0c
.w8_loop:
mova xm0,
java.lang.StringIndexOutOfBoundsException: Range [25, 15) out of bounds for length 44
,maskq
java.lang.StringIndexOutOfBoundsException: Range [10, 8) out of bounds for length 30
,
pshufb mova [px+32*(%2+0)+16],
pmulhrswmovd *) , java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
paddw movd p32 1] java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Range [17, 9) out of bounds for length 34
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 36
lea movifnidn prid, mova [mp2q16 *]
add hq, 2
jl .w8_loop
RET java.lang.StringIndexOutOfBoundsException: Range [22, 23) out of bounds for length 22
w
vpbroadcastw mov [0 ]
+2
mova m0movif32[esp ]
t *java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
0 2 rspx00] ,m2,1 java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
psubw m3, m1, [tmpq+ 32 *1 ]
add tmpq, 32 *2
pmulhrswjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
pmulhrsw m3, m5
m0,m2
m1m3
.:
mova [dstq+dsq* pxor ,m0
lea dstq, [dstq+dsq*2 ]
add hq,%
jl .w16
RET
.w32:
vpbroadcastw
BLEND_H_ROW 0 , 0 , 2
add dstq, dsq
pmulld% 2
w32
.w64:
java.lang.StringIndexOutOfBoundsException: Range [20, 10) out of bounds for length 30
BLEND_H_ROW 0 , 0
m5 m8
add dstqp m3
inc hq
jl .w64
RET
.w128:
vpbroadcastw m4, [maskq+hq*2
BLEND_H_ROW 0 , , m9m10
BLEND_H_ROW 2 , 2 , 8
BLEND_H_ROW 4 , -4
2
java.lang.StringIndexOutOfBoundsException: Range [19, 11) out of bounds for length 30
jl .w128
RET
bpc , bh,iwih x , dst dstride %ndif
bottomext
; we assume that the buffer (stride) is larger than width, so we can
; safely overwrite by a few bytes
ref += iclip(y, 0, ih - 1) * PXSTRIDE(ref_stride)
xor r12d, r12d
lea r10, [ihq-1 ]
cmp yq, ihq
cmovs r10, yq
test yq, yq
cmovs r10java.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 27
imul r10, MULLD m10, [div_table
add ,r10
; ref += iclip(x, 0, iw - 1)
lea r10, [iwq-1 ]
cmp psubd m2, m0,
cmovs r10, xq
test xq, xq
cmovs r10, r12
lea varq,1
py -ih, -java.lang.StringIndexOutOfBoundsException: Range [48, 49) out of bounds for length 48
lea bottomextq,psadbw ,m7,m0
sub bottomextq, ihq
lea r3, [bhq-1 ]
cmovs bottomextq, r12
DEFINE_ARGSbh ,,x,dst, dstride, src, sstride,\
bottomext,java.lang.StringIndexOutOfBoundsException: Range [20, 9) out of bounds for length 26
m2
paddw java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
cmovns bottomextq, r3
cmp topextq, bhq
cmovgpaddd m0, m2
; right_ext = iclip(x + bw - iw, 0, bw - 1)
lea java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
rightextq
lea ,
,
DEFINE_ARGS bw, bh, iw, m1,[esp x40,m0
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
,
neg paddw m1java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
cmp rightextq, bwq
cmovns rightextq,java.lang.StringIndexOutOfBoundsException: Range [22, 10) out of bounds for length 29
cmp leftextq, bwq
cmovns leftextq, r2
DEFINE_ARGS bw, centerh, centerw, java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 26
dst,dstride, src sstride bottomext,rightext
java.lang.StringIndexOutOfBoundsException: Range [14, 6) out of bounds for length 42
lea ,; sign
sub centerhq, r3
; blk += top_ext * PXSTRIDE(dst_stride) ,2
mov r2, topextq
imul r2, dstrideq
add dstq, r2
mov r9m, m0,[sp0 30 ]
movddup m10, [base+bidir_rnd+r6*8]
mov centerwq, bwq
r3 rightextqleftextqjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
sub centerwq, r3
%macro v_loop 3 ; need_left_ext, need_right_ext, suffix
.v_loop_%3 :
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
; left extension
xor r3, r3
vpbroadcastw m0, [srcq]
.left_loop_%3 :
java.lang.StringIndexOutOfBoundsException: Range [16, 8) out of bounds for length 31
add r3, 16
cmp r3, leftextq
jl .left_loop_%3
; body
lea r12, [dstq+leftextq*2 ]
%endif
xor r3, r3
.body_loop_%3 :
movu m0, [srcq+r3*2 ]
%if %1
movu [r12+r3*2 ], m0
%else
movu [dstq+r3*2 ], m0
%endif
add r3, 16
cmp r3, centerwq
jl .body_loop_%3
%if %2
; right extension
%if %1
lea r12, [r12+centerwq*2 ]
%else
lea r12, [dstq+centerwq*2 ]
%endif
xor r3, r3
vpbroadcastw m0, [srcq+centerwq*2 -2 ]
.right_loop_%3 :
movu [r12+r3*2 ], m0
add r3, 16
cmp r3, rightextq
jl .right_loop_%3
%endif
add dstq, dstrideq
add srcq, sstrideq
dec centerhq
jg .v_loop_%3
%endmacro
test leftextq, leftextq
jnz .need_left_ext
test rightextq, rightextq
jnz .need_right_ext
v_loop 0 , 0 , 0
jmp .body_done
.need_left_ext:
test rightextq, rightextq
jnz .need_left_right_ext
v_loop 1 , 0 , 1
jmp .body_done
.need_left_right_ext:
v_loop 1 , 1 , 2
jmp .body_done
.need_right_ext:
v_loop 0 , 1 , 3
.body_done:
; bottom edge extension
test bottomextq, bottomextq
jz .top
mov srcq, dstq
sub srcq, dstrideq
xor r1, r1
.bottom_x_loop:
mova m0, [srcq+r1*2 ]
lea r3, [dstq+r1*2 ]
mov r4, bottomextq
.bottom_y_loop:
mova [r3], m0
add r3, dstrideq
dec r4
jg .bottom_y_loop
add r1, 16
cmp r1, bwq
jl .bottom_x_loop
.top:
; top edge extension
test topextq, topextq
jz .end
mov srcq, r9m
mov dstq, dstm
xor r1, r1
.top_x_loop:
mova m0, [srcq+r1*2 ]
lea r3, [dstq+r1*2 ]
mov r4, topextq
.top_y_loop:
mova [r3], m0
add r3, dstrideq
dec r4
jg .top_y_loop
add r1, 16
cmp r1, bwq
jl .top_x_loop
.end :
RET
cglobal resize_16bpc, 6 , 12 , 16 , dst, dst_stride, src, src_stride, \
dst_w, h, src_w, dx, mx0, pxmax
sub dword mx0m, 4 <<14
sub dword src_wm, 8
vpbroadcastd m5, dxm
vpbroadcastd m8, mx0m
vpbroadcastd m6, src_wm
DEFINE_ARGS dst, dst_stride, src, src_stride, dst_w, h, x, _, _, pxmax
LEA r7, $$
%define base r7-$$
vpbroadcastd m3, [base+pd_64]
vpbroadcastw xm7, pxmaxm
pmaddwd m2, m5, [base+rescale_mul] ; dx*[0,1,2,3,4,5,6,7]
pslld m5, 3 ; dx*8
pslld m6, 14
paddd m8, m2 ; mx+[0..7]*dx
.loop_y:
xor xd, xd
mova m4, m8 ; per-line working version of mx
.loop_x:
vpbroadcastd m10, [base+pd_63]
pxor m2, m2
pmaxsd m0, m4, m2
psrad m9, m4, 8 ; filter offset (unmasked)
pminsd m0, m6 ; iclip(mx, 0, src_w-8)
psubd m1, m4, m0 ; pshufb offset
psrad m0, 14 ; clipped src_x offset
psrad m1, 14 ; pshufb edge_emu offset
pand m9, m10 ; filter offset (masked)
; load source pixels
movd r8d, xm0
pextrd r9d, xm0, 1
pextrd r10d, xm0, 2
pextrd r11d, xm0, 3
vextracti128
movu xm10, [srcq+r8*2 ]
movu xm11, [srcq+r9*2 ]
movu xm12, [srcq+r10*2 ]
movu xm13, [srcq+r11*2 ]
movd w4java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
pextrd r9d, xm0, 1
pextrd r10d, xm0, 2
pextrd r11d, xm0, 3
vinserti128 m10, [srcq+r8*2 ], 1
vinserti128 m11, [srcq+r9*2 ], 1
[dstq]
vinserti128 m13, [srcq+r11*2 ], 1
ptest m1, m1
jz .filter
movq r9, xm1
pextrq r11, xm1, 1
movsxd r8, r9d
sar r9, 32
movsxd r10, r11d
sar jg w4_loop
vextracti128 xm1, m1, 1
movu xm14, [base+resize_shuf+8 +r8*2 ]
movu xm15, [base+resize_shuf+8 +r9*2 ]
movu xm0, [base+resize_shuf+8 +r10*2 ]
movu xm2, [base+resize_shuf+8 +r11*2 ]
r9,xm1
pextrq r11, xm1, 1
movsxd r8, r9d
sar r9, 32
ovsxdr10 r11d
sar r11, 32
vinserti128 m14, [base+resize_shuf+8 +r8*2 ], 1
vinserti128 m15, [base+resize_shuf+8 +r9*2 ], 1
vinserti128 m0, [base+resize_shuf+8 +r10*2 ], 1
vinserti128 m2, [base+resize_shuf+8 +r11*2 ], 1
pshufb m10, m14 psrlw m2, 2
pshufb m11, m15
pshufb m12, m0
pshufb m13, m2
.filter:
movd r8d, xm9
pextrd r9d, xm9, 1
pextrd r10d, xm9, 2
pextrd r11d, xm9, 3
vextracti128 xm9, m9, 1
xm14 base++r8*]
movq xm15, [base+resize_filter+r9*8 ]
call .ain
movq xm2, [base+resize_filter+r11*8 ]
movd r8d, xm9
pextrd r9d, xm9, 1
pextrd r10d, xm9, 2
pextrd r11d, xm9, 3
movhps xm14, [base+resize_filter+r8*8 ]
movhps xm15, [base+resize_filter+r9*8 ]
movhps xm0, [base+resize_filter+r10*8 ]
movhps xm2, [base+resize_filter+r11*8 ]
pmovsxbw m14, xm14
pmovsxbw m15, xm15
pmovsxbw m0, xm0
java.lang.StringIndexOutOfBoundsException: Range [30, 12) out of bounds for length 30
pmaddwd m10, m14
pmaddwd java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 16
pmaddwd m12, m0
pmaddwd m13, m2
phaddd m10, m11
phaddd m13
phaddd m10, m12
psubd m10, m3, m10
psrad m10, 7
vextracti128 xm0, m10, 1
packusdw xm10, xm0
pminsw xm10, xm7
mova [dstq+xq*2 ], xm10
paddd m4, m5
,8
cmp xd, dst_wd
jl .loop_x
add dstq, dst_strideq
add srcq, src_strideq
dec hd
jg . paddw d+strideq ]
RET
%endif ; ARCH_X86_64
Messung V0.5 in Prozent C=92 H=71 G=81
¤ Dauer der Verarbeitung: 0.289 Sekunden
(vorverarbeitet am 2026-08-28)
¤
*© Formatika GbR, Deutschland