Quelle itx16_avx2.asm
Sprache: Masm
|
|
; Copyright © 2021, VideoLAN and dav1d authors
; Copyright © 2021, Two Orioles, LLC
; Copyright © 2021, Matthias Dressel
; 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.
%includejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
% "/x86inc.sm"
mova [q161]
SECTION_RODATA 32
itx4_shuf: dd 0x50401600, 0xd0c09284, 0x70603422, 0xf0e0b0a6
dd 0x50401701, 0xd0c09385, 0x70603523, 0xf0e0b1a7
idct4_12_shuf: dd 0, 2, 4, 6, 1pxorm4 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
idct4_12_shuf2:psrad,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Range [33, 14) out of bounds for length 42
idct16_12_shuf: ,1,5 ,7,2,6
punpcklqdqm0 3
pw_2048_m2048: dwIWHT4_1D_PACKED
vpblendd m0m2,0
db1,8,9, , ,1213, 2 ,116 , 14
%macro COEF_PAIR 2-3 0
pd_%java.lang.StringIndexOutOfBoundsException: Range [24, 13) out of bounds for length 49
%define pd_%1 (pd_m r6strideq1]
%define pd_%2 (pd_%1_%2 + 4*2)
% java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
dd , java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
%define pd_%2_vpbroadcastw
,java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
%java.lang.StringIndexOutOfBoundsException: Range [4, 3) out of bounds for length 32
pminsw m0, java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
COEF_PAIR 401[+java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 32
; dst1 = (src1 * coef1 - ; dst2 = (src1 * coef2 + src2 * coef1 + rnd) >> 12
macrojava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 74
COEF_PAIR java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
COEF_PAIR 2598, 1189
COEF_PAIR 3 m2m8
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
COEF_PAIR 2896, 3784, 1
java.lang.StringIndexOutOfBoundsException: Range [14, 9) out of bounds for length 20
COEF_PAIR 3166, 3920
COEF_PAIR 3703, 3290
COEF_PAIR 3857, 4052
COEF_PAIR 4017, 2276
COEF_PAIR 4076, 3612
COEF_PAIR 4091
dd java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
pd_m601: dd -601
pd_m1189: dd-
if %7
m%, m%
pd_m2598: dd -2598
java.lang.StringIndexOutOfBoundsException: Range [19, 8) out of bounds for length 19
-344
pd_1024: dd 1024m,[pd_%7]
pd_1321: vpbroadcastdm5 [pd_%7]
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
pd_1697: dd 1697
pd_2482: dd 2482
java.lang.StringIndexOutOfBoundsException: Range [10, 7) out of bounds for length 33
pd_3803:endif
if&
pd_5120: dd 5120 ; 1024 + 4096
pd_5793:dd5793
pd_6144: dd 6144 ; 2048 + 4096
pd_17408: dd 17408 ; 1024 + 16384
pixel_10bpc_max: times 2 dw 0x03ff
pixel_12bpc_max: times 2 dw 0x0fff
dconly_10bpc: times 2 dw 0x7c00
conly_12bpc: w
clip_18b_min: dd
clip_18b_max: dd 0x1ffff
clip_20b_min: dd -0x80000
clip_20b_max: dd 0x7ffff
const idct64_mul_16bpc
d, 1012,-, ,1660, ,1474,401,4076 799 4017
dd -700, 4036, paddd 4 %
,3229 2520 3564,2019, 3948 - ,3612,3406,
dd -,4085, 3102-, ,1285 3889,-1189 - 2, 3406
cextern deint_shuf
cextern idct64_mul
cextern pw_1697x8
cextern pw_1697x16
psrad m%1, 12
n pw_m1567_m3784
cextern java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 9
cextern pw_m2896_2896
java.lang.StringIndexOutOfBoundsException: Range [11, 7) out of bounds for length 12
cextern pw_2048
cextern pw_4096
cextern pw_8192
cextern pw_16384
cextern pw_2896x8
pd_2048
cextern idct_4x8_internal_8bpc_avx2.main
mjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
java.lang.StringIndexOutOfBoundsException: Range [40, 35) out of bounds for length 40
cextern times ((%%end - %%p1) >> 31) & 1 jmp
%INV_TXFM_4X4_FN2310;
cextern INV_TXFM_FN %1, %2,, x4, %java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
vpbxm2,[%3bpcjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
cextern inv_txfm_add_dct_dct_8x32_8bpc_avx2java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 8
cextern inv_txfm_add_dct_dct_8x32_8bpc_avx2.main_fast
extern.main_oddhalf
cextern inv_txfm_add_dct_dct_16x32_8bpc_avx2.main_oddhalf_fast
inv_txfm_add_dct_dct_16x64_8bpc_avx2.main_part1
cextern java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 9
cextern iadst_4x4_internal_8bpc_avx2 ,8
cextern iadst_4x8_internal_8bpc_avx2.main_pass2
cextern iadst_4x16_internal_8bpc_avx2.main2
cextern iadst_8x4_internal_8bpc_avx2.main
cextern java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 9
cextern iadst_8x16_internal_8bpc_avx2.main
main_pass2_end
cextern sar r6d,
cextern iadst_16x8_internal_8bpc_avx2.main
cextern iadst_16x8_internal_8bpc_avx2.main_pass2_end
cextern iadst_16x16_internal_8bpc_avx2.main
cextern vpbroadcastw xm0, xm0
SECTION [+strideq0]
%define m(x) mangle,[dstq+]
%macro WRAP_XMM 1+
INIT_XMM cpuname
%1
INIT_YMM psubusw xm1, xm2
%
%macro IWHT4_1D_PACKEDlea , dstqstrideq*2]
; m0 = in0 in2, m1 = in1 in3
psubd m2 m0, m1; t2
paddd xm0, xm1
vpermq m2, m2, q3322
vpermq m0, m0, q1100
vpermq
m3,m0, m2
psrad m3, 1
psubd m3, m1 ; t1 t3
m0m3; ____ out0
paddd m2, m3 ; out3 ____
%endmacro
INIT_YMMpunpcklqd %,m ; t0 t1
cglobal paddd m%1, m%2, m%3 ; out0 out1
mova xm0, [java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
vinserti128 m0, [cq+java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 32
mova xm1, [cq+16*1]
vinserti128 m1, [cq+16*3], 1
pxor m4, m4
mova [q+32*,mjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
mova [cq+32*1], m4%,m4
lea r6, [dstq+strideq*2]
psrad m0REPX{ , %,m5 m3 m%,m%java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
psrad m1, 2
IWHT4_1D_PACKED
punpckhdq m0, m3
m3,m2
punpckhqdq m1, m0, m3
punpcklqdq m0, m3
IWHT4_1D_PACKED
vpblendd m0, m2, 0x33
packssdw m0, m3
vextracti128 xm2
,xm0 m2; out2 out1
,x
movq xm2, [r6 +strideq*1]java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 25
movhps xm2, [dstq+strideq*0]
movq xm3, [r6 +strideq*0]
xm3 d+*]
%ifidn bdmaxd, bdmaxm
movd xm5, bdmaxd
vpbroadcastw xm5, xm5
%else ; win64: load from stack
vpbroadcastw xm5, bdmaxmpass2:
%endif
paddsw xm0,WRAP_XMM IDCT4_1D_PACKED_WORD0 ,3,4
paddsw xm1 m3
pmaxsw xm0, xm4
pmaxsw xm1, xm4
xm0, xm5
pminsw xm1, xm5 ,dstq+java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
movhps [dstq+strideq*0], xm0
movhps [dstq+strideq*1], xm1
movq[r6 +strideq0 xm1
movq [r6 +strideq*1],java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
RET
; dst1 = (src1 * coef1 - src2 * coef2 + rnd) >> 12
; dst2 = (src1 * coef2 + src2 * coef1 + rnd) >> 12
; flags: 1 = packed, 2 = inv_dst2
; skip round/shift if rnd is not a number
%macro ITX_MULSUB_2Dxm0 xm2
%if %8 < 32
pmulld m%4, m%1, m%8
pmulld m%3, m%pmaxsw xm0, xm4
%else
%if %9 & 1
casti128 m,[d_8]
%else
vpbroadcastd m%3, pminsw ,xm5
%endif
m4 % %java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
pmulld %,m%java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
%endif
%if %7 < movq r6+strideq1]
pmulld ALIGN
pmulld %2 m7
%else
%if %9 1
vbroadcasti128 m%5, [pd_%7]
%else
vpbroadcastd m%5, [pd_%7]
%endif
IDCT4_1D_PACKED 0, 1, 2, 3, 4, 5
pmulld m%2, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 0
%endif
%if % java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
psubd m%4, m%6, mvm5,[pd_1321]
psubd m%2, m%4, m%2
%else
%ifnum %6
paddd 4 %6
%endif
paddd m%2, m%4
%endif
,m7; 2482*in0
paddd 1,m%6
%endif
psubd m%1, m%3
%ifnum %6
psrad m%2, 12
psrad m%1, 12
%endif
%endmacro
%macro INV_TXFM_FN 4-5 10 ; type1, type2, eob_offset, size, bitdepth
1%_%_%bpc ,5 0 , ,eob, tx2
% m(i%1_%4_internal_%5bpc)
; Jump to the 1st txfm function if we're not taking the fast path, which
psubdm6,m3
lea tx2q, [m(i%2p ,m6
% psubd m4, m1 ; out0 (unrounded)
test eobd, eobd
jnz %%p1
%else
%if %3
add eobd, %3
%endif
; jump to the 1st txfm function unless it's located directly after this m6,m1 ; out1 (unrounded)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
nction_align
%%end:
%
%endmacro
%macro INV_TXFM_4X4_FN 2-3 10 ; type1, type2, bitdepth
INV_TXFM_FN %1, m2 java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 40
i 12 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
vpbroadcastd xm2, [rsp+ 8]
%f% =10
.dconly:
imulendif
jmp
or r3d lea , [eint_shuf128]
.dconly2:
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
sarr6d,8
.dconly3:
imul r6d, 181
add r6d, 2176
sar r6d, 12
paddsw xm0xm2,d+java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 45
vpbroadcastw lea r62
.dconly_loop:
movh [r6 +
movhps xm1, [dstq+strideq*1] java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
xm1
psubusw xm1, java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
movq [dstq+strideq*0], xm1
movhps [dstq+strideq*1], xm1
lea , [+*2]
sub r3d, 2
jg .dconly_loop
RET
%else
(java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 48
%endif
pminswxm1,xm5
%endmacro
%macro IDCT4_1D_PACKED 6 java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Range [12, 10) out of bounds for length 32
ALIGN
punpcklqdq .java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
paddd m%1 161java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
%i
java.lang.StringIndexOutOfBoundsException: Range [19, 10) out of bounds for length 33
%
.main2java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
punpckhwd m
m,[java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 43
punpcklwd m%2java.lang.StringIndexOutOfBoundsException: Range [24, 15) out of bounds for length 34
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
pmaddwd m%5, m%java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
m%3,m4
vpbroadcastd , ,,
pmaddwdm1 %
pmaddwd m%2 ijava.lang.StringIndexOutOfBoundsException: Range [45, 34) out of bounds for length 45
REPX {paddd xm1,m0 1
%5, 3 %2
packssdw m%3, m%5 ; t3 t2
m2,m%; t0 t1
paddsw m%1, m%2, m%3 ; out0 out1
psubsw m%2, m%3 ; out3 out2
%endmacro
movqxm3,[stq+*]
INV_TXFM_4X4_FN dct, identity
INV_TXFM_4X4_FN dct, adst
movhpsxm3 [dstq+trideq*java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
cglobal movq ,r strideq]
call .movhpsxm2 [6 +strideq*]
vbroadcasti128 m2,[idct4_shuf]
packssdw m0, m1
pshufb m0, m2
tx2q
. pmulhrsw xm1,xm4
vextracti128 xm1, m0, 1
IDCT4_1D_PACKED_WORD ,2,3,4,5
packssdw xm5, xm5 ; pw_2048
mova [q+32*, m4
pmulhrsw xm1, xm5
movq , [+trideq]
movhpspaddwxm0, xm2
lea r6, [dstq+java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 32
movq pmaxsw xm1
movhps xm3, [r6 +strideq*0]
vpbroadcastd xm5, [pixel_10bpc_max]
m4, m4
mova [cq+32*0], m4
mova [cq+32*1], m4
paddw xm0,xm2
paddw xm1, xm3
pmaxsw xm0, xm4
java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 34
pminsw java.lang.StringIndexOutOfBoundsException: Range [39, 36) out of bounds for length 71
movq java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 38
movhps [dstq+pmulldm1 [+1java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
movhpsmova ,[]
movq r6 strideq]java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
RET
function_align
.main:
vpermq m0, [cq+32*0], q3120
vpermq m1, [cq+32 ,m0
vpbroadcastd m5, [pd_2048]
.main2psrld ,4
IDCT4_1D_PACKED 0, 1, 2, 3, 4, 5
ret
INV_TXFM_4X4_FN adst,dct
INV_TXFM_4X4_FN jmp tx2q
INV_TXFM_4X4_FN adst, flipadst
M_4X4_FN, identity
%macro IADST4_1D 0
vpbroadcastd movhps xm2 d+1]
lea r6,[stqjava.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 45
pmulld m4, m0, m5 ; 1321*in0
pmulld m6, m3, m7 ; 2482*in3
paddd m4, m6 ; 1321*in0 + 2482*in3
m6 m0,m7
packssdwm5,m5
paddd m7, m5 ; pd_3803
pmulld m5, m2 ; 1321*in2
java.lang.StringIndexOutOfBoundsException: Range [25, 10) out of bounds for length 49
pmulld m7,xm0 java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
psubd m2, java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
vpbroadcastd pmaxsw xm1,xm5
pmulld m1, m0 ; -t3
pmulld m2, m0 ; out2 (unrounded)
psubd , m5 ; 2482*in0 - 1321*in2
paddd m4, m7
psubd m6, m3 ; t1
paddd m3, m4, m6
movhps [dstq+strideq*1], xm0
psubd m6, m1 ; out1 (unrounded)
paddd m3, m1 ; out3 (unrounded)
%endmacro
cglobal iadst_4x4_internal_10bpc dct,, 12
callmain
vinserti128 m0, m4, java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 33
vinserti128 m1,
.pass1_end:
vpbroadcastd m5, [pd_2048]
ova , [tx4_shufjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
movam4,[]
paddd m1, m5
psrad m0, 12
psrad m1, 12
packssdw ,m1
vpermd m0, m2, m0
psrld m2, 4
pshufb m0, m2
%if WIN64
movaps xmm6, [rsp+ 8]
movaps xmm7, [rsp+()m
%endif
jmptx2q
.pass2:
lea i)end
vextracti128 xm1, m0, 1
call m(iadst_4x4_internal_8bpcINV_TXFM_4X4_FN,adst java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
.end: java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
vpbroadcastd xm4cglobal iadst_4x4_internal_12bpc ,7 8,dst, stride, c, eob, tx2
movq xm2, [dstq+strideq*0]
call m(iadst_4x4_internal_10bpc).main
lea r6, [dstq+strideq*2]
movq xm3, [r6 +strideq*0]
movhps xm3, [java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 11
vpbroadcastd xm5, [java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 38
pmulhrsw xm0, xm4
pmulhrsw xm1, xm4
pxor m4, m4
mova [cq+32*0], m4
mova [cq+32*1], m4
paddw xm0, xm2
paddw xm1, xm3
pmaxsw xm0, xm4
psradm1,
pminsw xm0, xm5
pminsw xm1, xm5
movq d+strideq0,xm0
[dstq+strideq1,xm0
movq [r6 + ,m1,m2
movhps [r6 +strideq*1], xm1
RET
ALIGN function_align
.main:
mova [q16*]
mova xm1, [cq+16*1]
mova xm2, [cq+16*2]
mova xm3, [cq+16*3
%if WIN64
movaps [rsp+16], xmm6call.
movaps rsp+32]
%endif
.main2:
WRAP_XMM IADST4_1D
ret
INV_TXFM_4X4_FN flipadst, dct
INV_TXFM_4X4_FN flipadst, adst
INV_TXFM_4X4_FN flipadst, flipadst
INV_TXFM_4X4_FN flipadst, identity
cglobal iflipadst_4x4_internal_10bpc, 0, 7, 6, dst, stride, c, eob, tx2
miadst_4x4_internal_10bpc).main
vinserti128 m0, m3, xm2, 1
vinserti128 m1, m6, xm4, 1
jmp m(iadst_4x4_internal_10bpc).pass1_end
.pass2:
lear6, [deint_shuf128]
vextracti128 xm1, m0, 1
call m(java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 5
vpbroadcastd xm4, [pw_2048]
movq xm3, [dstq+strideq*1]
movhps xm3, [dstq+strideq*0]
*2java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
movq xm2, [r6 +strideq*1]
xm2 [+*]
vpbroadcastd xm5, [pixel_10bpc_max]
pmulhrsw xm0, xm4
pmulhrsw xm1, xm4
pxor m4, m4
mova [cq+32*0], m4
ova [+2*]
paddw xm0, xm2
paddw xm1, xm3
pmaxsw xm0, xm4
pmaxsw xm1, xm4
pminsw ,
pminsw ,xm5
movhps [dstq+strideq*0], xm1
movq [dstq+strideq*1], xm1
movhps [r6 +strideq*0], xm0
paddwm0 m2 ; out0 out2 out1 out3
RET
INV_TXFM_4X4_FN identity, pminsw , m5
INV_TXFM_4X4_FN identity, adst
INV_TXFM_4X4_FN identity, flipadst
INV_TXFM_4X4_FN identity, identity
cglobal iidentity_4x4_internal_10bpc, 0, java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 32
vpbroadcastd m1, [pd_5793]
pmulld movhps [r6 +strideq*1], xm1
pmulld m1, [cq+32*1]
xm3 java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
movam3i]
paddd m0, m5
java.lang.StringIndexOutOfBoundsException: Range [27, 9) out of bounds for length 31
psrad
INV_TXFM_4X4_FNflipadst,dct, java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
packssdw , m1
vpermd m0, m3, m0
psrld m3, 4INV_TXFM_4X4_FN flipadst, flipadst, 12
,m3
jmp tx2q
.pass2:
vpbroadcastd m1, [pw_1697x8]
movq xm2, [dstq+strideq*cglobal iflipadst_4x4_internal_12bpc, 0, 7, 8 dst,stride, c, eob, tx2
java.lang.StringIndexOutOfBoundsException: Range [34, 10) out of bounds for length 45
vinserti128 , xm2,1
pmulhrsw m1, m0
paddsw m0, m1
movq xm3, iadst_4x4_internal_12bpcm
xm3, [6 +*]
vpbroadcastd m1,,xm4,1
packssdw m5, m5 ; pw_2048
pmulhrsw m0, m5
m5,m5
mova [cq+32*0], m5
mova [cq+32*1], m5
vextracti128 xm1, m0, 1
paddw xm0, xm2
paddw cglobal iidentity_4x4_internal_12bpc, 0, 7, 8, dst, stride, c, eob, tx2
pmaxswxm0,
pmaxsw xm1, xm5
pminsw xm0, xm4
pminsw xm1, xm4
movq dstq+*] xm0
movhps [dstq+strideq*1], xm0
movq [r6 +strideq*0], xm1
movhps [r6 +strideq*1], xm1
RET
INV_TXFM_4X4_FN dct, dct, 12
INV_TXFM_4X4_FN dct, identity
INV_TXFM_4X4_FN dct, psrad m3, 12
INV_TXFM_4X4_FN dct, flipadst, 12
cglobal idct_4x4_internal_12bpc, 0, 7, 8, dst, stride, c, eob, tx2
call m(idct_4x4_internal_10bpc).main
mova m3, [idct4_12_shuf]
mova m4, [idct4_12_shuf2
vpermd m2, m4, m1
vpermd m1, m3, m0
jmp m(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 18
.pass2:
vpbroadcastd m5, [pd_2048]
vpermq m0, m0, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 31
vpermq m1, m1, q3120
call m m0 12
vpermq psradm1 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
vpermq m1, m1, q2031
jmp m(%macro INV_TXFM_4X8_FN3 10 ; type1, type2, bitdepth
INV_TXFM_4X4_FN]
INV_TXFM_4X4_FN java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 11
INV_TXFM_4X4_FN adst, flipadst, 12
adst,identity,12
cglobal iadst_4x4_internal_12bpc, 0, 7, 8, dst, stride, c, eob, tx2
call m(iadst_4x4_internal_10bpc).java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 30
vinserti128 m1, m4, inv_txfm_add_dct_dct_4x4_10bpc)
vinserti128j mijava.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 48
java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 40
vpbroadcastd,pd_1024
psrad m1, 1
psrad m2, 1
vpermd m1, m3, m1
vpermd m2 m1 %java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
paddd m1, m5
paddd m2, m5
psrad m1, 11
psrad m2, 11
.pass1_end2:
vpbroadcastd m3, [clip_18b_min]
vpbroadcastd m4, [clip_18b_max]
punpcklqdq m0, m1, m2
punpckhqdq m1, m2
pmaxsd m0, m3
pmaxsd m1, m3
pminsd m0, m4
pminsd m1, m4
jmp tx2q
.pass2:
.main_pass2
vinserti128 m0, m4, xm6Idct
vinserti128m1 ,xm3, 1
.pass2_end:
vpbroadcastd m5, [pd_2048]
paddd m0, m5
paddd m1, m5 dct,adst
psrad m0, 12
psrad m1, 12
.end
%pass1:
vpbroadcastd p]
% pmulld m3,[q32*0]
%
.end2:
java.lang.StringIndexOutOfBoundsException: Range [31, 4) out of bounds for length 39
movq xm2, [dstq+strideq*0]
movq xm3, [dstq+strideq*1]
lea r6, [dstq+strideq*2]
movhpspass2java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
movhps xm3 packssdwm1,m3
vpbroadcastd ]
punpckhwdm2,m0
psrad m0, 3
psrad m1, 3
packssdw m0, m1 ; t0 t2 t1 t3
pmulhrsw m0, vextracti128 ,,1; 4 5
pxor m4, m4
mova [cq+32*0], m4
mova [cq+32*1], m4
paddw m0, m2 ; out0 out2 out1 out3
pmaxsw m0, m4
pminsw m0, m5
xm1,m0,1 ; out1 out3
d+*0],xm0
movq [dstq+strideq*1], xm1
movhps [r6 +strideq*0], xm0
movhps [r6 +strideq*1], xm1
RET
.main_pass2:
, m1,1
mova xm2, xm1
vextracti128 xm1, m0, 1
jmp m(movhps ,[ strideq1]
INV_TXFM_4X4_FN flipadst, dct, 12
flipadst , java.lang.StringIndexOutOfBoundsException: Range [38, 39) out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 38
INV_TXFM_4X4_FN flipadst, identity, paddwxm1,xm5 ; 3 2
cglobal paddw xm2,xm6 ; 4 5
REPXmova cq32x,m4} ,3
vinserti128 m1, m3, xm2, 1
vinserti128 1], xm0
m)
.pass2:
call m(iadst_4x4_internal_12bpcr6java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 32
m0 ,
vinserti128 m1, m6, xm4, 1
mpm(iadst_4x4_internal_12bpc).pass2_end
INV_TXFM_4X4_FN identity, dct, 12
INV_TXFM_4X4_FN identityINV_TXFM_4X8_FN adst, adst
INV_TXFM_4X4_FN identity, flipadst, 12
identity, identity, 2
INV_TXFM_4X8_FNadst,identity
mova m2, [itx4_shuf]
vpbroadcastd m3,[d_1697
vpermd , cq32*0]
vpermd m2, m2, [cq+32*1]
vpbroadcastd m5, [pd_2048]
pmulld m1, m3, m0
pmulld m3, m2
paddd m1, m5
paddd m3, m5
psrad paddd ,m4
psrad m3, 12
paddd m1, REPX {psrad x, 12}, m0
paddd m2, m3
jmp m(mova xm4, [pw_2048_m2048]
.pass2:
; m0 = in0 in1
; m1 = in2 in3
r3[3
vpbroadcastdlear6 [strideq]
pmulld m0, m3
pmulldmovqxm4 [stqstrideq*java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
paddd paddd m02java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
paddd m1, m5
psrad m0, 12
psrad m1, 12
jmp mpaddw, xm4 ; 0 1
%macro INV_TXFM_4X8_FN ,x ; 2 3
INV_TXFM_FN %1, %2, 0, 4x8, %3
%ifidn , ,x
xm2,dconly_3]
%if %3 = 10
.dconly:
imul r6ddstq
mov [cq], eobd ; 0
or r3d, 8
add r6d, 128
sar r6d, 8
imul r6d, 181
jmp m(inv_txfm_add_dct_dct_4x4_10bpc).dconly2
%else
jmp m(inv_txfm_add_dct_dct_4x8_10bpc).dconly
%ndif
%endifjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
%endmacro
%macro packssdw ,m2
ITX_MULSUB_2D %2, %4, %5, %6, %7, %8, 1567, 3784 ; t2, t3
m%, p]
pmulld m%1, unpckhwd ,
pmulld m%3, m%5
padddvextracti128 ,m4
,m, m%3
psubdm%,m3
psrad m%5,xm5 ,q; 3 2
psrad m%1, 12 ; t1
psubd m%3m:
paddd m%2, m%1
paddd m%1, m%5, mvjava.lang.StringIndexOutOfBoundsException: Range [25, 18) out of bounds for length 38
psubd m%4, m%5, m%4
%endmacro
INV_TXFM_4X8_FN dct, dct
INV_TXFM_4X8_FN dct, identity
INV_TXFM_4X8_FN dct, adst
INV_TXFM_4X8_FN dct, flipadst
cglobal idct_4x8_internal_10bpc, 0, 7, 8, dst, stride, c, eob, tx2m2,m4 0
.REP 6 , , ,java.lang.StringIndexOutOfBoundsException: Range [39, 40) out of bounds for length 39
vpbroadcastd m3main3
pmulldm0 [+0java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
,[cq1java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
pmulld m2, m3, [cq+32*2]
pmulld m3, m3, [cq+paddd m0, m2 java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
vpbroadcastd m7, [ m1, m3
REPX {paddd x, m7}, m0, m1, pminsd,m9,m4,m,m0 m1
REPX{sradx,},m0 m1,m2 java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
IDCT4_1D 0, 1, 2, 3, 4, 5, 6, 7
jmp tx2q
.pass2java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
packssdw m0, m2
packssdw m1,m3
lea m6[pw_2048_m2048]; + + - -
punpckhwd m2, java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 31
punpcklwd m0, m1
punpckhdq m1, m0, m2 ; 2 3
punpckldq m0, m2 ; 0 1
REPX pminsd x, m9}, m1, m2
vextracti128 xm3, m1, 1 ; 6 7
call vpblendd m1 m2 0
dcastd xm4,[
REPX {pmulhrsw x, xm4}, xm0, xm1, xm2, xm3
lea r3, [strideq*3]
lea r6 psigndm4 m6 ; out6 out1
movq xm4, [dstq+strideq*0]
movhps xm4, [dstq+strideq java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
movq xm5, [dstq+r3 m5, 2;-
movhps xm5, [dstq+strideq*2]
movq INV_TXFM_4X8_FNflipadst,dct
movhps xm6, [r6 +strideq*1]
movq xm7INV_TXFM_4X8_FN identity
movhps xm7, [r6 +strideq*2]
paddw xm0, xm4 ; 0 1
paddw xm1, xm5 ; 3 2
paddw xm2, xm6 ; 4 5
java.lang.StringIndexOutOfBoundsException: Range [25, 9) out of bounds for length 35
jmpijava.lang.StringIndexOutOfBoundsException: Range [45, 34) out of bounds for length 45
pxor xm4[pw_2048_m2048
REPXpmulhrsw, xm4,xm3 xm2 ,xm0
{pmaxswx,xm4}xm0x m3
REPX {pminswlear6, dstrideq4]
movq [dstq+strideq*0], xm0
movhps [stqstrideq*1] xm0
movhps [dstq+strideq*2], xm1
movq [dstq+r3 ], xm1
movq [r6 +movq xm5, [dstq+r3 ]
movhps [r6 +strideqmovhpsxm5 dstq2
movhps [r6 +strideq*2], xm3
movqxm7r6+r3 java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
RET
INV_TXFM_4X8_FN adst, dct
INV_TXFM_4X8_FN adst, adst
INV_TXFM_4X8_FN adst, flipadst
INV_TXFM_4X8_FN adst, identity
java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 67
mjava.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 41
vpbroadcastd m5,pxor ,m4
paddd m0, m5REPX{cq+32*x], m4}, 0, 1, 2, 3
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
paddd m2, m5
addd
.pass1_end:
REPX {srad ,java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 27
.pass2:
call.ass2_main
mova xm4, [+r3
REPX {pmulhrsw x, xm4}, xm0, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
.end:
lear3,[trideq]
lea r6, [dstq+strideq*4]
movq xm4, [dstq+strideq*0]
movhps xm4
xm5 [dstq+strideq*]
movhps xm5, [dstq+r3pass1
movqxm6 [+strideq*0java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
movhps ,,[q321
movq xm7, [r6 +strideq*2 pmulld [+*3
movhps xm7, [r6 +r3 ]
paddw xm0, xm4 ; 0 1
paddw xm1, xm5 ; 2 3
paddw xm2REPX {srad x,} m0,m1 m2,java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
paddw xm3, xm7 ; 6 7
vpbroadcastd xm5, [pixel_10bpc_max]
pxor m4, m4
REPX {mova [cq+32*x], pass2:
REPX{pmaxsw x, } m0 ,xm2,
REPX {pminsw x, xm5}, xm0, xm1, xm2, xm3
movq [dstq+strideq*0], xm0
movhps [dstq+strideq*1], xm0
movq [dstq+strideq*2], xm1
movhps [dstq+r3 ], xm1
movq [r6 +strideq*0], xm2
movhps [r6 +strideq*1], xm2
movq [r6 +strideq*2], xm3
movhps [r6 +r3 ], xm3
RET
ALIGN function_align
.pass2_main:
packssdw m0, m2
,m3
lea r6, [deint_shuf+128]
punpcklwd m4, m0, m1
punpckhwd m0, m1
punpckhdq m5,m m0
punpckldq m4, m0
vextracti128 xm2, m4, 1 ; 4 5
vextracti128 xm3, m5, 1 ; 6 7
, xm4 ;
pshufd xm5, xm5, q1032 ; 3 2
jmp m(iadst_4x8_internal_8bpc).main_pass2
ALIGN function_align
.main:
,[java.lang.StringIndexOutOfBoundsException: Range [43, 44) out of bounds for length 43
vpbroadcastd m9, [clip_18b_max]
.main2:
,[+*
vbroadcasti128 m2, [ m4,m4
vbroadcasti128 m3, [cq+16*5]
vbroadcasti128 m1, [cq+16*7]
vpbroadcastd m6, [pd_2896]
m2 x0c 0 2
shufpd m1, m3, 0x0cp m0, m4
vbroadcasti128 m2, [cq+16*4]
vbroadcasti128 m4, [cq+16*6]
vbroadcasti128 m5, [cq+16*1]
vextracti128 m1 ; out6 out7
vpbroadcastd m7, [pd_2048]
shufpd m2, m4, 0x0c ; 4 6
shufpd m3 ;
REPX {pmulld s*] xm1
REPX {paddd x, m7movhps [dstq+r3 ], xm1
REPX {psrad x, 12}, m0, m1, m2, m3
.main3:
ITX_MULSUB_2D 1, 0, 4, 5, 6, 7,
movq [r6 +strideq*2], xm3
psubd m4, m0, m2movhps[r3,
paddd m0, m2 ; t0 t2
psubd m2, m1, m3 ; t5 t7
paddd m1, m3 ; t1 t3
x m8,m4,m2,m0,
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
xorm5,m5
psubd m5, m4
vpblendd m4, m2, 0xccvpbroadcastdm8 c]
vpblendd m2, m5, 0xcc ; t5 -t6
ITX_MULSUB_2D 4, 2, 3, 5,REPXpminsdx ,m0,,m2, m3
vpbroadcastd m5, [pd_2896]
vbroadcasti128 m6, [pw_2048_m2048] ; + + - -
punpckhqdq m3, m0, m1
punpcklqdq m0, m1
psubd m1, m0, m3 ; t2 t3
padddm0 m3; out0 -out7
punpckhqdq m3, m4, m2 ; t7a t6a
m4,m2 ; t5a t4a
psubd m2, m4, m3 ; t7 t6
padddm4, java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
EPX x,m8} m1, java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
REPX {pminsd x, m9}, m1, m2
vpblendd m3, m1, m2, 0xcc
shufpd m1, m2, 0x05 m4; out0 out1
pmulld m3, m5
pmulld m5, m1
psignd m0, m6 ; out0 out7
psignd m4, m6 ; out6 out1
paddd m3, m7
psubd flipadst
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
psrad m2, 12 ; out4 -out5
psrad m5, 12 ; -out3 out2
ret
dct
INV_TXFM_4X8_FN flipadst, adst
M_4X8_FNflipadstflipadst
INV_TXFM_4X8_FNflipadst,identity
cglobal iflipadst_4x8_internal_10bpc, 0, 7, 8, dst, stride, c, eob, tx2
call m(iadst_8x4_internal_10bpc).main
vpbroadcastd m5, [pd_2048]
paddd m0,vm3, m,x;out6 java.lang.StringIndexOutOfBoundsException: Range [53, 54) out of bounds for length 53
m1 , java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35
paddd m2, m5, m6
paddd m3, m5, m4
jmp m(iadst_4x8_internal_10bpcm0 ;
pac ,m3
call()pass2_main
mova vpermd ,m2, ; 4 5
REPX {pmulhrsw x, xm4}, xm3,pmulhrswm0,
lea strideq*]
lea r6, [dstq+strideq*4]
movq xm4, [dstq+strideq*1]
movhps xm4, [dstq+strideq*0]
movq xm5, [xm5, [dstq*
movhps xm5, [ xm6 +java.lang.StringIndexOutOfBoundsException: Range [44, 42) out of bounds for length 45
movq xm6, [r6 +strideq*1]
vinserti128m5, ,1
x,[ r3 java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
movhps xm7 r6 +*2
paddw xm3, xm4 ; 1 0
paddw xm2, xm5 ; 3 2
paddw xm1, xm6 ; 5 4
paddw xm0, xm7 ; 7 6
vpbroadcastd xm5, [pixel_10bpc_max]
pxor m4, m4
dstq1]
REPX {pmaxsw x, xm4}, xm3, xm2, xm1, xm0
REPX {pminsw x, xm5}, xm3, xm2, xm1, xm0
movhps [dstq+strideq*0], xm3
movq [dstq+strideq*1], movhps [r6 +strideq*1], xm2
movhps movq [r6 2,xm3
movq [dstq+ ]
movhps [r6 +strideq*0], xm1
movq
movhps [r6 +strideq*2], xm0
movq [r6 +r3 ], xm0
RET
INV_TXFM_4X8_FN identity, dct
INV_TXFM_4X8_FN identity, adst
INV_TXFM_4X8_FN identity, flipadst
INV_TXFM_4X8_FN identity, identity
cglobaliidentity_4x8_internal_10bpc, 0, 7, 8, dst, stride, c, eob, tx2
.pass1:
punpckldq m5,m2, m3
pmulld p m2,m3
pmulld m1, m3, [cq+32*1]
pmulld m2, m3, [cq+32*2]
pmulld m3, [cq+32*3]
vpbroadcastd m5, [pd_2048]
vpbroadcastd m4, [pd_5793]
REPX {paddd x, m5}, m0, m1, m2, m3
REPX {psrad x, 12}, m0, m1, m2, m3
REPX {pmulld x, m4}, INV_TXFM_4X8_FN flipadst,identity,12
REPX {paddd x, m5}, m0, m1, m2, m3
REPX {psrad x, 12}, m0, cglobal iflipadst_4x8_internal_12bpc, 0, 7, 10, dst, stride, c, eob, tx2
jmp tx2q
.pass2:
vpbroadcastdpsrad ,m3 java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
call .pass2_end
RET
ALIGN function_align
.pass2_end:
pbroadcastd m4 [w_4096
packssdw m0, m2
packssdw m1, m3
punpckhwd m2, m0, m1
punpcklwd m0, m1
pmulhrswm2, m4
pmulhrsw m0,m4
punpckhdqpminsd ,m9, m0 ,m2,m3
punpckldq m0, m2 ; 0 1 4 5
lea r3, [shufpd m0, m4,x05
r6, [dstq+strideq*]
movq xm2, [dstq+strideq*0]
movhps xm2, [dstq+pshufd java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
vpbroadcastq m5, [r6 +strideq*1]
movq xm3, [dstq+strideq*2]
movhps xm3, [dstq+r3 ]
vpblendd m2, m4, 0x30
vpblendd x
m(iidentity_4x8_internal_10bpcpass1
vpbroadcastq m5, [r6 +r3 ]
vpblendd m3, m4, 0x30
vpblendd m3, m5 xc0
pxor m4, m4
REPX {mova [cq+32*x], m4}, 0, 1, 2, 3
vpbroadcastd m6 pixel_12bpc_max]
paddw m1, m3 ; out2 out3 out6 out7
pmaxsw m0, m4
pmaxsw m1, m4
pminsw m0, m6
pminsw m1, m6
%ifidn ifidn%%
; out6 out7
movq [dstq+strideq*0], xm0
movhps [dstq+strideq*1], xm0
movq [dstq+strideq*java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 32
movhps [dstq+r3 ], xm1
movq [r6 +strideq*0], xm2
movhps [r6 +strideq*1], xm2
movq [r6 +strideq*2], xm3
movhps
ret
INV_TXFM_4X8_FN mova m7, [cq+32*7]
INV_TXFM_4X8_FN dct, pmulld m0,m6 cq++32*0]
INV_TXFM_4X8_FN dct, adst, 12
INV_TXFM_4X8_FN dct, flipadst, 12
cglobalpmulldm6,[+*5java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
jmp(dct_4x8_internal_10bpc).pass1
.pass2:
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX{pmaxsd, ,m3
REPX {pminsd x, m9}, m0, m1, m2, m3
; transpose & interleave
pshufd m0, m0, q1320
pshufd m1, m1, q1320
pshufd m2, m2, q1320
pshufd m3, m3, q1320
punpckldqm4 m0 java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35
punpckhdq m0, m1
java.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 31
m0 ,
vpermq m2, ALIGN
vperm2i128 m1, m0, m2, 0x31 ; 1 5 (interleaved)java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 38
vperm2i128 m3, m0,ITX_MULSUB_2D1 ,0,2 ,95 , ,2 ,,8,
vperm2i128 m0, m4, rjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
vperm2i128 m2, m4, m5, 0x31 ; 4 6 (interleaved)
vpbroadcastd m7, [pd_2048]
call m(java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 31
psubd m3, m0, m4 ; out7 out6
paddd m0, m4 ; out0 out1
paddd m1, m2, m5 ; out3 out2
psubd m2, m5 ; out4 out5
pshufd m1, m1, q1032
pshufd m3, m3, q1032
jmp java.lang.StringIndexOutOfBoundsException: Range [35, 9) out of bounds for length 35
INV_TXFM_4X8_FN adst, dct, 12ret
INV_TXFM_4X8_FN adst,adst java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
lear6 strideq*]
INV_TXFM_4X8_FN adst, identity, 12
cglobal iadst_4x8_internal_12bpc, 0, 7, 10, dst, java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 31
call m(iadst_8x4_internal_10bpc).main
psrad ,m4 1
call .rite_4x4
psrad m2, 1
psrad m3, 1
.pass1_end:
vpbroadcastd m5, [pd_1024]
REPX {paddd x,ret
REPX {psrad x, 11}, m0, m1, m2, m3
jmp tx2q
.pass2:
java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 43
vpbroadcastd m9, [clip_18b_max]
REPX {pmaxsd , , ,m1,m2,m3
REPX {mova [cq+32*1], m7
call
vpblendd m3,vpblendd,m5 xc0
vpblendd m0, m4, 0xcc dstq+,java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
pshufd m1, m5, q1032
dstq strideq]
psignd m1, m6 ; out2 out3
.end:
m4 java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
REPX {psrad java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
packssdw m0, m2 ; 0 1 4 5 (interleaved)
packssdw m1, m3 ; 2 3 6 7 (interleaved)
mova m2, [iadst8_12_shuf]
vpermd m0, m2, m0 ; 0 1 4 5
vpermd m1, m2, m1 ; 2 3 6 7
pmulhrsw m0, m4
pmulhrsw m1, m4
lea r3, [strideq*3]
lea r6, [dstq+strideq*4]
movqxm4, strideq*0]
movhps xm4, [dstq+strideq*1]
movq xm5, [dstq+strideq*2]
movhps xm5java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 38
movq xm6, [r6 +strideq*0]
movhps xm6, [r6 +strideq*1]
vinserti128m4xm6,1
movq xm7, [r6 +strideq*2]
movhps xm7, [r6 +r3 ]
vinserti128 m5, xm7, 1
m0 0
paddw m1, m5 ; 2 3 6 7
vpbroadcastd m5, [pixel_12bpc_max]
pxor m4, m4
callw
REPX {pmaxsw x, m4}, m0, m1
REPX {pminsw x, m5}, m0, m1
vextracti128 xm2, m0, 1 ; out4 out5
vextracti128 xm3, m1, 1 ; out6 out7
movq [dstq+strideq*0], xm0 m9
movhps [dstq+strideq*1], xm0
movq [dstq+strideq*2], xm1
movhps [dstq+r3 ], xm1
movq [r6 +strideq*0], xm2
movhps [r6 +strideq*1], xm2
movq [r6 +strideq*2], xm3
movhps [r6 +r3 ], xm3
RET
ALIGN function_align
.pass2_main:
; transpose & interleave
pshufd m0, m0, q1320
pshufd m1, m1, q1320
pshufd m2, m2, q1320
pshufd m3, m3, q1320
punpckldq m4, m0, m1
punpckhdq m0, m1
punpckldq m5, m2, m3
punpckhdq m2, m3
vperm2i128 m1, m0, m2, 0x31 ; 7 5 (interleaved)[+strideq2, java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Range [0, 14) out of bounds for length 12
vperm2i128 m0, m4, m5, 0x20 ; 0 2 (interleaved)
vperm2i128 m2, m4, m5, 0x31 ; 4 6 (interleaved)
vpbroadcastd m7, [pd_2048]
jmp m(iadst_4x8_internal_10bpc).main3
INV_TXFM_4X8_FN flipadst, dct, 12
INV_TXFM_4X8_FN flipadst, adst, 12
INV_TXFM_4X8_FN flipadst, flipadst, 12
INV_TXFM_4X8_FN flipadst, identity, 12
cglobal iflipadst_4x8_internal_12bpc, 0, 7, 10,vpblendd m0, m1, 0xcc
shuf ,m5 005
psrad m0, v ,m0 ,0 4 7 6 5
psrad m1, m2, 1
psrad 2 6,1
psrad m2xm4,1
jmp m(iadst_4x8_internal_12bpc).pass1_end
.pass2:
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX {pmaxsd x, m8}, m0, m1, m2, m3
REPX {pminsd x, m9}, m0, m1, m2, m3
call m(iadst_4x8_internal_12bpc).pass2_main
shufpd m3, m4, m0, 0pmulhrsw m2, m5 ; out8 -out11 -out9 out10
shufpd m0, m4,ALIGN
psignd m2, m6
pshufd main
pshufd m1 m2, q1032 ; out5 out4
psignd m2, m5, m6 m1+*5java.lang.StringIndexOutOfBoundsException: Range [39, 40) out of bounds for length 39
jmp m(iadst_4x8_internal_12bpc).end
INV_TXFM_4X8_FN identity, dct, 12
INV_TXFM_4X8_FNidentity,adst,
INV_TXFM_4X8_FN identity, shufpd m1, m5, 0x0c ; 15 13
INV_TXFM_4X8_FN identity, identity, 12
cglobal iidentity_4x8_internal_12bpc, 0, 7, 10, dst, stride, c, eob, tx2
jmp m( vbroadcasti128 m6,cq+*10
.pass2:
; m0 = in0 in1
; m1 = in2 in3
; m2 = in4 in5
; m3 = in6 in7
vpbroadcastd m6, [pixel_12bpc_max]
call m(iidentity_4x8_internal_10bpc).pass2_end
RET
%macro INV_TXFM_4X16_FN 2-3 10 ; type1, type2, bitdepth
INV_TXFM_FN ,,x0c
%ifidn %1_%2, dct_dct
imul r6d, [cq], 181
vpbroadcastd ,[%bpc]
[q,eobd; 0
16
add ,384
sar r6d,9
jmp m(inv_txfm_add_dct_dct_4x4_10bpc).dconly3
%endif
%endmacro
INV_TXFM_4X16_FN dct, dct
INV_TXFM_4X16_FN dct, identity
INV_TXFM_4X16_FN ,adst
INV_TXFM_4X16_FN dct, flipadst
cglobal idct_4x16_internal_10bpc, 0, 7, 11, dst, stride, c, eob, tx2
.pass1:
vpbroadcastd m10,pd_3072]
mova m1, [cq+32*2]
mova m3, [cq+32*6]
mova m5, [cq+32*3]
mova m7, [cq+32*7]
callpass1_main
pmulld m0, m6, [cq+32*0]
pmulld m2, m6, [cq+32*4]
pmulld m4, m6, [cq+32*1]
pmulld m6, p , m4,m6
call .pass1_main2
REPX {psrad x, 1}, m0, m1, m2, m3, m4, m5, m6, m7
jmp tx2q
.pass2:
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
lea r6, [deint_shuf+128]
punpcklwd m4, m2, m3
punpckhwd m2, m3
unpckhwd ,
m0 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
punpckhdq , m0, m4 ; 2 3
punpckldq m0, punpckhqdq m0, m8, m1 ; t11a t3
punpckldq m4, m5, m2 ; 8 9
punpckhdq m5, m2 ; a b
vextracti128 xm2, m0, 1 ; 4 5
vextracti128 xm3, m1, 1 ; 6 7
vextracti128 ,m41
vextracti128 xm7, m5, 1 ; e f
call m(
vpbroadcastd m9psubdm4 m2 ; t10 t2a
inserti128,m0, xm1,1 ; 0 1 3 2
vinserti128 m6 11
vinserti128 m2, m4, xm5, 1 ; 8 9 b a
vinserti128 m3, psubd ,m5
vpbroadcastd m8, [pixel_10bpc_max]
call .pass2_end
RET
ALIGN function_align
.pass1_main:
vpbroadcastd m4, [pd_3784]
vpbroadcastd REPX {psignd x, m9}, java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
vpbroadcastd m9, [pd_2048]
vpbroadcastd m6, [java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
ITX_MULSUB_2D 5, 7, 4, 2, p
ret
ALIGN function_align
.pass1_main2:
paddd m0, m10
paddd m4, m10
paddd m8, m0, m2
psubd m0, m2
paddd m9, m4, m6
m4 m6
REPX {psrad x, 11}, m8, m0, m9, m4
psubd m2psrad m6, java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 7
psubd m6, m4, m5
paddd lea , [strideq*3]
paddd m0, m8, m3
psubd m3, m8, m3
paddd m4, m9, m7
psubd m7, m9, m7
ret
ALIGN function_align
.pass2_end:
lea r6, [strideq*3]
pxor m7, m7
m0,m9
call
m0, m1 m9
call .write_4x4callwrite_4x4
pmulhrsw m0, m2, m9
call .write_4x4
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 11
call .write_4x4
ret
ALIGN function_align
.write_4x4:
movq xm4, [dstq+strideq*0]
movhps xm4, [dstq+strideq*1]
vpbroadcastq m5, [dstq+strideq*2]
vpbroadcastq m6, [dstq+r6 ]
mova [cq+32*0], vpblendd m4, m6
mova [cq+32*1], m7
add cq, 32*2
vpblendd dstq+strideq
pblenddm4 ,030
paddw m4, m0
pmaxsw m4, m7
pminsw m4, m8
vextracti128xm5,m4 java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
movq [dstq+strideq*0], xm4
movhps [
movhps [dstq+strideq*2], xm5
movq [dstq+r6 ], xm5
lea dstq, [dstq+strideq*4]
ret
INV_TXFM_4X16_FN adst, dct
INV_TXFM_4X16_FN adst, adst
INV_TXFM_4X16_FN adst, pmulldm6 m7,[q32*5]
INV_TXFM_4X16_FN pmulld m3, m7, [cq+32*6]
cglobal iadst_4x16_internal_10bpcpmulld ,[cq+327]
call m(iadst_16x4_internal_10bpc REPX {adddx ,m0,m4,m1,m5 m2 ,
vpbroadcastd m6, [pd_6144]
call m(iadst_16x4_internal_10bpc).main_end
psrad m0, m4, 13
psrad m1, m5, 13
psrad m2,13
srad ,13
vpbroadcastd pjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
psrad m5, m9, 13
psrad m6, 13
psrad m7, 13
jmp tx2q
.pass2java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
call .pass2_main
vpbroadcastd m5, [call .pass2_end
vpbroadcastd m8, [pixel_10bpc_max]
lea r6, [strideq*.java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
m4 ,m0 0 out0out2-
pshufd m2, m2, q1032 ; -out11 out8 out10 -out9
vpblendd m3, m0, 0x33 ; -out15 out12 out14 -out13
pxor m7, m7
psubw m9, m7, m5
vpblendd m9, m5, 0x3c ; -2048 2048 2048 -2048
pmulhrsw m0, m4, m9
call .write_4x4
pmulhrsw m0, m1, m9
call.write_4x4
pmulhrsw m0, m2, m9
call .write_4x4
m0 m3, java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
call .write_4x4
l dstqstrideq*]
ALIGN function_align
.write_4x4:
movq xm4, [dstq+r6 ]
xm4, [stq+strideq*0]
vpbroadcastq m5, [dstq+strideq*1]
vpbroadcastq m6, [dstq+strideq*2]
mova [cq+32*0], m7
[+*1, java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
add cq, 32*2
vpblendd m4, m5, 0xc0 m1,m0
vpblendd m4, m6, 0x30
,m0
pmaxsw m4, m7
pminsw m4, m8
vextracti128 xm5, m4, 1
movhps [dstq+strideq*0], xm4
movhps [dstq+strideq*1 java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 45
movq [dstq+strideq*2], xm5
movq [dstq+r6 ], xm4INV_TXFM_4X16_FN dct, dct, 12
lea dstq, [dstq+strideq*4]
ret
ALIGN function_align
.ass2_main:
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
lea r6, [deint_shuf+128]
punpcklwd m4, m2, m3
m2, m3
punpckhwd m5, m0, m1
punpcklwd m0, m1
punpckhdq m4 m5
punpckldq m0, m4
java.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 35
punpckhdq m5, m2
vpblendd m3, m0, m1, 0x33
vpblendd ,m1, 0xcc
m5 ,0
shufpd m4, m5, 0x05
vperm2i128 m1, m0, m3, 0x31 ; 4 7 6 5
xm3,1 ; 0 3 2 1
vperm2i128 m3, m2, m4, 0x31 ; c f e d ; ????
vinserti128 m2,xm4,1 ; b 8 9 a
call m(iadst_4x16_internal_8bpc).main2
vpbroadcastd m5, [pw_2896x8]
paddsw m1, m2, m4
psubsw m2, m4
pmulhrsw m1vpermq ,,q1302
pmulhrsw m2, m5 ; out8 -out11 -out9 out10
ret
ALIGN function_align
.main:
c+160java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
vbroadcasti128 m4, [cq+16* 2]
vbroadcasti128 m1, [cq+16*15]
vbroadcasti128 m5, [cq+16*13]
vbroadcasti128 m2, [cq+16* 4]
vbroadcasti128 m6, [cq+16* 6]
vbroadcasti128 m3, [cq+16*11]
vbroadcasti128 m7,[cq+* 9java.lang.StringIndexOutOfBoundsException: Range [39, 40) out of bounds for length 39
shufpd m0, m4, 0x0c ; 0 2
shufpd m1, m5, 0x0c ; 15 13
shufpd m2, m6, 0x0c ; 4 6
shufpd m3, m7, 0x0c ; 11 9
vbroadcasti128 m4, [cq+16* java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 7
vbroadcasti128 m6, [cq+16*10]
vbroadcasti128 m5, [cq+16* 7]
vbroadcasti128java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 35
shufpd ,0,7,dst c,eob x2
shufpd m5, m7, 0x0c ; 7 5
vbroadcasti128 m6, [cq+16*12]
vbroadcasti128 m7, [cq+16*14]
shufpd m6, m7, 0x0c ; 12 14
vbroadcasti128 m7, [cq+16* 3]
vbroadcasti128 m8, [cq+16* 1]
shufpd m7 m8,0x0c
.main2:
; expects: m12 = clip_min m13 = clip_max
vpbroadcastd m11, [pd_2048]
ITX_MULSUB_2D 1, 0, 8, 9, 10, 11, 201_995 {pminsd x, , m3,,m5 6 m7
ITX_MULSUB_2D 3, 2, 8, 9, 10, 11, 1751_2440, 3703_3290, 1
ITX_MULSUB_2D 5, 4, 8, 9, 10, 11, 3035_3513, 2751_2106, 1
ITX_MULSUB_2D 7, 6, 8, 9, 10, 11, 3857_p m6,m7
psubd ,m0 4 t8a t10a
paddd m0, m4 ; t0a t2a
psubd m1,
paddd m1, m5 ; t1a t3a
psubd m5,m2,m6; t12a t14a
paddd m2,
psubd m6, m3, m7 ; t13a t15a
paddd m3, m7 ; t5a t7a
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m8
p ,
(.
6,5, 7,10,11 4017_, java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
psubd m7, m0, m2 ; t4 t6
paddd m0, m2 ; t0 t2
m2 m1,m3; t5 t7
paddd m1, m3 m0 m9 m3
call m(iadst_4x16_internal_10bpc)write_4x4
paddd m4, m6 ; t8a t10a
bd m6 m5
paddd m8, m5 ; t9a t11a
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m6, m7, m8
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m6, m7, transpose_16x4:
punpcklqdq m5, m3, m7 ; t12a t4
punpckhqdq m3, m7 ; t14a t6
punpckhqdq m7, m6, m2 ; t15a t7
punpcklqdq m6, m2 punpckhdq m6
ITX_MULSUB_2D 7, 3, 2, 9, 10, 11, 3784, 1567
TX_MULSUB_2D 5, 6, 2, 9, 10, 11, 1567, 10
vpbroadcastd m10, punpcklqdq m11,m9,
vbroadcasti128 m9, [pw_2048_m2048] ; + + - -
punpckhqdq m2, m4, m0 ; t10a t2
punpcklqdq m4, m0 ; t8a t0
punpckhqdq m0, m8, m1 ; t11a t3
punpcklqdq m8, m1 ; t9a t1
paddd m1, m6, m7 ; out2 -out3
psubd m6, m7 ; t14a t6
paddd m7, m5, m3 ; -out13 out12
psubdm9,,m6
psubd m3, m8, m0 ; t11 t3a
, m0 ; out14 -out15
paddd m0, m4, m2 ; -out1 out0
psubd m4, m2 ; t10 t2a
REPX {pmaxsd x, m12}, m6, m5, m3, m4
REPX {pminsd x, m13}, m6, m5, m3, m4
REPX {pmulld x, m10}, m6, m5, m3, m4
paddd m6, m11
paddd m4, m11
paddd m2, m6, m5 ; -out5 out4
psubd m6, vperm2i128 m3m4 ,020;
psubd m5, m4, m3 ; -out9 out8
paddd m3, m4 ; out6 -out7
REPX {psrad x, 12}, m2, m3, m5, m6
REPX {psignd x, m9}, m1, m8, m3, m6
pshufd m9, m9, q1032
REPX {psignd x, m9}, m0, m7, m2, m5
ret
INV_TXFM_4X16_FN flipadst, dct
INV_TXFM_4X16_FN flipadst, adst
INV_TXFM_4X16_FN flipadst, flipadst
INV_TXFM_4X16_FN flipadst, identity
cglobal iflipadst_4x16_internal_10bpc, 0, 7, 11, dst, stride, c, eob, tx2
.pass1:
call m(iadst_16x4_internal_10bpc).main
vpbroadcastd m6, [pd_6144]
call m(iadst_16x4_internal_10bpc).main_end
psrad m0, m3, 13
psrad m1, m2, 13
psrad m2, m5, 13
psrad m3, m4, 13
psrad m4, m7, 13
psrad m5, m6, 13
psrad m6, m9, 13
psrad m7, m8, 13
jmp tx2q
.pass2:
call m(iadst_4x16_internal_10bpc).pass2_main
vpbroadcastd m5, [pw_2048]
vpbroadcastd m8, [pixel_10bpc_max]
lea r6, [strideq*3]
vpblendd m4, m3, m0, 0x33 ; -out0 out3 out1 -out2
pshufd m2, m2, q1032 ; -out11 out8 out10 -out9
vpblendd m3, m0, 0xcc ; -out12 out15 out13 -out14
pxor m7, m7
psubw m9, m7, m5
vpblendd m9, m5, 0x3c ; -2048 2048 2048 -2048
pmulhrsw m0, m4, m9
call .write_4x4
pmulhrsw m0, m2, m9
call mova m10cq32*4java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
pmulhrsw m0, m1, m9
call .write_4x4
pmulhrsw m0, m3, m9
call .rite_4x4
RET
ALIGN function_align
.write_4x4:
movq xm4, [dstq+strideq*0]
movhps xm4, [dstq+r6 ]
vpbroadcastq m5, [dstq+strideq*1]
vpbroadcastq m6, [dstq+strideq*2]
mova [cq+32*0], m7
mova [cq+32*1], m7
add cq, R , },m6,m3
vpblendd m4, m5, 0x30
vpblendd m4, m6, 0xc0
paddw m4, m0
pmaxsw m4, m7
pminsw m4, m8
vextracti128 xm5, m4, 1
java.lang.StringIndexOutOfBoundsException: Range [11, 4) out of bounds for length 32
movq [dstq+strideq*1], java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 31
movhps vpbroadjava.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 39
movhps [dstq+r6 ], xm4
lea dstq, [dstq+strideq*4]
ret
INV_TXFM_4X16_FN identity%, %2, 0,java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
INV_TXFM_4X16_FN identity, adst
INV_TXFM_4X16_FN identity, flipadst
INV_TXFM_4X16_FN identity, identity
cglobal iidentity_4x16_internal_10bpc, 0, 7, 11, dst, stride, c, eob, tx2
vpbroadcastd m7, [pd_5793]
pmulld m0, m7, [cq+32*0]
pmulld m4, m7, [cq+32*1]
pmulld m1, m7, [cq+32*2]
pmulld m5, m7, [cq+32*3]
pmulld m2, m7, [cq+32*4]
pmulld m6, m7, [cq+32*5]
pmulld m3, m7, [cq+32*6]
pmulld m7, [cq+32*7]
vpbroadcastd m8, [pd_6144]
REPX {paddd x, m8}, m0, m4, m1, m5, m2,java.lang.StringIndexOutOfBoundsException: Range [0, 49) out of bounds for length 25
{ ,13,m0, m4 m1 m5,m2, 6,m,m7
jmp tx2qvpbroadcastd m8, [clip_18b_min]
.pass2:
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
m7 pw_1697x16]
vpbroadcastd m8, [pw_2048]
pmulhrsw m4, m7, m0
pmulhrsw m5, m7, m1
pmulhrsw m6, m7, m2
pmulhrsw m7, m3
REPX {paddsw x, x}, m0, m1, m2, m3
paddsw m0, m4
paddsw m1, m5
paddsw m2, m6
paddsw m3, m7
vpbroadcastd m4, [pixel_10bpc_max]
call .pass2_end
RET
ALIGN function_align
.pass2_end:
punpckhwd m7, m0, m1
punpcklwd m0, m1
unpckhwd m1java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
punpcklwd m2, m3
lea r6, [strideq*5]
pxor m3, m3 m5, c+16*]
; 2 3 6 7
java.lang.StringIndexOutOfBoundsException: Range [25, 13) out of bounds for length 47
punpckldq m6, m7, m1 ; 8 9 c d
punpckhdq m7, m1 ; a b e f
p,m8
call .write_2x4x2
pmulhrsw ,m8
call .write_2x4x2
pmulhrsw m0, m6, m8
lea dstq, [dstq+strideq*4]
call .write_2x4x2
pmulhrsw m0, m7, m8
call . pshufd m1,,
ret
ALIGN function_align
.write_2x4x2:
movqm4,[eint_shuf]
movhps java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 31
pbroadcastq m2 [dstq+strideq*]
vpblendd m1, m2, 0x30
java.lang.StringIndexOutOfBoundsException: Range [25, 16) out of bounds for length 45
vpblenddm1,m4
mova [cq+32*0], m3
mova [cq+32*1], m3
add cq, 32*2
paddw m1, m0
pmaxsw m1, m3
pminsw m1, m4
vextracti128 xm2, m1, 1
movq A
movhps [dstq+strideq*1], main
movq [dstq+strideq*4], xm2
movhps [dstq+r6 ], xm2
lea dstq, [dstq+strideq*2]
ret
INV_TXFM_4X16_FN dct, dct, 12
INV_TXFM_4X16_FN dct, identity, 12
INV_TXFM_4X16_FN dct, adst, 12
INV_TXFM_4X16_FN dct, flipadst, 12
cglobal idct_4x16_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
jmp m(idct_4x16_internal_10bpc).pass1
.pass2:
m0 m1
punpckhdq m0, m1
punpckldq m9, m2, m3
punpckhdq m2, m3
punpckldq m1, m4, m5
punpckhdq m4, m5
punpckldq m3, m6, m7
punpckhdq m6, m7
punpcklqdq m5, m0, m2 ; 2 6
punpckhqdq m12, m0, m2 ; 3 7
punpcklqdq m0, m8, m9 ; 0 4
punpckhqdq m10, m8, m9 ; 1 5
punpcklqdq m2, m1, m3 ; 8 12
punpckhqdq m13, m1, m3 ; 9 13
punpcklqdq m9, m4, m6 ; 10 14
punpckhqdq m4,m6; 11 15
vperm2i128 m1, m5, m9, 0x20 ; 2 10
vperm2i128 m3, m9, m5, 0x31 ; 14 6
vpermq m11, m4, q1302 ; 15 11
; interleave
REPXjava.lang.StringIndexOutOfBoundsException: Range [20, 15) out of bounds for length 30
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX pmaxsdx, m8} ,m1, , m10,java.lang.StringIndexOutOfBoundsException: Range [55, 53) out of bounds for length 63
REPX {pminsd x, m9}, m0, m1, m2, m3, m10, m11, m12, m13
call m(idct_16x4_internal_10bpc).pass1_main
vpermq m6, m12, q1302 ; 7 3
vpermq m5, m13, q3120 ; 9 13
call m(idct_16x4_internal_10bpc).pass1_main2
m)pass1_main3
REPX {psrad x, 3}, m0j
packssdw m0, m1
packssdw m1, m2, m3
packssdw m2, m4, m5
vm1 [java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mova m4, [idct16_12_shuf]
REPX {vpermd x, m4, x}, m0, m1, m2, m3
vpbroadcastd m9, [pw_16384]
vpbroadcastd m8, [pixel_12bpc_max]
call m(idct_4x16_internal_10bpc).pass2_end
RET
INV_TXFM_4X16_FN adst, dct, 12
INV_TXFM_4X16_FN adst, adst, 12
NV_TXFM_4X16_FN, flipadst,java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
INV_TXFM_4X16_FN adst, identity, 12
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 69
.
psrad m0, m4, 12
psrad m1,pmaxswm1,m4
psrad m2, 12
psrad m3, 12
psrad m4, m8, 12
, 12
psrad m6, 12
psrad m7, 12
jmp java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 7
.pass2:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12,m0 , m3 ,m5 ,m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call .transpose_16x4
call m(.main2
m4
m7
psrad m7, m8, 3
REPX {
{x,3},m1 m3 ,m6
.pass2_end:
packssdw m0, m1
packssdw m1, m2, m3
packssdw m2, m4, m5
, m7
mova m4, [iadst16_12_shuf]
REPX {vpermd x, m4, x}, m0, m1, m2, m3
vpbroadcastd m9, [pw_16384]
vpbroadcastd ret
lea r6, [strideq*3]
pxor m7, m7
pmulhrsw m0, m9
call m(iadst_4x16_internal_10bpc).write_4x4
pmulhrsw m0, m9, m1
call m(iadst_4x16_internal_10bpc).write_4x4
pmulhrsw m0, m9, m2
call m(iadst_4x16_internal_10bpc).write_4x4
pmulhrsw m0, m9, m3
call m(iadst_4x16_internal_10bpc).write_4x4
RET
ALIGN function_align
.transpose_16x4:
; transpose & interleave
m8, ,
punpckhdq m0, m1
punpckldq ,m2,m3
punpckhdq m2, m3
punpckldq m1, m4, m5
punpckhdq m4, m5
m3
punpckhdq m6psigndm2 5 m6
punpcklqdqm10 m0
punpckhqdq m0, m8
punpcklqdq m11, m9,mjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
punpckhqdq m2, m9
punpcklqdq m8, m1, m4
punpckhqdq m4, m1
punpcklqdq m9, m3, m6
punpckhqdq m6, m3
vperm2i128 m5, m0, m2, 0x31 ; 7 5
vperm2i128 m7, m0, m2, 0x20 ; 3 1
vperm2i128 m0, m10, m11, 0x20 ; 0 2
vperm2i128 m2, m10, m11, 0x31 ; 4 6
vperm2i128 m1, m4, m6, 0x31 ; 15 13
vperm2i128 m3, m4, m6
vperm2i128 m4, m8, m9, 0x20 ; 8 10
vperm2i128 m6, m8, m9, 0x31 ; 12 14
ret
ALIGN function_align
.main_pass1:
call m(vpermq m0, [cq+32*0], q3120
vpbroadcastd m6, [pd_3072]
paddd m10, m4, m5
subdm4 m3
psubd m5, m3
paddd m3, m10
,java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
paddd ,
psubd m9, m1
paddd m7, m1
REPX {psrad x, 1 }, m4, m5, {x,m7, m0 m1,m2 m3
{java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 55
paddd m6, m0
ret
INV_TXFM_4X16_FN flipadst, dct, 12
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 7
INV_TXFM_4X16_FN flipadst, vpbroadcastd m4, [pw_1697x8]
INV_TXFM_4X16_FN flipadst, identity, 12
cglobal iflipadst_4x16_internal_12bpc, 0, 7, 14, dst, stride, c, eobpackssdw 2,m3
callpmulhrsw m1 m4 m0
psrad m0, m3, 12
psrad m1, m2, 12
psrad m2, m5, 12
psrad m3, m4, 12
psrad m4, m7, 12
psrad m5, m6, 12
psrad m6, m9, 12
psrad m7, m8, 12
jmp tx2q
.pass2:
java.lang.StringIndexOutOfBoundsException: Range [24, 16) out of bounds for length 43
java.lang.StringIndexOutOfBoundsException: Range [24, 16) out of bounds for length 43
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(iadst_4x16_internal_12bpc java.lang.StringIndexOutOfBoundsException: Range [27, 15) out of bounds for length 48
call m(iadst_4x16_internal_10bpc).main2
,
,m3
pshufd m2, m6, q1032
pshufd pmaxsw m1
, m7 3
psrad m7, m0, 3
pshufd m0, m8, q1032
REPX {psrad x, 3}, m0, m2, m4, m6
jmp m(iadst_4x16_internal_12bpc).pass2_end
INV_TXFM_4X16_FN identity, dct, 12
INV_TXFM_4X16_FN identity, adst, 12
INV_TXFM_4X16_FN identity, flipadst, 12
INV_TXFM_4X16_FN identity, identity, 12
cglobal iidentity_4x16_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m8, [pd_1697]
mova m0, [cq+32*0]
mova m4, [cq+32*1]
mova m1, [cq+32*2]
mova m5, [cq+32*3]
vpbroadcastd m9, [pd_6144]
pmulld m2, m8, m0
pmulld m6, m8, m4
pmulld m3, m8, m1
java.lang.StringIndexOutOfBoundsException: Range [26, 10) out of bounds for length 35
mova m10, [cq.end
mova m11, [cq+32*5]
mova m12, [cq+
mova m13, [cq+32*7]
REPX java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 34
REPX java.lang.StringIndexOutOfBoundsException: Range [32, 30) out of bounds for length 34
paddd m0, m2
pmulld m2, m8, m10
paddd m4, m6
pmulld m6, m8, m11
paddd m1, m3
m3, m8
paddd m5, m7
pmulld m7, m8, m13
REPX {psrad x, 1 }, m0, m4, m1, m5
REPX {paddd x, m9}, m2pshufd ,m5 java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
REPX {psrad x, 12}, m2, m6, m3, m7
paddd m2, m10
paddd m6, m11
paddd m3, m12
ddm7,
java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
jmp tx2q
.pass2:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {x , m0m1,m2 m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
vpbroadcastd m8, [pd_5793]
vpbroadcastd m9, [pd_1024]
REPX {pmulld x, m8}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {paddd x, m9}, m0, m1, m2, java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 31
REPX {psrad x, 14}, m0, m1, m2, m3, pass2_end:
packssdw m0, m4
packssdw m1,
packssdw m2, m6
packssdwm3,m7
vpbroadcastd m8, [pw_16384]
vpbroadcastdaxjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
call p m0 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
pmu java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
%macro INV_TXFM_8X4_FN 2-3 10 ; type1, type2, bitdepth
INV_TXFM_FN %1, %2, 0, 8x4, %3
%ifidn %1_%2, dct_dct
vpbroadcastd m2, [dconly_%3bpc]
%if %3 = j ().
.dconly:
imul r6d, [cq], 181
mov [cq], eobd ; 0
or function_align
add r6d, 128
sar r6d, 8
imul r6d, 181
add r6d, 128
sar r6d, 8
jmp m(inv_txfm_add_dct_dct_8x8_10bpc).dconly3
%else
jmp m(inv_txfm_add_dct_dct_8x4_10bpc).dconly
%endif
%endif
%endmacro
INV_TXFM_8X4_FN dct, dct
INV_TXFM_8X4_FN dct, identity
INV_TXFM_8X4_FN dct, adst
INV_TXFM_8X4_FN dct, flipadst
cglobal idct_8x4_internal_10bpcjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
.pass1:
vbroadcasti128 m1, [cq+16*1]
vbroadcasti128 m0, [cq+16*5]
vbroadcasti128 m2, [cq+16*3]
vbroadcasti128 m3, [cq+16*7]
vpbroadcastd
shufpd m1, m0,INV_TXFM_8X4_FNflipadst,dct
2, 0; 7 3
vbroadcasti128 m0, [cq+16*0]
vbroadcasti128 m4, [cq+16*2]
vbroadcasti128 m2, [cq+16*4]
vbroadcasti128 m5, [cq+16*6]
vpbroadcastd m7, [pd_2048]
shufpd , , 0c; 0 2
shufpd m2, m5, 0x0c ; 4 6
REPX {pmulld x, m6}, m1, m3, m0, m2
REPX {paddd x, m7}, m1, m3, m0, m2
REPX {psrad x, 12}, m1, m3, m0, m2
call ,m4, ,0java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
psubd m3, m0, m4 ; out7 out6 (interleaved)
paddd m0, m4 ; out0 out1 (interleaved)
paddd m1, m2, m5 ; out3 out2 (interleaved)pshufd m6,m6, q1032
psubd m2, m5 ; out4 out5 (interleaved)
pshufd m1, m1, q1032
pshufd m3, m3, q1032
jmp tx2q
.pass2:
vbroadcasti128 java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
packssdw m0, m1
packssdw m2, m3
vperm2i128 m1, m0, m2, 0x31
vinserti128 m0, xm2, 1
java.lang.StringIndexOutOfBoundsException: Range [27, 10) out of bounds for length 31
,
paddd m0,m,m3
vpermq m0, m0, q3120 ; out0 out1
vpermq m2, m1, q2031 ; out2 out3
jmp m(iadst_8x4_internal_10bpc).end
ALIGN function_align
.main:
ITX_MULSUB_2D 1, 3, 4, 5, 6, 7, 799_3406, 4017_2276, 1
IDCT4_1D_PACKED 0, 2, 4, 5, 6java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 0
vpbroadcastd m6, [pd_2896]
punpcklqdq m4, m1, m3 ; t4a t7a
punpckhqdq m1, m3 ; t5a t6a
psubd m3, m4, m1 ; t5a t6a
paddd m4, m1 ; t4 t7
pmaxsd x,m8 m3,m4,m0,java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
REPX{minsdx, } m4,m0,
pmulld m3, m6
pshufd m1, m3, q1032
padddm3, m7
psubd m5, m3, m1
paddd m1, m3
psrad m5, 12
psrad m1, ; m1 = in2 in3 (interleaved)
vpblendd m5, m4, 0x33 ; t4 t5
punpckhqdq ,
ret
INV_TXFM_8X4_FN adst, REPX {pmaxsd x, m, , m1 ,m3
INV_TXFM_8X4_FN adst, adst
INV_TXFM_8X4_FN adst, flipadst
INV_TXFM_8X4_FNadst,identity
cglobal iadst_8x4_internal_10bpc, 0, 7, 10, pmulld x m4,,,m2 m3
call m(iadst_4x8_internal_10bpc).main
vpblendd , , 0 ; out6 out7
vpblendd m0, m4, 0xcc ; out0 out1
pshufd m1, m5, q1032
psignd m2, m6 ,m1
psignd m1, m6 ; out2 out3
jmptx2q
.pass2:
call .pass2_main
vpermq m0, m0, q3120 ; out0 out1
vpermq m2, m1, q3120 ; out2 out3
.endjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
,[pw_2048]
pmulhrsw m0, m1
pmulhrsw m1, m2
vpbroadcastd m5, [pixel_10bpc_max]
.end2
mova xm2, [dstq+strideq*0]
vinserti128 m2, [dstq+strideq*1], 1
lea r6, [dstq+strideq*2]
mova xm3, [r6 +strideq*0]
vinserti128 m3, [r6 +strideq*1], 1
pxor m4, m4
REPX {mova [cq+32*x], m4 mov [q],eobd ; 0
paddw m0, m2
paddw m1, m3
pmaxsw m0, m4
pmaxsw m1, m4
pminsw m0, m5
pminsw m1, m5
mova [dstq+strideq*0], xm0
vextracti128 [dstq+strideq*1], m0, 1
mova [r6 +strideq*0], xm1
vextracti128 [r6 +strideq*1], m1, 1
RET
ALIGN function_align
.pass2_main:
vbroadcasti128 m4, [deint_shuf]
,m1
,
ea [+28java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
vperm2i128 m1, m0, m2, 0x31
vinserti128 m0, xm2, 1
pshufb m0, m4
pshufb m1, m4
jmp m(iadst_8x4_internal_8bpc).main
ALIGN function_align
.main:
vpbroadcastd m1, [pd_2896]
pmulld m0, m1, [cq+32*0]
pmulld m3, m1, [cq+32*3]
pmulldm2, m1, [cq++32*
pmulld m1, jg.dconly_loop
RET
REPX {paddd x, m4}, m0, m3, m2, m1
REPX {psrad x, 12}, m0, m3, m2, m1
.main2:
IADST4_1D
ret
INV_TXFM_8X4_FN flipadst, dct
INV_TXFM_8X4_FN flipadst, adst
INV_TXFM_8X4_FN ,flipadst
INV_TXFM_8X4_FN flipadst, identity
%macroIADST8_1D 14 ; src[1-8], tmp[1-3], pd_2048, clip[1-2]
call m(iadst_4x8_internal_10bpc).main
shufpd m3, m4, m0, 0x05
shufpd m0, m4, 0x05
signd
pshufd m6, m6, q1032
pshufd m1, m2, q1032
psignd m2,m5, m6
jmp tx2q
.pass2:
call m(iadst_8x4_internal_10bpc).pass2_main
vpermq m2, m0, q2031
vpermq m0, m1, q2031
ITXMULSUB_2D , 5 9 10 11 12 3166,2598 ; t5a, t4a
INV_TXFM_8X4_FN identity, dct
INV_TXFM_8X4_FN identity, adst
INV_TXFM_8X4_FN identity, flipadst
INV_TXFM_8X4_FN identity, identity
cglobal iidentity_8x4_internal_10bpc, 0, 7, 10, dst, stride, c, eob, tx2
.pass1:
vpbroadcastd m4, [pd_2896]
vpermq m0, [cq+32*0], q3120
vpermq m1, [cq+32*1], q3120
vpermq m2, [cq+32*2], q3120
vpermq m3, [cq+32*3], q3120
vpbroadcastd m7, [pd_2048]
psubd 2 %8%4; t5
REPX {paddd x, m7}, m0, m1, m2, m3
REPX {psrad x, 12}, m0, m1, m2, m3
REPX{adddx, , m0, , m2,m3
jmp tx2q
.pass2:
vpbroadcastd m5, [pixel_10bpc_max]
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
packssdw m2, m3
pmulhrsw m1, m4, m0
m4, java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
paddsw m0, m1
paddsw m2, m4
vpbroadcastd% pd_1448java.lang.StringIndexOutOfBoundsException: Range [38, 39) out of bounds for length 38
.pass2_end:
punpckhwd m1, m0, m2
punpcklwd m0, m2
lea r6, [dstq+strideq* psubdm%, m%1, m%3 ; t2
punpckhwd m2, m0, m1
punpcklwd m0, m1
pmulhrsw m2, m7
pmulhrsw m0, m7
punpckhwd m1, m0, m2
punpcklwd m0, m2
movadstq+strideq*0]
vinserti128 m2, [r6 +strideq*0], 1
mova xm3, [dstq+strideq*1]
vinserti128 m3, [r6 +strideq*1], 1
pxor m4, m4
REPX {mova [cq+32*x], m4}, 0, 1, 2, 3
paddw m0, m2
paddw m1, m3
pmaxsw m0, m4
pmaxsw m1, m4
pminsw m0, m5
pminsw m1, m5
mova [dstq+strideq*0], xm0
mova [dstq+strideq*1], xm1
vextracti128 [r6 +strideq*0], m0, 1
vextracti128 [r6 +strideq*1], m1, 1
RET
INV_TXFM_8X4_FN dct, dct, 12
INV_TXFM_8X4_FN dct, identity, 12
INV_TXFM_8X4_FN dct, adst, 12
INV_TXFM_8X4_FN dct, flipadst, 12
cglobal idct_8x4_internal_12bpc, 0, 7, 10, dst, stride, c, eob, tx2
vpbroadcastd m8, [clip_20b_min]
,[]
jmp m(idct_8x4_internal_10bpc).pass1
.pass2:
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX {pmaxsd mova m0,[cq+32*]
REPX {pminsd x, m9}, m0, m1, m2, m3
call m(iadst_8x4_internal_12bpc).transpose_4x8
IDCT4_1D 0, 1, 2, 3,, , 6, 7
jmp m(iadst_8x4_internal_12bpc).end
INV_TXFM_8X4_FN adst, dct, 12
INV_TXFM_8X4_FN adst, adst, 12
INV_TXFM_8X4_FN adst, flipadst, 12
INV_TXFM_8X4_FN adst, java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 34
cglobal iadst_8x4_internal_12bpc, 0, 7, 10, dst, stride, c, eob, tx2
vpbroadcastd m8, [clip_20b_min]
vpbroadcastdm11,[pd_2048]
call m(c main
vpblenddm3 m0 m4 x33 ; out6 out7
vpblendd m0, m4, 0xcc ; out0 out1
pshufd m1, m5, q1032
psignd m2, m6 ; out4 out5
psignd m1, m6 ; out2 out3
jmp tx2q
.pass2:
vpbroadcastd m8, ,clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX {pmaxsd x, m8}, m0, m1, m2, m3
REPX {, m9}, m0, m1, m2, m3
call .pass2_main
vpbroadcastd m5, [pd_2048]
paddd m0, m5, m4
paddd m1, m5, m6
p ,
paddd m3, m5
.pass2_end:
REPX psrad, ,m2 java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
.end:
vpbroadcastd m4, [pw_16384]
REPX {psrad x, 3}, m0, m1, m2, m3
packssdw m0, m1 [trideq*java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
packssdw m2, m3
pmulhrsw m0, m4
mova xm9 [+strideq2java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
vpermq m0, m0, q3120 ; out0 out1
vpermq m1, m1, q3120 ; out2 out3
vpbroadcastd , m8
().
ALIGN function_align
.pass2_main:
call .transpose_4x8
jmpm1
ALIGN function_align
.transpose_4x8:
; deinterleave
pshufd[0] xm0
pshufd m1, m1,,m1, 1
pshufd m2, m2, q3120
pshufd
; transpose
punpcklqdq m4, ,m5
punpckhqdq m0, m1
punpcklqdq m5, m2, m3
punpckhqdq m2, m3
vperm2i128 m1, m0, m2, 0x20 ; out1
vperm2i128 m3, m0, m2, 0x31 ; out3
vperm2i128 m2, m4, m5, 0x31 ; out2
vperm2i128 m0, m4, m5, 0java.lang.StringIndexOutOfBoundsException: Range [0, 41) out of bounds for length 35
ret
INV_TXFM_8X4_FN flipadst, punpckldq m0,
punpckhdq m2 ,m1
INV_TXFM_8X4_FN flipadst, flipadst, 12
INV_TXFM_8X4_FN flipadst, identity, 12
cglobal iflipadst_8x4_internal_12bpc, 0, 5, 10, dst, stride, c, eob, tx2
vpbroadcastd m8, [clip_20b_min]
vpbroadcastd m9, [clip_20b_max]
call vperm2i128 m2 0
shufpd m3, m4, m0, 0x05
shufpd m0, m4, 0x05
psignd m2, m6
pshufd m6, m6, q1032
pshufd m1,
psignd m2, m5, m6
jmp
.pass2.java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
REPX {pmaxsd x, m8}, m0, m1, m2, ITX_MULSUB_2D 1, 7, 8, 9, 10, 11, 799, 4017 ; t4a t7a
REPX {pminsd x java.lang.StringIndexOutOfBoundsException: Range [26, 17) out of bounds for length 65
call m(iadst_8x4_internal_12bpc).pass2_main
vpbroadcastd m5, [pd_2048]
paddd m0, m5, m3
paddd psubd ,java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
paddd m3, m5, m4
padddm2 ,m6
jmp m(iadst_8x4_internal_12bpc).pass2_end
INV_TXFM_8X4_FN identity, dct, 12
INV_TXFM_8X4_FN identity, adst, 12
INV_TXFM_8X4_FNidentity, , 12
INV_TXFM_8X4_FN identity, identity, 12
cglobal iidentity_8x4_internal_12bpc, 0, 7, 10, dst, stride,paddd ,m11
jmp m(iidentity_8x4_internal_10bpc).pass1
.pass2:
; m0 = in0 in1 (interleaved)paddd ,
psubd m4, m7, m1
; m2 = in4 in5 (interleaved)
; m3 = in6 in7 (interleaved)
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
{pmaxsdx,m8,m0 ,
REPX {pminsd x, m9}, m0, m1, m2, m3
psubd m5, m2 ; dct4 out2
REPX {pmulld x, m4}, m0, m1, m2, m3
REPX {paddd x, m7}, m0, m1, m2, m3
REPX {psrad x, 15}, m0, m1, m2, m3
vpbroadcastd m5, [pixel_12bpc_max]
vpbroadcastd m7, [pw_16384]
packssdw m0, m1
packssdw m2, m3
jmp m(iidentity_8x4_internal_10bpc).pass2_end
m6m7; out1
%ifidn %1_%2, dct_dct
vpbroadcastd m2, [dconly_%3bpc]
%if %3 = 10
.dconly:
imul r6d, [cq]psubd , ; out5
[cq] ;
or r3d, 8
. padd ,m8; out3
add r6d, 384
sar r6d, 9
.dconly3:
imul r6d, 181
add r6d, INV_TXFM_8X8_FN adst, adst
sar r6d, 12
movd xm0, r6d
paddsw xm0, xm2
vpbroadcastw m0, xm0
.:
mova xm1, [dstq+strideq*0]
vinserti128 m1, [dstq+strideq*1], 1
paddsw m1, m0
psubusw m1, m2
mova [dstq+strideq*0], xm1
vextracti128 [dstq+strideq*1]
lea dstqjava.lang.StringIndexOutOfBoundsException: Range [25, 10) out of bounds for length 38
sub r3d, 2
jg .dconly_loop
RET
%else
jmp m(inv_txfm_add_dct_dct_8x8_10bpc REPX vpermqx ,,m0, m2,m3
%endif
%endif
%endmacro
%macro IADST8_1D 14 ; src[1-8], tmp[1-3], pd_2048, clip[1-2]
ITX_MULSUB_2D %8,call java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
ITX_MULSUB_2D %2, %7, %9, %10, %11, %12, 3920, 1189 ; t7a, t6a
ITX_MULSUB_2D %6, %3, %9, %10, %11, %12, 1931, 3612 ; t3a, t2a
ITX_MULSUB_2D %4, %5, %9, %10, %11, %12, 3166, 2598 ; t5a, t4a
psubd m%9, m%3, m%7 ; t6
37 ; t2
psubd m%7, m%1, m%5 ; t4
paddd m%1, m%5 ; t0
psubd m%5, m%6, m%2 ; t7
paddd movam2 *2
psubd m%2, m%8, m%4 ; t5
paddd m%8, m%4 ; t1
REPX {pmaxsd x, m%13}, m%7, m%2, m%9, m%5, m%3, m%1, m%6, m%8
REPXvpbroadcastd m11,[d_2048
ITX_MULSUB_2D %7, %2, %4, %10,.main2:
ITX_MULSUB_2D %5, %9, %4, %10, %11, %12, 3784, %11 ; t6a, t7a
psubdm%,m%7 m%9; t7
paddd m%7, m%9 ; out6
vpbroadcastd , []
psubd m%4, m%8, m%6 ; t3
paddd m%8, m%6 ; -out7
psubd m%6, m%1, m%3 ; t2
paddd m%1, m%3 ; out0
psubd m%3, ,m1
paddd m%2, m%5 ; -out1
REPX {pmaxsd x, m%13}, m%6, m%4, m%3, m%10
REPX psrad x, 1 }, m0, m1, m6, m7
REPX {pmulld x, m%9 }, m%6, m%4, m%3, m%10
psubd m%5, m%6, m%4 ; (t2 - t3) * 1448
paddd m%4, m%6 ; (t2 + t3) * 1448
psubd m%6, m%3, m%10 ; (t6 - t7) * 1448
paddd m%3, m%10 ; (t6 + t7) * 1448
%endmacro
java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
INV_TXFM_8X8_FN dct, identity
INV_TXFM_8X8_FN dct, adst
INV_TXFM_8X8_FN dct, flipadst
cglobal idct_8x8_internal_10bpc, 0, 7, 14, dst, stride, c, eobINV_TXFM_8X8_FN flipadst,adst
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, INV_TXFM_8X8_FNflipadst,flipadst
.pass1:
mova m0, [cq+32*0]
mova m1, [cq+32*1]
mova ,c+32*java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mova m3, [cq+32*3]
mova m4, [cq+32*4]
mova m5, [cq+32*5]
mova m6, [cq+32*6]
mova m7, [cq+32*7]
vpbroadcastd m11, [pd_2048]
call(idct_8x8_internal_10bpc).transpose_8x8_packed
call .round_shift1
jmp tx2q
.pass2:
call .transpose_8x8_packed
call m(idct_8x8_internal_8bpc).main
vpbroadcastd m12, [pw_2048]
vpermq m0, m0, q3120
vpermq m1, m1, q2031
vpermq m2, m2, q3120
vpermq m3, m3, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call .write_8x4_start
pmulhrsw m0, m2, m12
pmulhrsw m1, m3, m12
call .write_8x4
RET
ALIGN function_align
.write_8x4_start:
vpbroadcastd m11, [pixel_10bpc_max]
lea r6, [strideq*3]
pxor m10, m10
.write_8x4:
mova xm8, [dstq+strideq*0]
vinserti128 m8, [dstq+strideq*1], 1
mova xm9, [dstq+strideq*2]
vinserti128 m9,[],1
mova [cq+32*0], m10
mova [cq+32*1], m10
mova [cq+32*2], m10
mova [cq+32*3], m10
cq 32*java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
paddw m0, m8
paddw m1, m9
pmaxsw m0, m10
pmaxsw m1, m10
pminswm0, m11
pminsw m1, m11
mova [dstq+strideq*0,m0,1
vextracti128 [dstq+strideq*1], m0, 1
movajava.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 38
vextracti128 [dstq+r6 ], m1, 1
lea dstq, [dstq+strideq*4]
ret
ALIGN function_align
.transpose_8x8_packed
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
lea r6, [deint_shuf+128]
punpckhwdm4, m0, m1
punpcklwd m0, m1
punpckhwd m1, m2, m3
punpcklwd m2, m3
punpckhdq m3, m0, m2
punpckldq m0, m2
punpckhdq m2, m4, m1
punpckldq m4, , % %10
vinserti128 m1, m3, xm2, 1
vperm2i128 m3, m2, 0x31
vperm2i128 m2, m0, m4, 0x31
vinserti128 m0, xm4, 1
ret
ALIGN function_align
.main_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
.main:
ITX_MULSUB_2D 5, 3, 8, 9, 10, 11, 3406, 2276 ; t5a t6a
ITX_MULSUB_2D 1, 7, 8, 9, 10, 11, 799, 4017 ; t4a t7a
ITX_MULSUB_2D 2, 6, 8, 9, 10, 11, 1567, 3784 ; t2 t3
paddd m8, m1, m5 ; t4
psubd m1, m5 ; t5a
paddd m9, m7, m3 ; t7
psubd m7, m3 ; t6a
vpbroadcastd m3, [pd_2896]
REPX {pmaxsd x, m12}, m1, m8, m7, m9
REPX {pminsd x, m13}, m1, m8, m7, m9
REPX {pmulld x, m3 }, m0, m4, m7, m1
paddd m0, m11
paddd m7, m11
psubd m5, m0, m4
paddd m0, m4
psubd m4, m7, m1
paddd m7, m1
REPX {psrad x, 12 }, m5, m0, m4, m7
psubd m3, m0, m6 ; dct4 out3
paddd m0, m6 ; dct4 out0
paddd m6, m5, m2 ; dct4 out1
psubd m5, m2 ; dct4 out2
REPX {pmaxsd x, m12}, m0, m6, m5, m3
REPX {pminsd x, m13}, m0, m6, m5, m3
ret
ALIGN function_align
.round_shift1:
pcmpeqd m1, m1
REPX {psubd x, m1}, m0, m6, m5, m3
paddd m1, m6, m7 ; out1
psubd m6, m7 ; out6
psubd m7, m0, m9 ; out7
paddd m0, m9 ; out0
paddd m2, m5, m4 ; out2
psubd m5, m4 ; out5
psubd m4, m3, m8 ; out4
paddd m3, m8 ; out3
REPX {psrad x, 1 }, m0, m1, m2, m3, m4, m5, m6, m7
ret
INV_TXFM_8X8_FN adst, dct
INV_TXFM_8X8_FN adst, adst
INV_TXFM_8X8_FN adst, flipadst
INV_TXFM_8X8_FN adst, identity
cglobal iadst_8x8_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
call .main
call .main_end
jmp tx2q
.pass2:
call m(idct_8x8_internal_10bpc).transpose_8x8_packed
pshufd m4, m0, q1032
pshufd m5, m1, q1032
call m(iadst_8x8_internal_8bpc).main_pass2
vpbroadcastd m5, [pw_2048]
vpbroadcastd xm12, [pw_4096]
psubw m12, m5
REPX {vpermq x, x, q3120}, m0, m1, m2, m3
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4_start
pmulhrsw m0, m2, m12
pmulhrsw m1, m3, m12
call m(idct_8x8_internal_10bpc).write_8x4
RET
ALIGN function_align
.main:
mova m0, [cq+32*0]
mova m7, [cq+32*7]
mova m1, [cq+32*1]
mova m6, [cq+32*6]
mova m2, [cq+32*2]
mova m5, [cq+32*5]
mova m3, [cq+32*3]
mova m4, [cq+32*4]
vpbroadcastd m11, [pd_2048]
.main2:
IADST8_1D 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
psrld m8, 10 ; pd_1
vpbroadcastd m9, [pd_3072]
ret
ALIGN function_align
.main_end:
paddd m0, m8
psubd m1, m8, m1
paddd m6, m8
psubd m7, m8, m7
REPX {psrad x, 1 }, m0, m1, m6, m7
; (1 + ((x + 1024) >> 11)) >> 1 = (3072 + x) >> 12
; (1 - ((x + 1024) >> 11)) >> 1 = (3071 - x) >> 12
m9,m8
paddd m2, m9
psubd m3, m8, m3
m4, m9
psubd m5, m8, m5
REPX {psrad x, 12}, m2, m3, m4, m5
ret
INV_TXFM_8X8_FN flipadst, dct
INV_TXFM_8X8_FN flipadst, adst
INV_TXFM_8X8_FN flipadst, flipadst
INV_TXFM_8X8_FN flipadst, identity
cglobal iflipadst_8x8_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2call(idct_8x8_internal_12bpc
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
call m(iadst_8x8_internal_10bpc).main
call .main_end
jmp tx2q
.pass2:
call m(idct_8x8_internal_10bpc).transpose_8x8_packed
pshufd m4, m0, q1032
pshufd m5, m1, q1032
call m(iadst_8x8_internal_8bpc).main_pass2
vpbroadcastd m12, [pw_2048]
vpbroadcastd xm5, [pw_4096]
psubw m12, m5
vpermq m8, m3, q2031
vpermq m9, m2, q2031
vpermq m2, m1, q2031
pmulhrsw m0, m8, m12
pmulhrsw m1, m9, m12
call m(idct_8x8_internal_10bpc).write_8x4_start
pmulhrsw m0, m2, m12
pmulhrsw m1, m3, m12
call m(idct_8x8_internal_10bpc).write_8x4
RET
ALIGN function_align
.main_end:
paddd m10, m8, m0
psubd m0, m8, m7
psubd m7, m8, m1
paddd m1, m8, m6
psrad m0, 1
psrad m1, 1
psrad m6, m7, 1
psrad m7, m10, 1
psubd m8, m9, m8 ; pd_6143
psubd m10, m8, m5
paddd m5, m9, flipadst, flipadst
psubd m2, m8, m3
paddd m3, m9, m4
psrad m4, m2, 12
psrad m2, m10, 12
psrad m3, 12
psrad m5, 12
ret
INV_TXFM_8X8_FN identity, dct
INV_TXFM_8X8_FN identity, adst
INV_TXFM_8X8_FN identity, flipadst
INV_TXFM_8X8_FN identity, identity
cglobal iidentity_8x8_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
.pass1:
mova m0, [cq+32*0]
mova m1, [cq+32*1]
mova m2, [cq+32*2]
mova m3, [cq+32*3]
mova m4, [cq+32*4]
mova m5, [cq+32*5]
mova m6, [cq+32*6]
mova m7, [cq+32*7]
jmp tx2q
.pass2:
packssdw m3, m7
vpbroadcastd m7, [pixel_10bpc_max]
.pass2_main:
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
vpbroadcastd m12, [pw_4096]
punpckhwd m4, m0, m1
punpcklwd m0, m1
punpckhwd m1, m2, m3
punpcklwd m2, m3
punpckhdq m3, m0, m2
punpckldq m0, m2
punpckldq m2, m4, m1
punpckhdq m4, m1
punpckhqdq m1, m0, m2 ; 1 5
punpcklqdq m0, m2 ; 0 4
punpcklqdq m2, m3, m4 ; 2 6
punpckhqdq m3, m4 ; 3 7
pmulhrsw m0, m12
pmulhrsw m1, m12
call .write_2x8x2_start
pmulhrsw m0, m2, m12
pmulhrsw m1, m3, m12
call .write_2x8x2_zero
RET
.java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
lea r6, [strideq*5]
pxor m6, m6
.write_2x8x2_zero:
mova [cq+32*0], m6
mova [cq+32*1], m6
mova [cq+32*2], m6
mova [cq+32*3], m6
add cq, 32*4
.write_2x8x2:
mova xm4, [dstq+strideq*0]
vinserti128 m4, [dstq+strideq*4], 1
mova xm5, [dstq+strideq*1]
vinserti128 m5, [dstq+r6 ], 1
paddw m0, m4
paddw m1, m5
pmaxsw m0, m6
pmaxsw m1, m6
pminsw m0, m7
pminsw m1, m7
mova [dstq+strideq*0], xm0
mova [dstq+strideq*1], xm1
vextracti128 [dstq+strideq*4], m0, 1
vextracti128 [dstq+r6 ], m1, 1
lea dstq, [dstq+strideq*2]
ret
%acro TRANSPOSE_8X8_DWORD 12 ; src/dst[1-8], tmp[1-4]
punpckldq m%9, m%1, m%2 ; aibj emfn
punpckhdq m%1, m%2 ; ckdl gohp
punpckldq m%10, m%3, m%4 ; qyrz uCvD
punpckhdq m%3, m%4 ; sAtB wExF
punpckldq m%11, m%5, m%6 ; GOHP KSLT
m5 m%6
punpckldq m%12, m%7, m%8 ; WeXf aibj
punpckhdq m%7, m%8 ; YgZh ckdl
punpcklqdq m%2, m%9, m%10 ; aiqy emuC
punpckhqdq m%9, m%10 ; bjrz fnvD
punpcklqdq m%4, m%1, m%3 ; cksA gowE
java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
punpcklqdq m%6, m%11, m%12 ; GOWe KSai
punpckhqdq m%11, m%12 ; HPXf LTbj
punpcklqdq m%8, m%5, m%7 java.lang.StringIndexOutOfBoundsException: Range [24, 16) out of bounds for length 38
punpckhqdq m%12, m%5, m%7 ; JRZh NVdl
vperm2i128 m%1, m%2, m%6, 0x20 ; out0
vperm2i128 m%5, m%2, m%6, 0x31 ; out4
vperm2i128 m%2, m%9, m%11, 0x20 ; out1
vperm2i128 m%6, m%9, m%11, 0x31 ; out5
vperm2i128 m%3, m%4, m%8, 0x20 ; out2
vperm2i128 m%7, m%4, m%8, 0x31 ; out6
vperm2i128 m%4, m%10, m%12, 0x20 ; out3
vperm2i128 m%8, m%10, m%12, 0x31 ; out7
%endmacro
INV_TXFM_8X8_FN dct, dct, 12
INV_TXFM_8X8_FN dct, identity, 12
INV_TXFM_8X8_FN dct, adst, 12
INV_TXFM_8X8_FN dct, flipadst, 12
cglobal idct_8x8_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(idct_8x8_internal_10bpc).pass1
.pass2:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call .transpose_8x8
vpbroadcastd m11, [pd_2048]
call m(idct_8x8_internal_10bpc).main
call .round_shift4
jmp m(iadst_8x8_internal_12bpc).pass2_end
ALIGN function_align
.write_8x4_start:
vpbroadcastd m11, [pixel_12bpc_max]
lea r6, [strideq*3]
pxor m10, m10
ret
ALIGN function_align
.transpose_8x8:
TRANSPOSE_8X8_DWORD 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
ret
ALIGN function_align
.round_shift4:
vpbroadcastd m1, [pd_8]
REPX {paddd x, m1}, m0, m6, m5, m3
paddd m1, m6, m7 ; out1
psubd m6, m7 ; out6
psubd m7, m0, m9 ; out7
paddd m0, m9 ; out0
paddd m2, m5, m4 ; out2
psubd m5, m4 ; out5
psubd m4, m3, m8 ; out4
paddd m3, m8 ; out3
REPX {psrad x, 4}, m0, m1, m2, m3, m4, m5, m6, m7
ret
INV_TXFM_8X8_FN adst, dct, 12
INV_TXFM_8X8_FN adst, adst, 12
INV_TXFM_8X8_FN adst, flipadst, 12
INV_TXFM_8X8_FN adst, identity, 12
cglobal iadst_8x8_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iadst_8x8_internal_10bpc).pass1
.pass2:
call .pass2_main
.pass2_end:
packssdw m0, m1
packssdw m1, m2, m3
REPX {vpermq x, x, q3120}, m0, m1
call m(idct_8x8_internal_12bpc).write_8x4_start
call m(idct_8x8_internal_10bpc).write_8x4
packssdw m0, m4, m5
packssdw m1, m6, m7
REPX {vpermq x, x, q3120}, m0, m1
call m(idct_8x8_internal_10bpc).write_8x4
RET
ALIGN function_align
.pass2_main:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_8x8_internal_12bpc).transpose_8x8
vpbroadcastd m11, [pd_2048]
.pass2_main2:
call m(iadst_8x8_internal_10bpc).main2
pslld m9, m8, 3 ; pd_8
paddd m0, m9
psubd m1, m9, m1 ; 8+x
paddd m6, m9
psubd m7, m9, m7
REPX {psrad x, 4}, m0, m1, m6, m7
vpbroadcastd m9, [pd_17408]
psubd m8, m9, m8 ; 17407
paddd m2, m9
psubd m3, m8, m3
paddd m4, m9
psubd m5, m8, m5
REPX {psrad x, 15}, m2, m3, m4, m5
ret
INV_TXFM_8X8_FN flipadst, dct, 12
INV_TXFM_8X8_FN flipadst, adst, 12
INV_TXFM_8X8_FN flipadst, flipadst, 12
INV_TXFM_8X8_FN flipadst, identity, 12
cglobal iflipadst_8x8_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iflipadst_8x8_internal_10bpc).pass1
.pass2:
call m(iadst_8x8_internal_12bpc).pass2_main
packssdw m7, m7, m6
packssdw m6, m1, m0
packssdw m1, m5, m4
vpermq m0, m7, q3120
vpermq m1, m1, q3120
call m(idct_8x8_internal_12bpc).write_8x4_start
call m(idct_8x8_internal_10bpc).write_8x4
packssdw m0, m3, m2
vpermq m0, m0, q3120
vpermq m1, m6, q3120
call m(idct_8x8_internal_10bpc).write_8x4
RET
INV_TXFM_8X8_FN identity, dct, 12
INV_TXFM_8X8_FN identity, adst, 12
INV_TXFM_8X8_FN identity, flipadst, 12
INV_TXFM_8X8_FN identity, identity, 12
cglobal iidentity_8x8_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
jmp m(iidentity_8x8_internal_10bpc).pass1
.pass2:
packssdw m3, m7
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(iidentity_8x8_internal_10bpc).pass2_main
%macro INV_TXFM_8X16_FN 2-4 0,10 ; type1, type2, eob_offset, bitdepth
INV_TXFM_FN %1, %2, %3, 8x16, %4
%ifidn %1_%2, dct_dct
imul r6d, [cq], 181
vpbroadcastd m2, [dconly_%4bpc]
mov [cq], eobd ; 0
or r3d, 16
add r6d, 128
sar r6d, 8
imul r6d, 181
jmp m(inv_txfm_add_dct_dct_8x8_10bpc).dconly2
%endif
%endmacro
INV_TXFM_8X16_FN dct, dct
INV_TXFM_8X16_FN dct, identity, 35
INV_TXFM_8X16_FN dct, adst
INV_TXFM_8X16_FN dct, flipadst
cglobal idct_8x16_internal_10bpc, 0, 7, 16, dst, stride, c, eob, tx2
%undef cmp
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
vpbroadcastd m14, [pd_2896]
vpbroadcastd m11, [pd_2048]
cmp eobd, 43
jl .fast
add cq, 32
call .pass1_main
sub cq, 32
mova [cq+32* 1], m0
mova [cq+32* 3], m1
mova [cq+32* 5], m2
mova [cq+32* 7], m3
mova [cq+32* 9], m4
mova [cq+32*11], m5
mova [cq+32*13], m6
mova m15, m7
call .pass1_main
mova m8, [cq+32* 1]
mova m9, [cq+32* 3]
mova m10, [cq+32* 5]
mova m11, [cq+32* 7]
mova m12, [cq+32* 9]
mova m13, [cq+32*11]
mova m14, [cq+32*13]
jmp tx2q
.fast:
call .pass1_main
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call .transpose
call m(idct_8x16_internal_8bpc).main
vpbroadcastd m12, [pw_2048]
REPX {vpermq x, x, q3120}, m0, m2, m4, m6
REPX {vpermq x, x, q2031}, m1, m3, m5, m7
.end:
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4_start
pmulhrsw m0, m2, m12
pmulhrsw m1, m3, m12
call m(idct_8x8_internal_10bpc).write_8x4
pmulhrsw m0, m4, m12
pmulhrsw m1, m5, m12
call m(idct_8x8_internal_10bpc).write_8x4
pmulhrsw m0, m6, m12
pmulhrsw m1, m7, m12
call m(idct_8x8_internal_10bpc).write_8x4
RET
ALIGN function_align
.transpose:
packssdw m0, m8
packssdw m1, m9
packssdw m2, m10
packssdw m3, m11
packssdw m4, m12
packssdw m5, m13
packssdw m6, m14
packssdw m7, m15
lea r6, [deint_shuf+128]
punpckhwd m8, m0, m1
punpcklwd m0, m1
punpckhwd m1, m2, m3
punpcklwd m2, m3
punpcklwd m3, m4, m5
punpckhwd m4, m5
punpckhwd m5, m6, m7
punpcklwd m6, m7
punpckhdq m7, m3, m6
punpckldq m3, m6
punpckhdq m6, m4, m5
punpckldq m4, m5
punpckhdq m5, m8, m1
punpckldq m8, m1
punpckhdq m1, m0, m2
punpckldq m0, m2
vperm2i128 m2, m0, m3, 0x31
vinserti128 m0, xm3, 1
vperm2i128 m3, m1, m7, 0x31
vinserti128 m1, xm7, 1
vperm2i128 m7, m5, m6, 0x31
vinserti128 m5, xm6, 1
vperm2i128 m6, m8, m4, 0x31
vinserti128 m4, m8, xm4, 1
ret
ALIGN function_align
.pass1_main:
pmulld m0, m14, [cq+32* 0]
pmulld m1, m14, [cq+32* 2]
pmulld m2, m14, [cq+32* 4]
pmulld m3, m14, [cq+32* 6]
pmulld m4, m14, [cq+32* 8]
pmulld m5, m14, [cq+32*10]
pmulld m6, m14, [cq+32*12]
pmulld m7, m14, [cq+32*14]
call m(idct_8x8_internal_10bpc).main_rect2
jmp m(idct_8x8_internal_10bpc).round_shift1
ALIGN function_align
.main_evenhalf:
paddd m1, m6, m7 ; idct8 out1
psubd m6, m7 ; idct8 out6
psubd m7, m0, m9 ; idct8 out7
paddd m0, m9 ; idct8 out0
paddd m2, m5, m4 ; idct8 out2
psubd m5, m4 ; idct8 out5
psubd m4, m3, m8 ; idct8 out4
paddd m3, m8 ; idct8 out3
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
ret
.main_oddhalf_fast_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3
REPX {psrad x, 12 }, m0, m1, m2, m3
.main_oddhalf_fast: ; lower half zero
vpbroadcastd m7, [pd_4076]
vpbroadcastd m8, [pd_401]
vpbroadcastd m6, [pd_m1189]
vpbroadcastd m9, [pd_3920]
vpbroadcastd m5, [pd_3612]
vpbroadcastd m10, [pd_1931]
vpbroadcastd m4, [pd_m2598]
vpbroadcastd m15, [pd_3166]
pmulld m7, m0
pmulld m0, m8
pmulld m6, m1
pmulld m1, m9
pmulld m5, m2
pmulld m2, m10
pmulld m4, m3
pmulld m3, m15
jmp .main_oddhalf_fast2
.main_oddhalf_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
.main_oddhalf:
ITX_MULSUB_2D 0, 7, 8, 9, 10, _, 401, 4076 ; t8a, t15a
ITX_MULSUB_2D 6, 1, 8, 9, 10, _, 3920, 1189 ; t11a, t12a
ITX_MULSUB_2D 2, 5, 8, 9, 10, _, 1931, 3612 ; t10a, t13a
ITX_MULSUB_2D 4, 3, 8, 9, 10, _, 3166, 2598 ; t9a, t14a
.main_oddhalf_fast2:
REPX {paddd x, m11}, m0, m7, m6, m1, m2, m5, m4, m3
REPX {psrad x, 12 }, m0, m4, m6, m2, m1, m5, m7, m3
psubd m8, m0, m4 ; t9
paddd m0, m4 ; t8
psubd m4, m6, m2 ; t10
paddd m2, m6 ; t11
psubd m6, m1, m5 ; t13
paddd m5, m1 ; t12
psubd m1, m7, m3 ; t14
paddd m7, m3 ; t15
REPX {pmaxsd x, m12}, m8, m1, m4, m6, m0, m2, m5, m7
REPX {pminsd x, m13}, m8, m1, m4, m6, m0, m2, m5, m7
vpbroadcastd m15, [pd_3784]
vpbroadcastd m10, [pd_1567]
ITX_MULSUB_2D 1, 8, 3, 9, _, 11, 10, 15
ITX_MULSUB_2D 6, 4, 3, 9, _, 11, 10, 15, 2
psubd m3, m1, m4 ; t10
paddd m1, m4 ; t9
psubd m4, m0, m2 ; t11a
paddd m0, m2 ; t8a
psubd m2, m8, m6 ; t13
paddd m6, m8 ; t14
psubd m8, m7, m5 ; t12a
paddd m7, m5 ; t15a
REPX {pmaxsd x, m12}, m2, m8, m3, m4, m0, m1, m6, m7
REPX {pminsd x, m13}, m2, m8, m3, m4, m0, m1, m6, m7
REPX {pmulld x, m14}, m2, m8, m3, m4
paddd m2, m11
paddd m8, m11
paddd m5, m2, m3 ; t13a
psubd m2, m3 ; t10a
psubd m3, m8, m4 ; t11
paddd m4, m8 ; t12
REPX {psrad x, 12}, m5, m2, m3, m4
mova [r6-32*4], m7
mova [r6-32*3], m6
mova [r6-32*2], m5
mova [r6-32*1], m4
mova [r6+32*0], m3
mova [r6+32*1], m2
mova [r6+32*2], m1
mova [r6+32*3], m0
ret
INV_TXFM_8X16_FN adst, dct
INV_TXFM_8X16_FN adst, adst
INV_TXFM_8X16_FN adst, flipadst
INV_TXFM_8X16_FN adst, identity, 35
cglobal iadst_8x16_internal_10bpc, 0, 7, 16, dst, stride, c, eob, tx2
%undef cmp
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
vpbroadcastd m14, [pd_2896]
vpbroadcastd m11, [pd_2048]
cmp eobd, 43
jl .fast
add cq, 32
call .pass1_main
call m(iadst_8x8_internal_10bpc).main_end
sub cq, 32
mova [cq+32* 1], m0
mova [cq+32* 3], m1
mova [cq+32* 5], m2
mova [cq+32* 7], m3
mova [cq+32* 9], m4
mova [cq+32*11], m5
mova [cq+32*13], m6
mova m15, m7
call .pass1_main
call m(iadst_8x8_internal_10bpc).main_end
mova m8, [cq+32* 1]
mova m9, [cq+32* 3]
mova m10, [cq+32* 5]
mova m11, [cq+32* 7]
mova m12, [cq+32* 9]
mova m13, [cq+32*11]
mova m14, [cq+32*13]
jmp tx2q
.fast:
call .pass1_main
call m(iadst_8x8_internal_10bpc).main_end
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call m(idct_8x16_internal_10bpc).transpose
call m(iadst_8x16_internal_8bpc).main
call m(iadst_8x16_internal_8bpc).main_pass2_end
vpbroadcastd m8, [pw_2048]
vpbroadcastd xm12, [pw_4096]
REPX {vpermq x, x, q2031}, m0, m1, m2, m3
REPX {vpermq x, x, q3120}, m4, m5, m6, m7
psubw m12, m8
jmp m(idct_8x16_internal_10bpc).end
ALIGN function_align
.pass1_main:
pmulld m0, m14, [cq+32* 0]
pmulld m7, m14, [cq+32*14]
pmulld m1, m14, [cq+32* 2]
pmulld m6, m14, [cq+32*12]
pmulld m2, m14, [cq+32* 4]
pmulld m5, m14, [cq+32*10]
pmulld m3, m14, [cq+32* 6]
pmulld m4, m14, [cq+32* 8]
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
jmp m(iadst_8x8_internal_10bpc).main2
INV_TXFM_8X16_FN flipadst, dct
INV_TXFM_8X16_FN flipadst, adst
INV_TXFM_8X16_FN flipadst, flipadst
INV_TXFM_8X16_FN flipadst, identity, 35
cglobal iflipadst_8x16_internal_10bpc, 0, 7, 16, dst, stride, c, eob, tx2
%undef cmp
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
vpbroadcastd m14, [pd_2896]
vpbroadcastd m11, [pd_2048]
cmp eobd, 43
jl .fast
add cq, 32
call m(iadst_8x16_internal_10bpc).pass1_main
call m(iflipadst_8x8_internal_10bpc).main_end
sub cq, 32
mova [cq+32* 1], m0
mova [cq+32* 3], m1
mova [cq+32* 5], m2
mova [cq+32* 7], m3
mova [cq+32* 9], m4
mova [cq+32*11], m5
mova [cq+32*13], m6
mova m15, m7
call m(iadst_8x16_internal_10bpc).pass1_main
call m(iflipadst_8x8_internal_10bpc).main_end
mova m8, [cq+32* 1]
mova m9, [cq+32* 3]
mova m10, [cq+32* 5]
mova m11, [cq+32* 7]
mova m12, [cq+32* 9]
mova m13, [cq+32*11]
mova m14, [cq+32*13]
jmp tx2q
.fast:
call m(iadst_8x16_internal_10bpc).pass1_main
call m(iflipadst_8x8_internal_10bpc).main_end
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call m(idct_8x16_internal_10bpc).transpose
call m(iadst_8x16_internal_8bpc).main
call m(iadst_8x16_internal_8bpc).main_pass2_end
vpbroadcastd m12, [pw_2048]
vpbroadcastd xm13, [pw_4096]
mova m11, m0
vpermq m0, m7, q2031
mova m10, m1
vpermq m1, m6, q2031
mova m9, m2
vpermq m2, m5, q2031
mova m8, m3
vpermq m3, m4, q2031
vpermq m4, m8, q3120
vpermq m5, m9, q3120
vpermq m6, m10, q3120
vpermq m7, m11, q3120
psubw m12, m13
jmp m(idct_8x16_internal_10bpc).end
INV_TXFM_8X16_FN identity, dct
INV_TXFM_8X16_FN identity, adst
INV_TXFM_8X16_FN identity, flipadst
INV_TXFM_8X16_FN identity, identity
%macro IDTX16 3-4 ; src/dst, tmp, pw_1697x16, [pw_16384]
pmulhrsw m%2, m%3, m%1
%if %0 == 4 ; if downshifting by 1
%ifnum %4
pmulhrsw m%2, m%4
%else ; without rounding
psraw m%2, 1
%endif
%else
paddsw m%1, m%1
%endif
paddsw m%1, m%2
%endmacro
cglobal iidentity_8x16_internal_10bpc, 0, 7, 16, dst, stride, c, eob, tx2
.pass1:
vpbroadcastd m15, [pd_2896]
pmulld m0, m15, [cq+32* 0]
pmulld m8, m15, [cq+32* 1]
pmulld m1, m15, [cq+32* 2]
pmulld m9, m15, [cq+32* 3]
pmulld m2, m15, [cq+32* 4]
pmulld m10, m15, [cq+32* 5]
pmulld m3, m15, [cq+32* 6]
pmulld m11, m15, [cq+32* 7]
pmulld m4, m15, [cq+32* 8]
pmulld m12, m15, [cq+32* 9]
pmulld m5, m15, [cq+32*10]
pmulld m13, m15, [cq+32*11]
pmulld m6, m15, [cq+32*12]
pmulld m14, m15, [cq+32*13]
pmulld m7, m15, [cq+32*14]
pmulld m15, [cq+32*15]
mova [cq], m7
vpbroadcastd m7, [pd_2048]
REPX {paddd x, m7}, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
paddd m7, [cq]
REPX {psrad x, 12}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
packssdw m0, m8
packssdw m1, m9
packssdw m2, m10
packssdw m3, m11
packssdw m4, m12
packssdw m5, m13
packssdw m6, m14
packssdw m13, m7, m15
vpbroadcastd m8, [pw_1697x16]
REPX {IDTX16 x, 9, 8}, 0, 1, 2, 3, 4, 5, 6, 13
vpbroadcastd m7, [pixel_10bpc_max]
vpbroadcastd m12, [pw_2048]
call .pass2_end
RET
ALIGN function_align
.pass2_end:
punpckhwd m9, m0, m1
punpcklwd m0, m1
punpckhwd m1, m6, m13
punpcklwd m6, m13
punpckhwd m13, m4, m5
punpcklwd m4, m5
punpcklwd m5, m2, m3
punpckhwd m2, m3
punpckhdq m3, m0, m5
punpckldq m0, m5
punpckhdq m11, m9, m2
punpckldq m9, m2
punpckldq m2, m4, m6
punpckhdq m4, m6
punpckldq m6, m13, m1
punpckhdq m13, m1
punpckhqdq m1, m0, m2
punpcklqdq m0, m2
punpcklqdq m2, m3, m4
punpckhqdq m3, m4
punpcklqdq m8, m9, m6
punpckhqdq m9, m6
punpcklqdq m10, m11, m13
punpckhqdq m11, m13
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(iidentity_8x8_internal_10bpc).write_2x8x2_start
pmulhrsw m0, m12, m2
pmulhrsw m1, m12, m3
call m(iidentity_8x8_internal_10bpc).write_2x8x2_zero
pmulhrsw m0, m12, m8
pmulhrsw m1, m12, m9
lea dstq, [dstq+strideq*4]
call m(iidentity_8x8_internal_10bpc).write_2x8x2_zero
pmulhrsw m0, m12, m10
pmulhrsw m1, m12, m11
call m(iidentity_8x8_internal_10bpc).write_2x8x2_zero
ret
INV_TXFM_8X16_FN dct, dct, 0, 12
INV_TXFM_8X16_FN dct, identity, 35, 12
INV_TXFM_8X16_FN dct, adst, 0, 12
INV_TXFM_8X16_FN dct, flipadst, 0, 12
cglobal idct_8x16_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(idct_8x16_internal_10bpc).pass1
.pass2:
lea r6, [rsp+32*4]
call .transpose
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
mova [cq+32* 8], m0
mova [cq+32*10], m2
mova [cq+32*12], m4
mova [cq+32*14], m6
pmaxsd m0, m12, [cq+32* 1]
pmaxsd m4, m12, m1
pmaxsd m1, m12, [cq+32* 3]
pmaxsd m2, m12, [cq+32* 5]
pmaxsd m6, m12, m5
pmaxsd m5, m12, m3
pmaxsd m3, m12, [cq+32* 7]
pmaxsd m7, m12
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
vpbroadcastd m11, [pd_2048]
vpbroadcastd m14, [pd_2896]
call m(idct_8x16_internal_10bpc).main_oddhalf
pmaxsd m0, m12, [cq+32* 0]
pmaxsd m1, m12, [cq+32* 2]
pmaxsd m2, m12, [cq+32* 4]
pmaxsd m3, m12, [cq+32* 6]
pmaxsd m4, m12, [cq+32* 8]
pmaxsd m5, m12, [cq+32*10]
pmaxsd m6, m12, [cq+32*12]
pmaxsd m7, m12, [cq+32*14]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
vpbroadcastd m11, [pd_8]
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_16x8_internal_10bpc).pass1_rotations
REPX {psrad x, 4}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
.end:
packssdw m0, m1
packssdw m1, m2, m3
packssdw m2, m4, m5
packssdw m3, m6, m7
packssdw m4, m8, m9
packssdw m5, m10, m11
packssdw m6, m12, m13
packssdw m7, m14, m15
vpermq m0, m0, q3120
vpermq m1, m1, q3120
call m(idct_8x8_internal_12bpc).write_8x4_start
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m2, q3120
vpermq m1, m3, q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m4, q3120
vpermq m1, m5, q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m6, q3120
vpermq m1, m7, q3120
call m(idct_8x8_internal_10bpc).write_8x4
RET
ALIGN function_align
.transpose:
mova [cq+32* 8], m8
mova [cq+32* 9], m9
mova [cq+32*10], m10
mova [cq+32*11], m11
call m(idct_8x8_internal_12bpc).transpose_8x8
mova [cq+32* 0], m0
mova [cq+32* 1], m1
mova [cq+32* 2], m2
mova [cq+32* 3], m3
mova [cq+32* 4], m4
mova [cq+32* 5], m5
mova [cq+32* 6], m6
mova [cq+32* 7], m7
mova m0, [cq+32* 8]
mova m1, [cq+32* 9]
mova m2, [cq+32*10]
mova m3, [cq+32*11]
mova m4, m12
mova m5, m13
mova m6, m14
mova m7, m15
jmp m(idct_8x8_internal_12bpc).transpose_8x8
INV_TXFM_8X16_FN adst, dct, 0, 12
INV_TXFM_8X16_FN adst, adst, 0, 12
INV_TXFM_8X16_FN adst, flipadst, 0, 12
INV_TXFM_8X16_FN adst, identity, 35, 12
cglobal iadst_8x16_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iadst_8x16_internal_10bpc).pass1
.pass2:
lea r6, [rsp+32*4]
call .pass2_main
call m(iadst_16x8_internal_10bpc).pass1_rotations
.pass2_end:
REPX {psrad x, 4 }, m0, m1, m2, m3, m12, m13, m14, m15
REPX {psrad x, 15}, m4, m5, m6, m7, m8, m9, m10, m11
jmp m(idct_8x16_internal_12bpc).end
ALIGN function_align
.pass2_main:
call m(idct_8x16_internal_12bpc).transpose
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
mova [cq+32* 8], m0
mova [cq+32*11], m3
mova [cq+32*12], m4
mova [cq+32*15], m7
pmaxsd m0, m13, [cq+32* 2] ; 2
pmaxsd m3, m13, m1 ; 9
pmaxsd m1, m13, m5 ; 13
pmaxsd m4, m13, m2 ; 10
pmaxsd m2 ,cq+2 ; 6
pmaxsd m5, m13, [cq+32* 5] ; 5
,
pmaxsd m7, m13, [cq+32* 1] ; 1
REPX {pminsd x, m14}, m0, m1, m2, m3 ,java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38
vpbroadcastd m12, [pd_2048]
vpbroadcastd m15, [pd_2896]
call m(iadst_16x8_internal_10bpc).main_part1
pmaxsd m0, m13, [cq+32* 0] ; 0
pmaxsd m1, m13, [cq+32*15] ; 15
pmaxsd m2, m13, [cq+32* 4] ; 4
, 32*
pmaxsd m4, m13, px ,, , ,m0 ,m7
pmaxsd m5, m13, [cq+32* 7] ; 7
pmaxsd m6, m13, [cq+32*12] ; 12
pmaxsd m7, m13, [cq+32* 3] ; 3
REPX {pminsd x, m14}, m0, m1, m2, m3, m4, m5, m6, m7
call m(iadst_16x8_internal_10bpc).main_part2
vpbroadcastd m14, [pd_17408]
psrldm15,11; pd_1
psubd m13, m14, m15 ; pd_17407
pslld m15, 3 ; pd_8
ret
INV_TXFM_8X16_FN flipadst, dct, 0, 12
INV_TXFM_8X16_FN flipadst, adst, 0, 12
INV_TXFM_8X16_FN flipadst, flipadst, 0, 12
INV_TXFM_8X16_FN flipadst, identity, 35, 12
cglobal iflipadst_8x16_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iflipadst_8x16_internal_10bpc).pass1
.pass2:
lea r6, [rsp+32*4]
call m(iadst_8x16_internal_12bpc).pass2_main
call m(iflipadst_16x8_internal_10bpc).pass1_rotations
jmp m(iadst_8x16_internal_12bpc).pass2_end
INV_TXFM_8X16_FN identity, dct, 0, 12
INV_TXFM_8X16_FN identity, adst, 0, 12
INV_TXFM_8X16_FN identity, flipadst, 0, 12
INV_TXFM_8X16_FN identity, identity, 0, 12
cglobal iidentity_8x16_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
jmp m(iidentity_8x16_internal_10bpc).pass1
.pass2:
call .pass2_main
packssdw m0, m8
packssdw m1, m9
packssdw m2, m10
packssdw m3, m11
packssdw m4, m12
packssdw m5, m13
packssdw m6, m14
packssdw m13, m7, m15
vpbroadcastd m7, [pixel_12bpc_max]
vpbroadcastd m12, [pw_16384]
call m(iidentity_8x16_internal_10bpc).pass2_end
RET
ALIGN function_align
.pass2_main:
mova [cq], m7
vpbroadcastd m7, [clip_18b_min]
REPX {pmaxsd x, m7}, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
pmaxsd m7, [cq]
mova [cq], m15
vpbroadcastd m15, [clip_18b_max]
REPX {pminsd x, m15}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14
pminsd m15, [cq]
mova [cq], m7
vpbroadcastd m7, [pd_5793]
REPX {pmulld x, m7}, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
pmulld m7, [cq]
mova [cq], m15
vpbroadcastd m15, [pd_1024]
REPX {paddd x, m15}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14
paddd m15, [cq]
REPX {psrad x, 14}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
ret
%macro INV_TXFM_16X4_FN 2-3 10 ; type1, type2, bitdepth
INV_TXFM_FN %1, %2, 0, 16x4, %3
%ifidn %1_%2, dct_dct
vpbroadcastd m3, [dconly_%3bpc]
%if %3 = 10
.dconly:
imul r6d, [cq], 181
mov [cq], eobd ; 0
or r3d, 4
.dconly2:
add r6d, 384
sar r6d, 9
.dconly3:
imul r6d, 181
add r6d, 2176
sar r6d, 12
movd xm0, r6d
paddsw xm0, xm3
vpbroadcastw m0, xm0
.dconly_loop:
paddsw m1, m0, [dstq+strideq*0]
paddsw m2, m0, [dstq+strideq*1]
psubusw m1, m3
psubusw m2, m3
mova [dstq+strideq*0], m1
mova [dstq+strideq*1], m2
lea dstq, [dstq+strideq*2]
sub r3d, 2
jg .dconly_loop
RET
%else
jmp m(inv_txfm_add_dct_dct_16x4_10bpc).dconly
%endif
%endif
%endmacro
INV_TXFM_16X4_FN dct, dct
INV_TXFM_16X4_FN dct, identity
INV_TXFM_16X4_FN dct, adst
INV_TXFM_16X4_FN dct, flipadst
cglobal idct_16x4_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m8, [clip_18b_min]
vpbroadcastd m9, [clip_18b_max]
.pass1:
vbroadcasti128 m0, [cq+16* 0]
vbroadcasti128 m4, [cq+16* 4]
vbroadcasti128 m1, [cq+16* 2]
vbroadcasti128 m7, [cq+16* 6]
vbroadcasti128 m5, [cq+16*10]
vbroadcasti128 m2, [cq+16* 8]
vbroadcasti128 m6, [cq+16*12]
vbroadcasti128 m3, [cq+16*14]
shufpd m0, m4, 0x0c ; 0 4
shufpd m1, m5, 0x0c ; 2 10
shufpd m2, m6, 0x0c ; 8 12
shufpd m3, m7, 0x0c ; 14 6
call .pass1_main
vbroadcasti128 m10, [cq+16* 1]
vbroadcasti128 m4, [cq+16* 5]
vbroadcasti128 m11, [cq+16*15]
vbroadcasti128 m5, [cq+16*11]
shufpd m10, m4, 0x0c ; 1 5
shufpd m11, m5, 0x0c ; 15 11
vbroadcasti128 m5, [cq+16* 9]
vbroadcasti128 m4, [cq+16*13]
shufpd m5, m4, 0x0c ; 9 13
vbroadcasti128 m6, [cq+16* 7]
vbroadcasti128 m4, [cq+16* 3]
shufpd m6, m4, 0x0c ; 7 3
call .pass1_main2
pcmpeqd m4, m4
REPX {psubd x, m4}, m0, m1, m2, m3
call .pass1_main3
REPX {psrad x, 1 }, m0, m1, m2, m3, m4, m5, m6, m7
jmp tx2q
.pass2:
call .transpose_4x16_packed
lea r6, [deint_shuf+128]
call m(idct_16x4_internal_8bpc).main
.end:
vpbroadcastd m4, [pw_2048]
REPX {pmulhrsw x, m4}, m0, m1, m2, m3
vpbroadcastd m5, [pixel_10bpc_max]
.end2:
paddw m0, [dstq+strideq*0]
paddw m1, [dstq+strideq*1]
.end3:
lea r6, [dstq+strideq*2]
paddw m2, [r6 +strideq*0]
paddw m3, [r6 +strideq*1]
pxor m4, m4
REPX {mova [cq+32*x], m4}, 0, 1, 2, 3, 4, 5, 6, 7
REPX {pmaxsw x, m4}, m0, m1, m2, m3
REPX {pminsw x, m5}, m0, m1, m2, m3
mova [dstq+strideq*0], m0
mova [dstq+strideq*1], m1
mova [r6 +strideq*0], m2
mova [r6 +strideq*1], m3
RET
ALIGN function_align
.pass1_main:
vpbroadcastd m7, [pd_2048]
call m(idct_8x4_internal_10bpc).main
psubd m3, m0, m4 ; idct8 out7 out6
paddd m0, m4 ; idct8 out0 out1
paddd m1, m2, m5 ; idct8 out3 out2
psubd m2, m5 ; idct8 out4 out5
ret
ALIGN function_align
.pass1_main2:
ITX_MULSUB_2D 10, 11, 4, 12, 13, 7, 401_1931, 4076_3612, 1
ITX_MULSUB_2D 5, 6, 4, 12, 13, 7, 3166_3920, 2598_1189, 1
vbroadcasti128 m12, [pd_3784_m3784]
psubd m4, m10, m5
paddd m10, m5 ; t8 t11
psignd m4, m12 ; t9 t10
psubd m5, m11, m6
paddd m11, m6 ; t15 t12
psignd m5, m12 ; t14 t13
vpbroadcastd m6, [pd_1567]
vpbroadcastd m13, [pd_3784]
REPX {pmaxsd x, m8}, m5, m4
REPX {pminsd x, m9}, m5, m4
pmulld m12, m5
pmulld m5, m6
vbroadcasti128 m6, [pd_1567_m1567]
pmulld m13, m4
pmulld m4, m6
REPX {pmaxsd x, m8}, m10, m11, m0, m1
REPX {pminsd x, m9}, m10, m11, m0, m1
paddd m12, m7
paddd m5, m7
paddd m4, m12
psubd m5, m13
psrad m4, 12 ; t14a t10a
psrad m5, 12 ; t9a t13a
vpbroadcastd m12, [pd_2896]
punpckhqdq m6, m11, m5
punpcklqdq m11, m4
punpckhqdq m4, m10, m4
punpcklqdq m10, m5
psubd m5, m11, m6 ; t12a t13
paddd m11, m6 ; t15a t14
psubd m6, m10, m4 ; t11a t10
paddd m10, m4 ; t8a t9
REPX {pmaxsd x, m8}, m5, m6
REPX {pminsd x, m9}, m5, m6
pmulld m5, m12
pmulld m6, m12
REPX {pmaxsd x, m8}, m2, m3, m11, m10
REPX {pminsd x, m9}, m2, m3, m11, m10
ret
ALIGN function_align
.pass1_main3:
paddd m5, m7
psubd m4, m5, m6
paddd m5, m6
psrad m4, 12 ; t11 t10a
psrad m5, 12 ; t12 t13a
psubd m7, m0, m11 ; out15 out14
paddd m0, m11 ; out0 out1
psubd m6, m1, m5 ; out12 out13
paddd m1, m5 ; out3 out2
psubd m5, m2, m4 ; out11 out10
paddd m2, m4 ; out4 out5
psubd m4, m3, m10 ; out8 out9
paddd m3, m10 ; out7 out6
REPX {pshufd x, x, q1032}, m1, m3, m5, m7
ret
ALIGN function_align
.transpose_4x16_packed:
vbroadcasti128 m8, [deint_shuf]
packssdw m0, m1
packssdw m2, m3
packssdw m4, m5
packssdw m6, m7
REPX {pshufb x, m8}, m0, m2, m4, m6
punpckhqdq m1, m0, m2
punpcklqdq m0, m2
punpckhqdq m2, m4, m6
punpcklqdq m4, m6
vperm2i128 m3, m1, m2, 0x31
vinserti128 m1, xm2, 1
vperm2i128 m2, m0, m4, 0x31
vinserti128 m0, xm4, 1
ret
INV_TXFM_16X4_FN adst, dct
INV_TXFM_16X4_FN adst, adst
INV_TXFM_16X4_FN adst, flipadst
INV_TXFM_16X4_FN adst, identity
cglobal iadst_16x4_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
call m(iadst_4x16_internal_10bpc).main
psrad m11, 11 ; pd_1
REPX {paddd x, m11}, m0, m1, m2, m3
paddd m4, m5, m11
paddd m5, m6, m11
paddd m6, m7, m11
paddd m7, m8, m11
.pass1_end:
REPX {pshufd x, x, q1032}, m0, m2, m4, m6
REPX {psrad x, 1}, m0, m1, m2, m3, m4, m5, m6, m7
jmp tx2q
.pass2:
call m(idct_16x4_internal_10bpc).transpose_4x16_packed
lea r6, [deint_shuf+128]
call m(iadst_16x4_internal_8bpc).main
jmp m(idct_16x4_internal_10bpc).end
ALIGN function_align
.main:
vpbroadcastd m6, [pd_1321]
mova m0, [cq+32*0]
mova m1, [cq+32*1]
vpbroadcastd m7, [pd_2482]
mova m2, [cq+32*6]
mova m3, [cq+32*7]
pmulld m4, m0, m6
pmulld m5, m1, m6 ; 1321*in0
pmulld m9, m2, m7
pmulld m8, m3, m7 ; 2482*in3
paddd m4, m9
paddd m8, m5 ; 1321*in0 + 2482*in3
pmulld m5, m0, m7
pmulld m9, m1, m7 ; 2482*in0
paddd m0, m2
paddd m1, m3 ; in0 + in3
paddd m7, m6 ; pd_3803
pmulld m2, m7
pmulld m3, m7 ; 3803*in3
psubd m5, m2
psubd m9, m3 ; 2482*in0 - 3803*in3
mova m2, [cq+32*4]
pmulld m10, m7, m2
pmulld m3, m6, m2
psubd m2, m0
mova m0, [cq+32*5]
pmulld m7, m0 ; 3803*in2
pmulld m6, m0 ; 1321*in2
psubd m0, m1 ; in2 - in0 - in3
vpbroadcastd m1, [pd_m3344]
paddd m4, m10
paddd m7, m8 ; t0
psubd m5, m3
psubd m9, m6 ; t1
pmulld m2, m1
pmulld m0, m1 ; t2
pmulld m3, m1, [cq+32*2]
pmulld m1, [cq+32*3] ; -t3
ret
ALIGN function_align
.main_end:
; expects: m6 = rnd
paddd m5, m6
paddd m9, m6
paddd m10, m4, m5
paddd m4, m6
paddd m8, m7, m6
paddd m7, m9
psubd m4, m3 ; out0 (unshifted)
psubd m5, m3 ; out1 (unshifted)
paddd m2, m6 ; out2 (unshifted)
paddd m3, m10 ; out3 (unshifted)
psubd m8, m1 ; out4 (unshifted)
psubd m9, m1 ; out5 (unshifted)
paddd m6, m0 ; out6 (unshifted)
paddd m7, m1 ; out7 (unshifted)
ret
INV_TXFM_16X4_FN flipadst, dct
INV_TXFM_16X4_FN flipadst, adst
INV_TXFM_16X4_FN flipadst, flipadst
INV_TXFM_16X4_FN flipadst, identity
cglobal iflipadst_16x4_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
call m(iadst_4x16_internal_10bpc).main
psrad m11, 11 ; pd_1
paddd m4, m3, m11
paddd m3, m5, m11
paddd m5, m2, m11
paddd m2, m6, m11
paddd m6, m1, m11
paddd m1, m7, m11
paddd m7, m0, m11
paddd m0, m8, m11
jmp m(iadst_16x4_internal_10bpc).pass1_end
.pass2:
call m(idct_16x4_internal_10bpc).transpose_4x16_packed
lea r6, [deint_shuf+128]
call m(iadst_16x4_internal_8bpc).main
vpbroadcastd m4, [pw_2048]
pmulhrsw m5, m3, m4
pmulhrsw m6, m2, m4
pmulhrsw m2, m1, m4
pmulhrsw m3, m0, m4
paddw m0, m5, [dstq+strideq*0]
paddw m1, m6, [dstq+strideq*1]
vpbroadcastd m5, [pixel_10bpc_max]
jmp m(idct_16x4_internal_10bpc).end3
INV_TXFM_16X4_FN identity, dct
INV_TXFM_16X4_FN identity, adst
INV_TXFM_16X4_FN identity, flipadst
INV_TXFM_16X4_FN identity, identity
cglobal iidentity_16x4_internal_10bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m8, [pd_5793]
vpermq m0, [cq+32*0], q3120 ; 0 1
vpermq m1, [cq+32*1], q3120 ; 2 3
vpermq m2, [cq+32*2], q3120 ; 4 5
vpermq m3, [cq+32*3], q3120 ; 6 7
vpermq m4, [cq+32*4], q3120 ; 8 9
vpermq m5, [cq+32*5], q3120 ; a b
vpermq m6, [cq+32*6], q3120 ; c d
vpermq m7, [cq+32*7], q3120 ; e f
vpbroadcastd m9, [pd_3072]
REPX {pmulld x, m8}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {paddd x, m9}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12}, m0, m1, m2, m3, m4, m5, m6, m7
jmp tx2q
.pass2:
call m(idct_16x4_internal_10bpc).transpose_4x16_packed
vpbroadcastd m7, [pw_1697x8]
pmulhrsw m4, m7, m0
pmulhrsw m5, m7, m1
pmulhrsw m6, m7, m2
pmulhrsw m7, m3
paddsw m0, m4
paddsw m1, m5
paddsw m2, m6
paddsw m3, m7
jmp m(idct_16x4_internal_10bpc).end
INV_TXFM_16X4_FN dct, dct, 12
INV_TXFM_16X4_FN dct, identity, 12
INV_TXFM_16X4_FN dct, adst, 12
INV_TXFM_16X4_FN dct, flipadst, 12
cglobal idct_16x4_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m8, [clip_20b_min]
vpbroadcastd m9, [clip_20b_max]
jmp m(idct_16x4_internal_10bpc).pass1
.pass2:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
; deinterleave
REPX {pshufd x, x, q3120}, m0, m1, m2, m3, m4, m5, m6, m7
; transpose
punpcklqdq m8, m0, m1
punpckhqdq m0, m1
punpcklqdq m9, m2, m3
punpckhqdq m2, m3
punpcklqdq m10, m4, m5
punpckhqdq m4, m5
punpcklqdq m11, m6, m7
punpckhqdq m6, m7
vperm2i128 m3, m0, m2, 0x31 ; out6
vperm2i128 m1, m0, m2, 0x20 ; out2
vperm2i128 m7, m4, m6, 0x31 ; out7
vperm2i128 m5, m4, m6, 0x20 ; out3
vperm2i128 m13, m10, m11, 0x31 ; out5
vperm2i128 m12, m10, m11, 0x20 ; out1
vperm2i128 m11, m8, m9, 0x31 ; out4
vperm2i128 m10, m8, m9, 0x20 ; out0
call m(idct_4x16_internal_10bpc).pass1_main
pmulld m0, m6, m10
pmulld m2, m6, m11
pmulld m4, m6, m12
pmulld m6, m13
vpbroadcastd m10, [pd_17408]
call m(idct_4x16_internal_10bpc).pass1_main2
REPX {psrad x, 4}, m0, m1, m2, m3, m4, m5, m6, m7
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
vpbroadcastd m5, [pixel_12bpc_max]
REPX {vpermq x, x, q3120}, m0, m1, m2, m3
jmp m(idct_16x4_internal_10bpc).end2
INV_TXFM_16X4_FN adst, dct, 12
INV_TXFM_16X4_FN adst, adst, 12
INV_TXFM_16X4_FN adst, flipadst, 12
INV_TXFM_16X4_FN adst, identity, 12
cglobal iadst_16x4_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iadst_16x4_internal_10bpc).pass1
.pass2:
call .pass2_main
REPX {vpermq x, x, q3120}, m0, m1, m2, m3
REPX {pmulhrsw x, m4}, m0, m1, m2, m3
jmp m(idct_16x4_internal_10bpc).end2
ALIGN function_align
.pass2_main:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m6, m7
pmaxsd m8, m4, m12
pmaxsd m9, m5, m12
REPX {pminsd x, m13}, m0, m1, m2, m3
call m(iadst_8x4_internal_12bpc).transpose_4x8
mova [cq+32*0], m0
mova [cq+32*2], m1
mova [cq+32*4], m2
mova [cq+32*6], m3
pminsd m0, m8, m13
pminsd m1, m9, m13
pminsd m2, m6, m13
pminsd m3, m7, m13
call m(iadst_8x4_internal_12bpc).transpose_4x8
mova [cq+32*1], m0
mova [cq+32*3], m1
mova [cq+32*5], m2
mova [cq+32*7], m3
call m(iadst_16x4_internal_10bpc).main
vpbroadcastd m6, [pd_2048]
call m(iadst_16x4_internal_10bpc).main_end
psrad m0, m4, 15
psrad m1, m5, 15
psrad m2, 15
psrad m3, 15
psrad m4, m8, 15
psrad m5, m9, 15
psrad m6, 15
psrad m7, 15
packssdw m0, m4
packssdw m1, m5
packssdw m2, m6
packssdw m3, m7
vpbroadcastd m4, [pw_16384]
vpbroadcastd m5, [pixel_12bpc_max]
ret
INV_TXFM_16X4_FN flipadst, dct, 12
INV_TXFM_16X4_FN flipadst, adst, 12
INV_TXFM_16X4_FN flipadst, flipadst, 12
INV_TXFM_16X4_FN flipadst, identity, 12
cglobal iflipadst_16x4_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(iflipadst_16x4_internal_10bpc).pass1
.pass2:
call m(iadst_16x4_internal_12bpc).pass2_main
vpermq m7, m0, q3120
vpermq m6, m1, q3120
vpermq m1, m2, q3120
vpermq m0, m3, q3120
pmulhrsw m0, m4
pmulhrsw m1, m4
pmulhrsw m2, m6, m4
pmulhrsw m3, m7, m4
jmp m(idct_16x4_internal_10bpc).end2
INV_TXFM_16X4_FN identity, dct, 12
INV_TXFM_16X4_FN identity, adst, 12
INV_TXFM_16X4_FN identity, flipadst, 12
INV_TXFM_16X4_FN identity, identity, 12
cglobal iidentity_16x4_internal_12bpc, 0, 7, 14, dst, stride, c, eob, tx2
vpbroadcastd m8, [pd_1697]
vpermq m0, [cq+32*0], q3120 ; 0 1
vpermq m1, [cq+32*1], q3120 ; 2 3
vpermq m2, [cq+32*2], q3120 ; 4 5
vpermq m3, [cq+32*3], q3120 ; 6 7
vpbroadcastd m9, [pd_3072]
pmulld m4, m8, m0
pmulld m5, m8, m1
pmulld m6, m8, m2
pmulld m7, m8, m3
vpermq m10, [cq+32*4], q3120 ; 8 9
vpermq m11, [cq+32*5], q3120 ; a b
vpermq m12, [cq+32*6], q3120 ; c d
vpermq m13, [cq+32*7], q3120 ; e f
REPX {paddd x, m9}, m4, m5, m6, m7
REPX {psrad x, 12}, m4, m5, m6, m7
paddd m0, m4
pmulld m4, m8, m10
paddd m1, m5
pmulld m5, m8, m11
paddd m2, m6
pmulld m6, m8, m12
paddd m3, m7
pmulld m7, m8, m13
REPX {paddd x, m9}, m4, m5, m6, m7
REPX {psrad x, 12}, m4, m5, m6, m7
paddd m4, m10
paddd m5, m11
paddd m6, m12
paddd m7, m13
jmp tx2q
.pass2:
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
vpbroadcastd m8, [pd_5793]
vpbroadcastd m9, [pd_2048]
REPX {pmulld x, m8}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {paddd x, m9}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 15}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_16x4_internal_10bpc).transpose_4x16_packed
vpbroadcastd m4, [pw_16384]
REPX {pmulhrsw x, m4}, m0, m1, m2, m3
vpbroadcastd m5, [pixel_12bpc_max]
jmp m(idct_16x4_internal_10bpc).end2
%macro INV_TXFM_16X8_FN 2-3 10 ; type1, type2, bitdepth
INV_TXFM_FN %1, %2, 0, 16x8, %3
%ifidn %1_%2, dct_dct
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_%3bpc]
mov [cq], eobd ; 0
or r3d, 8
add r6d, 128
sar r6d, 8
imul r6d, 181
jmp m(inv_txfm_add_dct_dct_16x4_10bpc).dconly2
%endif
%endmacro
INV_TXFM_16X8_FN dct, dct
INV_TXFM_16X8_FN dct, identity
INV_TXFM_16X8_FN dct, adst
INV_TXFM_16X8_FN dct, flipadst
cglobal idct_16x8_internal_10bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
vpbroadcastd m14, [pd_2896]
pmulld m0, m14, [cq+32* 1]
pmulld m1, m14, [cq+32* 3]
pmulld m2, m14, [cq+32* 5]
pmulld m3, m14, [cq+32* 7]
pmulld m4, m14, [cq+32* 9]
pmulld m5, m14, [cq+32*11]
pmulld m6, m14, [cq+32*13]
pmulld m7, m14, [cq+32*15]
vpbroadcastd m11, [pd_2048]
lea r6, [rsp+32*4]
call m(idct_8x16_internal_10bpc).main_oddhalf_rect2
pmulld m0, m14, [cq+32* 0]
pmulld m1, m14, [cq+32* 2]
pmulld m2, m14, [cq+32* 4]
pmulld m3, m14, [cq+32* 6]
pmulld m4, m14, [cq+32* 8]
pmulld m5, m14, [cq+32*10]
pmulld m6, m14, [cq+32*12]
pmulld m7, m14, [cq+32*14]
call m(idct_8x8_internal_10bpc).main_rect2
call m(idct_8x16_internal_10bpc).main_evenhalf
psrld m11, 11 ; pd_1
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
call .pass1_rotations
REPX {psrad x, 1}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call .transpose
call m(idct_16x8_internal_8bpc).main
vpbroadcastd m10, [pw_2048]
.end:
pmulhrsw m0, m10
pmulhrsw m1, m10
pmulhrsw m2, m10
pmulhrsw m3, m10
call .write_16x4_start
.end2:
pmulhrsw m0, m4, m10
pmulhrsw m1, m5, m10
pmulhrsw m2, m6, m10
pmulhrsw m3, m7, m10
call .write_16x4_zero
RET
ALIGN function_align
.pass1_rotations:
mova m14, [r6-32*4]
mova m13, [r6-32*3]
mova m12, [r6-32*2]
mova m11, [r6-32*1]
mova m10, [r6+32*0]
mova m9, [r6+32*1]
mova m8, [r6+32*2]
psubd m15, m0, m14 ; out15
paddd m0, m14 ; out0
psubd m14, m1, m13 ; out14
paddd m1, m13 ; out1
psubd m13, m2, m12 ; out13
paddd m2, m12 ; out2
psubd m12, m3, m11 ; out12
paddd m3, m11 ; out3
psubd m11, m4, m10 ; out11
paddd m4, m10 ; out4
psubd m10, m5, m9 ; out10
paddd m5, m9 ; out5
psubd m9, m6, m8 ; out9
paddd m6, m8 ; out6
psubd m8, m7, [r6+32*3] ; out8
paddd m7, [r6+32*3] ; out7
ret
ALIGN function_align
.transpose:
lea r6, [deint_shuf+128]
.transpose2:
packssdw m0, m8
packssdw m1, m9
packssdw m2, m10
packssdw m3, m11
packssdw m4, m12
packssdw m5, m13
packssdw m6, m14
packssdw m7, m15
.transpose3:
punpckhwd m8, m0, m1
punpcklwd m0, m1
punpcklwd m1, m2, m3
punpckhwd m2, m3
punpckhwd m3, m4, m5
punpcklwd m4, m5
punpckhwd m5, m6, m7
punpcklwd m6, m7
punpckhdq m7, m4, m6
punpckldq m4, m6
punpckldq m6, m8, m2
punpckhdq m8, m2
punpckhdq m2, m0, m1
punpckldq m0, m1
punpckhdq m1, m3, m5
punpckldq m3, m5
punpcklqdq m5, m6, m3
punpckhqdq m6, m3
punpckhqdq m3, m2, m7
punpcklqdq m2, m7
punpcklqdq m7, m8, m1
punpckhqdq m8, m1
punpckhqdq m1, m0, m4
punpcklqdq m0, m4
vperm2i128 m4, m0, m5, 0x31
vinserti128 m0, xm5, 1
vperm2i128 m5, m1, m6, 0x31
vinserti128 m1, xm6, 1
vperm2i128 m6, m2, m7, 0x31
vinserti128 m2, xm7, 1
vperm2i128 m7, m3, m8, 0x31
vinserti128 m3, xm8, 1
ret
ALIGN function_align
.write_16x4_start:
vpbroadcastd m9, [pixel_10bpc_max]
lea r3, [strideq*3]
pxor m8, m8
.write_16x4_zero:
REPX {mova [cq+32*x], m8}, 0, 1, 2, 3, 4, 5, 6, 7
add cq, 32*8
.write_16x4:
paddw m0, [dstq+strideq*0]
paddw m1, [dstq+strideq*1]
paddw m2, [dstq+strideq*2]
paddw m3, [dstq+r3 ]
REPX {pmaxsw x, m8}, m0, m1, m2, m3
REPX {pminsw x, m9}, m0, m1, m2, m3
mova [dstq+strideq*0], m0
mova [dstq+strideq*1], m1
mova [dstq+strideq*2], m2
mova [dstq+r3 ], m3
lea dstq, [dstq+strideq*4]
ret
INV_TXFM_16X8_FN adst, dct
INV_TXFM_16X8_FN adst, adst
INV_TXFM_16X8_FN adst, flipadst
INV_TXFM_16X8_FN adst, identity
cglobal iadst_16x8_internal_10bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
.pass1:
lea r6, [rsp+32*4]
call .main
vpbroadcastd m14, [pd_3072]
psrld m15, 11 ; pd_1
psubd m13, m14, m15 ; pd_3071
call .pass1_rotations
.pass1_end:
REPX {psrad x, 1 }, m0, m1, m2, m3, m12, m13, m14, m15
REPX {psrad x, 12}, m4, m5, m6, m7, m8, m9, m10, m11
jmp tx2q
.pass2:
call m(idct_16x8_internal_10bpc).transpose
call m(iadst_16x8_internal_8bpc).main
call m(iadst_16x8_internal_8bpc).main_pass2_end
vpbroadcastd m10, [pw_2048]
pxor m11, m11
psubw m11, m10
pmulhrsw m0, m10
pmulhrsw m1, m11
pmulhrsw m2, m10
pmulhrsw m3, m11
call m(idct_16x8_internal_10bpc).write_16x4_start
pmulhrsw m0, m4, m10
pmulhrsw m1, m5, m11
pmulhrsw m2, m6, m10
pmulhrsw m3, m7, m11
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
ALIGN function_align
.pass1_rotations:
paddd m0, m15
psubd m1, m15, m1
paddd m2, m15
psubd m3, m15, m3
paddd m4, m14
psubd m5, m13, m5
paddd m6, m14
psubd m7, m13, m7
paddd m8, m14, m9
psubd m9, m13, m10
paddd m10, m14, m11
psubd m11, m13, m12
paddd m12, m15, [r6-32*1]
psubd m13, m15, [r6-32*2]
paddd m14, m15, [r6-32*3]
psubd m15, [r6-32*4]
ret
ALIGN function_align
.main:
; expects: m13 = clip_min m14 = clip_max
m0,
pmulld m0, m15, [cq+32* 2]
pmulld m1, m15, [cq+32*13]
pmulld m2, m15, [cq+32* 6]
pmulld m3, m15, [cq+32* 9]
pmulld m4, m15, [cq+32*10]
pmulld m5, m15, [cq+32* 5]
java.lang.StringIndexOutOfBoundsException: Range [25, 10) out of bounds for length 44
pmulld m7, m15, [cq+32* 1]
vpbroadcastd m12, [pd_2048]
REPX {paddd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
call .main_part1
pmulld m0, m15, [cq+32* 0]
pmulld m1, m15, [cq+32*15]
pmulld m2, m15, [cq+32* 4]
pmulld m3, m15, [cq+32*11]
pmulld m4, m15, [cq+32* 8]
pmulld m5, m15, [cq+32* 7]
pmulld m6, m15, [cq+32*12]
pmulld m7, m15, [cq+32* 3]
REPX {paddd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
.main_part2:
ITX_MULSUB_2D 1, 0, 8, 9, 10, 12, 201, 4091
ITX_MULSUB_2D 3, 2, 8, 9, 10, 12, 1751, 3703
ITX_MULSUB_2D 5, 4, 8, 9, 10, 12, 3035, 2751
ITX_MULSUB_2D 7, 6, 8, 9, 10, 12, 3857, 1380
psubd m8, m0, m4 ; t8a
paddd m0, m4 ; t0a
psubd m4, m1, m5 ; t9a
paddd m1, m5 ; t1a
psubd m5, m2, m6 ; t12a
paddd m2, m6 ; t4a
psubd m6, m3, m7 ; t13a
paddd m7, m3 ; t5a
REPX {pmaxsd x, m13}, m8, m4, m5, m6, m0, m1, m2, m7
REPX {pminsd x, m14}, m8, m4, m5, m6, m0, m1, m2, m7
vpbroadcastd m11, [pd_4017]
vpbroadcastd m10, [pd_799]
ITX_MULSUB_2D 8, 4, 3, 9, _, 12, 10, 11
ITX_MULSUB_2D 6, 5, 3, 9, _, 12, 11, 10
psubd m3, m0, m2 ; t4
paddd m0, m2 ; t0
,
paddd m1, m7 ; t1
psubd m7, m4, m6 ; t12a
paddd m4, m6 ; t8a
psubd m6, m8, m5 ; t13a
paddd m5, m8 ; t9a
REPX {pmaxsd x, m13}, m3, m2, m7, m6, m0, m1, m4, m5
REPX {pminsd x, m14}, m3, m2, m7, m6, m0, m1, m4, m5
vpbroadcastd m11, [pd_3784]
vpbroadcastd m10, [pd_1567]
ITX_MULSUB_2D 3, 2, 8, 9, _, 12, 10, 11
ITX_MULSUB_2D 7, 6, 8, 9, _, 12, 10, 11
pminsd m10, m14, [r6-32*4] ; t2
pminsd m8, m14, [r6-32*3] ; t3
psubd m9, m0, m10 ; t2a
m0 ; out0
psubd m10, m1, m8 ; t3a
paddd m1, m8 ; -out15
pmaxsd m9, m13
pmaxsd m10, m13
pminsd m9, m14
ITX_MULSUB_2D 8 ,3 , ,, 0 11
mova [r6-32*4ITX_MULSUB_2D ,5 3,9,_ ,10
mova m11, psubd ,m0,m2; t4
mova m1, [r6-32*2] ; t6a
psubd m8, m3, m11 ; t7
paddd m11, m3 paddd m0, m2 ; t0
paddd m3, m2, m1 ; -out3
psubd m2, m1 ; t6
pmaxsd m8, m13
pmaxsd m2, m13
pminsd m8, m14
pminsd m2, m14
mova [r6-32*] m11
mova [r6-32*3], m2
mova m1, [r6+32*3] ; t15
mova m2, [r6+32*2] ; t14
paddd m12, m7, m1 ; -out13
psubd m7, m1 ; t15a
psubd m11, m6, m2 ; t14a
paddd m2, m6 ; out2
pmaxsd m7, m13
pmaxsd m11, m13
pminsd m14
pminsd m11, m14
mova [r6-32*2], m12
pminsd m1, m14, [r6+32*0] ; t10a
pminsd m12, m14, [r6+32*1] ; t11a
psubd m6, m4, m1 ; t10
paddd m1, m4 ; -out1
psubd m4, m5, m12 ; t11
paddd m5, m12 ; out14
vpbroadcastd m12, [pd_1448]
pmaxsd m6, m13
pmaxsd m4, m13
pminsd m6, m14
pminsd m4, m14
REPX {pmulld x, m12}, m9, m10, m8, m7, m11, m6, m4
, r32*]
mova [632*3] m5
paddd m5, m11, m7 ; -out5 (unshifted)
psubd m11, m7 ; out10 (unshifted)
paddd m7, m9, m10 ; -out7 (unshifted)
psubd m9, m10 ; out8 (unshifted)
psubd m10, m6, m4 ; -out9 (unshifted)
paddd m6, m4 ; out6 (unshifted)
paddd m4, m12, m8 ; out4 (unshifted)
psubd m12, m8 ; -out11 (unshifted)
ret
.main_part1:
ITX_MULSUB_2D 1, 0, 8, 9, 10, 12, 995, 3973
ITX_MULSUB_2D 3, 2, 8, 9, 10, 12, 2440, 3290
ITX_MULSUB_2D 5, 4, 8, 9, 10, 12, 3513, 2106
ITX_MULSUB_2D 7, 6, 8, 9, 10, 12, 4052, 601
psubd m8, m0, m4 ; t10a
paddd m0, m4 ; t2a
psubd m4, m1, m5 ; t11a
paddd m1, m5 ; t3a
psubd m5, m2, m6 ; t14a
paddd m2, m6 ; t6a
psubd m6, m3, m7 ; t15a
paddd m7, m3 ; t7a
REPX {pmaxsd x, m13}, m8, m4, m5, m6, m0, m1, m2, m7
REPX {pminsd x, m14}, m8, m4, m5, m6, m0, m1, m2, m7
vpbroadcastd m11, [pd_2276]
vpbroadcastd m10, [pd_3406]
ITX_MULSUB_2D 8, 4, 3, 9, _, 12, 10, 11
ITX_MULSUB_2D 6, 5, 3, 9, _, 12, 11, 10
psubd m3, m0, m2 ; t6
paddd m0, m2 ; t2
psubd m2, m1, m7 ; t7
paddd m1, m7 ; t3
psubd m7, m4, m6 ; t14a
paddd m4, m6 ; t10a
psubd m6, m8, m5 ; t15a
java.lang.StringIndexOutOfBoundsException: Range [27, 9) out of bounds for length 42
{ ,},m3 m2,m7 m6,m0,m1,m4,m5
REPX {pminsd x, m14}, m3, m2, m7, m6 ; clip the rest later
vpbroadcastd m11, [pd_1567]
vpbroadcastd m10, [pd_3784]
ITX_MULSUB_2D 2, 3, 8, 9, _, 12, 10, 11
ITX_MULSUB_2D 6, 7, 8, 9, _, 12, 10, 11
mova [r6-32*4], m0
mova [r6-32*3], m1
mova [r6+32*0], m4
mova [r6+32*1], m5
mova [r6-32*2], m2
mova [r6-32*1], m3
mova [r6+32*2], m6
mova [r6+32*3], m7
ret
INV_TXFM_16X8_FN flipadst, dct
INV_TXFM_16X8_FN flipadst, adst
INV_TXFM_16X8_FN flipadst, flipadst
INV_TXFM_16X8_FN flipadst, identity
cglobal iflipadst_16x8_internal_10bpc,8 ,3 ,_ ,10 11
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
.pass1:
lea r6, [rsp+32*4]
call m(iadst_16x8_internal_10bpc).main
vpbroadcastd m14, [pd_3072]
psrld m15, 11
psubd m13, m14, m15
call .pass1_rotations
jmp m(iadst_16x8_internal_10bpc).pass1_end
.pass2:
call m(idct_16x8_internal_10bpc).transpose
callm(adst_16x8_internal_8bpc).main
call m(iadst_16x8_internal_8bpc).main_pass2_end
vpbroadcastd m10, [pw_2048]
pxor m11, m11
psubw m11, m10
mova m12, m0
pmulhrsw m0, m7, m11
mova m7, m1
pmulhrsw m1, m6, m10
mova m6, m2
pmulhrsw m2, m5, m11
mova m5,m3
pmulhrsw m3, m4, m10
call m(idct_16x8_internal_10bpc).write_16x4_start
pmulhrsw m0, m5, m11
pmulhrsw m1, m6, m10
pmulhrsw m2, m7, m11
pmulhrsw m3, m12, m10
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
ALIGN function_align
.pass1_rotations:
psubd m8, m13, m7
paddd m7, m14, m9
paddd m9, m14, m6
psubd m6, m13, m10
psubd m10, m13, m5
paddd m5, m14, m11
paddd m11, m14, m4
psubd m4, m13, m12
psubd m12, m15, m3
paddd m3, m15, [r6-32*1]
paddd m13, m15, m2
psubd m2, m15, [r6-32*2]
psubd m14, m15, m1
mova m1, m15
paddd m15, m0
psubd m0, m1, [r6-32*4]
paddd m1, [r6-32*3]
ret
INV_TXFM_16X8_FN identity, dct
INV_TXFM_16X8_FN identity, adst
INV_TXFM_16X8_FN identity, flipadst
INV_TXFM_16X8_FN identity, identity
cglobal iidentity_16x8_internal_10bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
.pass1:
vpbroadcastd m15, [pd_2896]
pmulld m0, m15, [cq+32* 0]
pmulld m1, m15, [cq+32* 1]
pmulld m2, m15, [cq+32* 2]
pmulld m3, m15, [cq+32* 3]
pmulld m4, m15, [cq+32* 4]
pmulld m5, m15, [cq+32* 5]
pmulld m6, m15, [cq+32* 6]
pmulld m7, m15, [cq+32* 7]
pmulld m8, m15, [cq+32* 8]
pmulld m9, m15, [cq+32* 9]
pmulld m10, m15, [cq+32*10]
pmulld m11, m15, [cq+32*11]
pmulld m12, m15, [cq+32*12]
pmulld m13, m15, [cq+32*13]
pmulld m14, m15, [cq+32*14]
pmulld m15, [cq+32*15]
mova [rsp], m7
vpbroadcastd m7, [pd_2048]
REPX {paddd x, m7 }, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
paddd m7, [rsp]
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
mova [rsp], m15
vpbroadcastd m15, [pd_5793]
REPX {pmulld x, m15}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14
pmulld m15, [rsp]
mova [rsp], m7
vpbroadcastd m7, [pd_3072]
REPX {paddd x, m7 }, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
paddd m7, [rsp]
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call m(idct_16x8_internal_10bpc).transpose
vpbroadcastd m10, [pw_4096]
jmp m(idct_16x8_internal_10bpc).end
INV_TXFM_16X8_FN dct, dct, 12
INV_TXFM_16X8_FN dct, identity, 12
INV_TXFM_16X8_FN dct, adst, 12
INV_TXFM_16X8_FN dct, flipadst, 12
cglobal idct_16x8_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(idct_16x8_internal_10bpc).pass1
.pass2:
call .pass2_main
RET
ALIGN function_align
.pass2_main:
call m(idct_8x16_internal_12bpc).transpose
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
vpbroadcastd m11, [pd_2048]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_8x8_internal_10bpc).main
call m(idct_8x8_internal_12bpc).round_shift4
mova [cq+32* 8], m0
mova [cq+32* 9], m1
mova [cq+32*10], m2
mova [cq+32*11], m3
mova [cq+32*12], m4
mova [cq+32*13], m5
mova [cq+32*14], m6
mova [cq+32*15], m7
pmaxsd m0,cglobal iflipadst_16x8_internal_10bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
pmaxsd m1, m12, [cq+32*1]
pmaxsd m2, m12, [cq+32*2]
pmaxsd m3, m12, [cq+32*3]
pmaxsd m4, m12, [cq+32*4]
pmaxsd m5, m12, [cq+32*5]
pmaxsd m6, m12, [cq+32*6]
pmaxsd m7, m12, [cq+32*7]
REPX c .
call m(idct_8x8_internal_10bpc).main
midct_8x8_internal_12bpc)round_shift4
.end:
packssdw m0, [cq+32* 8]
packssdw m1, [cq+32* 9]
packssdw m2, [cq+32*10]
packssdw m3, [cq+32*11]
packssdwpmulhrsw m0 java.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 36
m5m11
packssdw m6, [cq+32*14]
packssdw m7, [cq+32*15]
REPX {vpermq x, x, q3120}, m0, m1, m2, m3
call .write_16x4_start
call m(idct_16x8_internal_10bpc).write_16x4_zero
vpermq m0, m4, q3120
vpermq m1, m5, q3120
vpermqRET
vpermq m3, m7, q3120
jmp m(idct_16x8_internal_10bpc).write_16x4_zero
ALIGN function_align
.write_16x4_start:
vpbroadcastd m9, [pixel_12bpc_max]
lea r3, [strideq*3]
pxor m8, m8
ret
INV_TXFM_16X8_FN adst, dct, 12
INV_TXFM_16X8_FN adst, adst, 12
java.lang.StringIndexOutOfBoundsException: Range [4, 2) out of bounds for length 32
INV_TXFM_16X8_FN adst, identity, 12
cglobal iadst_16x8_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_20b_min]
vpbroadcastd m14, [clip_20b_max]
jmp m(iadst_16x8_internal_10bpc).pass1
.pass2:
call .pass2_main
call m(idct_16x8_internal_12bpc).end
RET
ALIGN function_align
.pass2_main:
call m(idct_8x16_internal_12bpc).transpose
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
vpbroadcastd m11, [pd_2048]
REPX {pmaxsd x, m12}, m0, m1, m2, m3, m4, m5, m6, m7
p ,[*]
call m(iadst_8x8_internal_12bpc).pass2_main2
mova [cq+32* 8], m0
mova [cq+32* 9], m1
mova [cq+32*10], m2
mova [cq[]
mova [cq+32*12], m4
mova [cq+32*13], m5
mova [cq+32*14], m6
mova [cq+32*15], m7
pmaxsd m0, m12, [cq+32*0]
pmaxsd m1, m12 mova , 15
pmaxsd m2, m12, [cq+32*2]
pmaxsd m3, m12, [cq+32*3]
pmaxsd m4, m12, [cq+32*4]
pmaxsd m5, m12, [cq+32*5]
pmaxsd m6, m12, [cq+32*6]
pmaxsd m7, m12, [cq+32*7]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(iadst_8x8_internal_12bpc).pass2_main2
ret
INV_TXFM_16X8_FN flipadst, dct, 12
INV_TXFM_16X8_FN flipadst, adst, 12
INV_TXFM_16X8_FN flipadst, flipadst, 12
INV_TXFM_16X8_FN flipadst, identity, 12
cglobal iflipadst_16x8_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_20b_min]
vpbroadcastd m14, [clip_20b_max]
jmp m(iflipadst_16x8_internal_10bpc).pass1
.pass2:
call m(iadst_16x8_internal_12bpc).pass2_main
packssdw m13, m0, [cq+32* 8]
packssdw m12, m1, [cq+32* 9]
packssdw m11, m2, [cq+32*10]
packssdw m10, m3, [cq+32*11]
packssdw m3, m4, [cq+32*12]
packssdw m2, m5, [cq+32*13]
packssdw m1, m6, [cq+32*14]
packssdw m0, m7, [cq+32*15]
REPX {vpermq x, x, q3120}, m0, m1, m2, m3
call m(idct_16x8_internal_12bpc).write_16x4_start
call m(idct_16x8_internal_10bpc).write_16x4_zero
vpermq m0, m10, q3120
vpermq m1, m11, q3120
vpermq m2, m12, q3120
vpermq m3, m13, q3120
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
INV_TXFM_16X8_FN identity, dct, 12
INV_TXFM_16X8_FN identity, adst, 12
INV_TXFM_16X8_FN identity, flipadst, 12
INV_TXFM_16X8_FN identity, identity, 12
cglobal iidentity_16x8_internal_12bpc, 0, 7, 16, 32*8, dst, stride, c, eob, tx2
jmp m(iidentity_16x8_internal_10bpc).pass1
.pass2:
call m(idct_16x8_internal_10bpc).transpose2
vpbroadcastd m10, [pw_4096]
pmulhrsw m0, m10
pmulhrsw m1, m10
pmulhrsw m2, m10
pmulhrsw m3, m10
call m(idct_16x8_internal_12bpc).write_16x4_start
call m(idct_16x8_internal_10bpc).write_16x4_zero
jmp m(idct_16x8_internal_10bpc).end2
%macro INV_TXFM_16X16_FN 2-4 0,10 ; type1, type2, eob_offset, bitdepth
INV_TXFM_FN %1, %2, %3, 16x16, %4
%ifidn %1_%2, dct_dct
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_%4bpc]
mov [cq], eobd ; 0
or r3d, 16
add r6d, 640
sar r6d, 10
jmp m(inv_txfm_add_dct_dct_16x4_10bpc).dconly3
%endif
%endmacro
INV_TXFM_16X16_FN dct, dct
INV_TXFM_16X16_FN dct, identity, 28
INV_TXFM_16X16_FN dct, adst
INV_TXFM_16X16_FN dct, flipadst
cglobal idct_16x16_internal_10bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
.pass1:
vpbroadcastd m11, [pd_2048]
vpbroadcastd m14, [pd_2896]
lea r6, [rsp+32*4]
sub eobd, 36
jl .fast
add cq, 32
call .main
sub cq, 32
mova m10, [r6-32*4]
mova m9, [r6-32*3]
mova m8, [r6-32*2]
psubd m15, m0, m10 ; out15
paddd m0, m10 ; out0
psubd m10, m1, m9 ; out14
paddd m1, m9 ; out1
psubd m9, m2, m8 ; out13
paddd m2, m8 ; out2
REPX {psrad x, 2}, m0, m1, m2
mova [r6-32*4], m0
mova[-32*], m1
mova [r6-32*2], m2
mova m2, [r6-32*1]
mova m1, [r6+32*0]
mova m0, [r6+32*1]
REPX {psrad x, 2}, m9, m10, m15
psubd m8, m3, m2 ; out12
paddd m3, m2 ; out3
psubd m2, m4, m1 ; out11
paddd m4, m1 ; out4
psubd m1, m5, m0 ; out10
paddd m5, m0 ; out5
REPX {psrad x, 2}, m3, m4, m5
mova [r6-32*1], m3
mova [r6+32*0], m4
mova [r6+32*1], m5
mova m4, [r6+32*2]
mova m3, [r6+32*3]
REPX {psrad x, 2}, m1, m2, m8
psubd m5, m6, m4 ; out9
paddd m6, m4 ; out6
psubd m4, m7, m3 ; out8
paddd m7, m3 ; out7
REPX {psrad x, 2}, m6, m7, m4, m5
mova [r6+32*2], m6
mova [r6+32*3], m7
add r6, 32*8
mova [r6-32*4], m4
mova [r6-32*3], m5
mova [r6-32*2], m1
mova [r6-32*1], m2
mova [r6+32*0], m8
mova [r6+32*1], m9
mova [r6+32*2], m10
mova [r6+32*3], m15
.fast:
add r6, 32*8
call .main
mova m14, [r6-32*4]
mova m13, [r6-32*3]
mova m12, [r6-32*2]
mova m11, [r6-32*1]
mova m10, [r6+32*0]
mova m9, [r6+32*1]
mova m8, [r6+32*2]
psubd m15, m0, m14 ; out15
paddd m0, m14 ; out0
psubd m14, m1, m13 ; out14
paddd m1, m13 ; out1
psubd m13, m2, m12 ; out13
paddd m2, m12 ; out2
psubd m12, m3, m11 ; out12
paddd m3, m11 ; out3
psubd m11, m4, m10 ; out11
paddd m4, m10 ; out4
psubd m10, m5, m9 ; out10
paddd m5, m9 ; out5
psubd m9, m6, m8 ; out9
paddd m6, m8 ; out6
psubd m8, m7, [r6+32*3] ; out8
paddd m7, [r6+32*3] ; out7
sub r6, 32*8
REPX {psrad x, 2}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call .transpose
lea r6, [pw_5+128]
mova [rsp], m15
call m(idct_16x16_internal_8bpc).main
mova m1, [rsp+32*1]
.end:
call .write_16x16
RET
ALIGN function_align
.write_16x16:
mova [rsp+gprsize+32*0], m8
mova [rsp+gprsize+32*1], m9
mova [rsp+gprsize+32*2], m12
vpbroadcastd m12, [pw_2048]
pmulhrsw m0, m12
pmulhrsw m1, m12
pmulhrsw m2, m12
pmulhrsw m3, m12
call m(idct_16x8_internal_10bpc).write_16x4_start
.write_16x16_2:
pmulhrsw m0, m12, m4
pmulhrsw m1, m12, m5
pmulhrsw m2, m12, m6
pmulhrsw m3, m12, m7
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m12, [rsp+gprsize+32*0]
pmulhrsw m1, m12, [rsp+gprsize+32*1]
pmulhrsw m2, m12, m10
pmulhrsw m3, m12, m11
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m12, [rsp+gprsize+32*2]
pmulhrsw m1, m12, m13
pmulhrsw m2, m12, m14
pmulhrsw m3, m12, m15
jmp m(idct_16x8_internal_10bpc).write_16x4_zero
ALIGN function_align
.transpose:
test eobd, eobd
jl .transpose_fast
packssdw m8, [r6-32*4]
packssdw m9, [r6-32*3]
packssdw m10, [r6-32*2]
packssdw m11, [r6-32*1]
packssdw m12, [r6+32*0]
packssdw m13, [r6+32*1]
packssdw m14, [r6+32*2]
packssdw m15, [r6+32*3]
sub r6, 32*8
packssdw m0, [r6-32*4]
packssdw m1, [r6-32*3]
packssdw m2, [r6-32*2]
packssdw m3, [r6-32*1]
packssdw m4, [r6+32*0]
packssdw m5, [r6+32*1]
packssdw m6, [r6+32*2]
packssdw m7, [r6+32*3]
mova [r6], m8
punpckhwd m8, m0, m1
punpcklwd m0, m1
punpcklwd m1, m2, m3
punpckhwd m2, m3
punpckhwd m3, m6, m7
punpcklwd m6, m7
punpcklwd m7, m4, m5
punpckhwd m4, m5
punpckldq m5, m8, m2
punpckhdq m8, m2
punpckhdq m2, m0, m1
punpckldq m0, m1
punpckhdq m1, m7, m6
punpckldq m7, m6
punpckhdq m6, m4, m3
punpckldq m4, m3
punpckhqdq m3, m2, m1
punpcklqdq m2, m1
punpckhqdq m1, m0, m7
punpcklqdq m0, m7
punpcklqdq m7, m8, m6
punpckhqdq m8, m6
punpckhqdq m6, m5, m4
punpcklqdq m5, m4
mova m4, [r6]
mova [r6], m8
punpcklwd m8, m4, m9
punpckhwd m4, m9
punpcklwd m9, m10, m11
punpckhwd m10, m11
punpckhwd m11, m14, m15
punpcklwd m14, m15
punpckhwd m15, m12, m13
punpcklwd m12, m13
punpckldq m13, m4, m10
punpckhdq m4, m10
punpckhdq m10, m8, m9
punpckldq m8, m9
punpckhdq m9, m12, m14
punpckldq m12, m14
punpckhdq m14, m15, m11
punpckldq m15, m11
punpckhqdq m11, m10, m9
punpcklqdq m10, m9
punpckhqdq m9, m8, m12
punpcklqdq m8, m12
punpcklqdq m12, m13, m15
punpckhqdq m13, m15
punpckhqdq m15, m4, m14
punpcklqdq m14, m4, m14
vperm2i128 m4, m0, m8, 0x31
vinserti128 m0, xm8, 1
vinserti128 m8, m5, xm12, 1
vperm2i128 m12, m5, 0x13
vperm2i128 m5, m1, m9, 0x31
vinserti128 m1, xm9, 1
vinserti128 m9, m6, xm13, 1
vperm2i128 m13, m6, 0x13
vperm2i128 m6, m2, m10, 0x31
vinserti128 m2, xm10, 1
vinserti128 m10, m7, xm14, 1
vperm2i128 m14, m7, 0x13
vperm2i128 m7, m3, m11, 0x31
vinserti128 m3, xm11, 1
mova xm11, [r6]
vinserti128 m11, xm15, 1
vinserti128 m15, [r6+16], 0
ret
.transpose_fast:
call m(idct_16x8_internal_10bpc).transpose2
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, m15
ret
ALIGN function_align
.main:
mova m0, [cq+64* 1]
mova m1, [cq+64* 3]
mova m2, [cq+64* 5]
mova m3, [cq+64* 7]
mova m4, [cq+64* 9]
mova m5, [cq+64*11]
mova m6, [cq+64*13]
mova m7, [cq+64*15]
call m(idct_8x16_internal_10bpc).main_oddhalf
mova m0, [cq+64* 0]
mova m1, [cq+64* 2]
mova m2, [cq+64* 4]
mova m3, [cq+64* 6]
mova m4, [cq+64* 8]
mova m5, [cq+64*10]
mova m6, [cq+64*12]
mova m7, [cq+64*14]
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
psrld m10, m11, 10 ; pd_2
REPX {paddd x, m10}, m0, m1, m2, m3, m4, m5, m6, m7
ret
INV_TXFM_16X16_FN adst, dct
INV_TXFM_16X16_FN adst, adst
INV_TXFM_16X16_FN adst, flipadst
cglobal iadst_16x16_internal_10bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
.pass1:
vpbroadcastd m15, [pd_2896]
lea r6, [rsp+32*4]
sub eobd, 36
jl .fast
add cq, 32
call .main
sub cq, 32
vpbroadcastd m8, [pd_5120]
paddd m4, m8
paddd m6, m8
paddd m9, m8
paddd m11, m8
vpbroadcastd m8, [pd_5119]
psubd m5, m8, m5
psubd m7, m8, m7
psubd m10, m8, m10
psubd m12, m8, m12
REPX {psrad x, 13}, m4, m5, m6, m7, m9, m10, m11, m12
mova [r6+32*0], m4
mova [r6+32*1], m5
mova [r6+32*2], m6
mova [r6+32*3], m7
psrld m4, m15, 10 ; pd_2
paddd m0, m4
psubd m1, m4, m1
paddd m2, m4
psubd m3, m4, m3
psubd m7, m4, [r6-32*4]
paddd m6, m4, [r6-32*3]
psubd m5, m4, [r6-32*2]
paddd m4, [r6-32*1]
REPX {psrad x, 2 }, m0, m1, m2, m3, m4, m5, m6, m7
mova [r6-32*4], m0
mova [r6-32*3], m1
mova [r6-32*2], m2
mova [r6-32*1], m3
add r6, 32*8
mova [r6-32*4], m9
mova [r6-32*3], m10
mova [r6-32*2], m11
mova [r6-32*1], m12
mova [r6+32*0], m4
mova [r6+32*1], m5
mova [r6+32*2], m6
mova [r6+32*3], m7
.fast:
add r6, 32*8
call .main
vpbroadcastd m14, [pd_5120]
vpbroadcastd m13, [pd_5119]
psrld m15, 10 ; pd_2
paddd m0, m15
psubd m1, m15, m1
paddd m2, m15
psubd m3, m15, m3
paddd m4, m14
psubd m5, m13, m5
paddd m6, m14
psubd m7, m13, m7
paddd m8, m14, m9
psubd m9, m13, m10
paddd m10, m14, m11
psubd m11, m13, m12
paddd m12, m15, [r6-32*1]
psubd m13, m15, [r6-32*2]
paddd m14, m15, [r6-32*3]
psubd m15, [r6-32*4]
.pass1_end:
REPX {psrad x, 2 }, m0, m1, m2, m3, m12, m13, m14, m15
REPX {psrad x, 13}, m4, m5, m6, m7, m8, m9, m10, m11
sub r6, 32*8
jmp tx2q
.pass2:
call m(idct_16x16_internal_10bpc).transpose
lea r6, [pw_5+128]
mova [rsp], m15
call m(iadst_16x16_internal_8bpc).main
call m(iadst_16x16_internal_8bpc).main_pass2_end
mova [rsp+32*0], m8
mova [rsp+32*2], m12
mova [rsp+32*3], m13
vpbroadcastd m12, [pw_2048]
pxor m13, m13
psubw m13, m12
pmulhrsw m0, m12
pmulhrsw m1, m13, [rsp+32*1]
mova [rsp+32*1], m9
pmulhrsw m2, m12
pmulhrsw m3, m13
call m(idct_16x8_internal_10bpc).write_16x4_start
pmulhrsw m0, m12, m4
pmulhrsw m1, m13, m5
pmulhrsw m2, m12, m6
pmulhrsw m3, m13, m7
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m12, [rsp+32*0]
pmulhrsw m1, m13, [rsp+32*1]
pmulhrsw m2, m12, m10
pmulhrsw m3, m13, m11
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m12, [rsp+32*2]
pmulhrsw m1, m13, [rsp+32*3]
pmulhrsw m2, m12, m14
pmulhrsw m3, m13, m15
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
ALIGN function_align
.main:
mova m0, [cq+64* 2]
mova m1, [cq+64*13]
mova m2, [cq+64* 6]
mova m3, [cq+64* 9]
mova m4, [cq+64*10]
mova m5, [cq+64* 5]
mova m6, [cq+64*14]
mova m7, [cq+64* 1]
vpbroadcastd m12, [pd_2048]
call m(iadst_16x8_internal_10bpc).main_part1
mova m0, [cq+64* 0]
mova m1, [cq+64*15]
mova m2, [cq+64* 4]
mova m3, [cq+64*11]
mova m4, [cq+64* 8]
mova m5, [cq+64* 7]
mova m6, [cq+64*12]
mova m7, [cq+64* 3]
jmp m(iadst_16x8_internal_10bpc).main_part2
INV_TXFM_16X16_FN flipadst, dct
INV_TXFM_16X16_FN flipadst, adst
INV_TXFM_16X16_FN flipadst, flipadst
cglobal iflipadst_16x16_internal_10bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
.pass1:
vpbroadcastd m15, [pd_2896]
lea r6, [rsp+32*4]
sub eobd, 36
jl .fast
add cq, 32
call m(iadst_16x16_internal_10bpc).main
sub cq, 32
vpbroadcastd m8, [pd_5120]
paddd m11, m8
paddd m9, m8
paddd m6, m8
paddd m4, m8
vpbroadcastd m8, [pd_5119]
psubd m12, m8, m12
psubd m10, m8, m10
psubd m7, m8, m7
psubd m5, m8, m5
REPX {psrad x, 13}, m12, m11, m10, m9, m7, m6, m5, m4
mova [r6+32*0], m12
mova [r6+32*1], m11
mova [r6+32*2], m10
mova [r6+32*3], m9
psrld m9, m15, 10 ; pd_2
psubd m3, m9, m3
paddd m2, m9
psubd m1, m9, m1
paddd m0, m9
psubd m12, m9, [r6-32*4]
paddd m11, m9, [r6-32*3]
psubd m10, m9, [r6-32*2]
paddd m9, [r6-32*1]
REPX {psrad x, 2 }, m12, m11, m10, m9, m3, m2, m1, m0
mova [r6-32*4], m12
mova [r6-32*3], m11
mova [r6-32*2], m10
mova [r6-32*1], m9
add r6, 32*8
mova [r6-32*4], m7
mova [r6-32*3], m6
mova [r6-32*2], m5
mova [r6-32*1], m4
mova [r6+32*0], m3
mova [r6+32*1], m2
mova [r6+32*2], m1
mova [r6+32*3], m0
.fast:
add r6, 32*8
call m(iadst_16x16_internal_10bpc).main
vpbroadcastd m14, [pd_5120]
vpbroadcastd m13, [pd_5119]
psrld m15, 10 ; pd_2
psubd m8, m13, m7
paddd m7, m14, m9
paddd m9, m14, m6
psubd m6, m13, m10
psubd m10, m13, m5
paddd m5, m14, m11
paddd m11, m14, m4
psubd m4, m13, m12
psubd m12, m15, m3
paddd m3, m15, [r6-32*1]
paddd m13, m15, m2
psubd m2, m15, [r6-32*2]
psubd m14, m15, m1
mova m1, m15
paddd m15, m0
psubd m0, m1, [r6-32*4]
paddd m1, [r6-32*3]
jmp m(iadst_16x16_internal_10bpc).pass1_end
.pass2:
call m(idct_16x16_internal_10bpc).transpose
lea r6, [pw_5+128]
mova [rsp], m15
call m(iadst_16x16_internal_8bpc).main
call m(iadst_16x16_internal_8bpc).main_pass2_end
mova [rsp+32*3], m3
mova [rsp+32*2], m2
mova [rsp+32*0], m0
mova m2, m13
mova m3, m12
vpbroadcastd m12, [pw_2048]
pxor m13, m13
psubw m13, m12
pmulhrsw m0, m13, m15
pmulhrsw m1, m12, m14
pmulhrsw m2, m13
pmulhrsw m3, m12
mova m14, m8
mova m15, m9
call m(idct_16x8_internal_10bpc).write_16x4_start
pmulhrsw m0, m13, m11
pmulhrsw m1, m12, m10
pmulhrsw m2, m13, m15
pmulhrsw m3, m12, m14
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m13, m7
pmulhrsw m1, m12, m6
pmulhrsw m2, m13, m5
pmulhrsw m3, m12, m4
call m(idct_16x8_internal_10bpc).write_16x4_zero
pmulhrsw m0, m13, [rsp+32*3]
pmulhrsw m1, m12, [rsp+32*2]
pmulhrsw m2, m13, [rsp+32*1]
pmulhrsw m3, m12, [rsp+32*0]
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
INV_TXFM_16X16_FN identity, dct, -92
INV_TXFM_16X16_FN identity, identity
cglobal iidentity_16x16_internal_10bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m15, [pd_5793]
vpbroadcastd m7, [pd_5120]
lea r6, [rsp+32*4]
sub eobd, 36
jl .fast
mov r3, -32*8*4
.righthalf:
pmulld m0, m15, [cq+r3+32*33]
pmulld m1, m15, [cq+r3+32*35]
pmulld m2, m15, [cq+r3+32*37]
pmulld m3, m15, [cq+r3+32*39]
add r6, 32*4
REPX {paddd x, m7}, m0, m1, m2, m3
REPX {psrad x, 13}, m0, m1, m2, m3
mova [r6+32*0], m0
mova [r6+32*1], m1
mova [r6+32*2], m2
mova [r6+32*3], m3
add r3, 32*8
jl .righthalf
.fast:
pmulld m0, m15, [cq+64* 0]
pmulld m1, m15, [cq+64* 1]
pmulld m2, m15, [cq+64* 2]
pmulld m3, m15, [cq+64* 3]
pmulld m4, m15, [cq+64* 4]
pmulld m5, m15, [cq+64* 5]
pmulld m6, m15, [cq+64* 6]
pmulld m8, m15, [cq+64* 7]
mova [cq], m8
pmulld m8, m15, [cq+64* 8]
pmulld m9, m15, [cq+64* 9]
pmulld m10, m15, [cq+64*10]
pmulld m11, m15, [cq+64*11]
pmulld m12, m15, [cq+64*12]
pmulld m13, m15, [cq+64*13]
pmulld m14, m15, [cq+64*14]
pmulld m15, [cq+64*15]
REPX {paddd x, m7}, m0, m1, m2, m3, m4, m5, m6, \
m8, m9, m10, m11, m12, m13, m14, m15
paddd m7, [cq]
REPX {psrad x, 13}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
jmp tx2q
.pass2:
call m(idct_16x16_internal_10bpc).transpose
mova [cq+32*0], m15
mova [cq+32*1], m0
vpbroadcastd m15, [pw_1697x16]
REPX {IDTX16 x, 0, 15}, 1, 2, 3, 4, 5, 6, 7, \
8, 9, 10, 11, 12, 13, 14
mova m0, [cq+32*1]
mova [cq+32*1], m1
IDTX16 0, 1, 15
mova m1, [cq+32*0]
pmulhrsw m15, m1
paddsw m1, m1
paddsw m15, m1
mova m1, [cq+32*1]
jmp m(idct_16x16_internal_10bpc).end
INV_TXFM_16X16_FN dct, dct, 0, 12
INV_TXFM_16X16_FN dct, identity, 28, 12
INV_TXFM_16X16_FN dct, adst, 0, 12
INV_TXFM_16X16_FN dct, flipadst, 0, 12
cglobal idct_16x16_internal_12bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
jmp m(idct_16x16_internal_10bpc).pass1
.pass2:
mova [cq+32* 8], m8
mova [cq+32* 9], m9
mova [cq+32*10], m10
mova [cq+32*11], m11
mova [cq+32*12], m12
mova [cq+32*13], m13
mova [cq+32*14], m14
mova [cq+32*15], m15
call .pass2_main
packssdw m0, m1
packssdw m1, m2, m3
packssdw m2, m4, m5
packssdw m3, m6, m7
packssdw m4, m8, m9
packssdw m5, m10, m11
packssdw m6, m12, m13
packssdw m7, m14, m15
mova [r6-32*4], m0
mova [r6-32*3], m1
mova [r6-32*2], m2
mova [r6-32*1], m3
mova [r6+32*0], m4
mova [r6+32*1], m5
mova [r6+32*2], m6
mova [r6+32*3], m7
mova m0, [cq+32* 8]
mova m1, [cq+32* 9]
mova m2, [cq+32*10]
mova m3, [cq+32*11]
mova m4, [cq+32*12]
mova m5, [cq+32*13]
mova m6, [cq+32*14]
mova m7, [cq+32*15]
mov r5, r6
add r6, 32*16
call .pass2_main
jmp m(iadst_16x16_internal_12bpc).end
ALIGN function_align
.write_16x16:
mova [rsp+gprsize+32*0], m8
mova [rsp+gprsize+32*1], m9
mova [rsp+gprsize+32*2], m12
vpbroadcastd m12, [pw_16384]
pmulhrsw m0, m12
pmulhrsw m1, m12
pmulhrsw m2, m12
pmulhrsw m3, m12
call m(idct_16x8_internal_12bpc).write_16x4_start
call m(idct_16x8_internal_10bpc).write_16x4_zero
jmp m(idct_16x16_internal_10bpc).write_16x16_2
ALIGN function_align
.pass2_main:
call m(idct_8x8_internal_12bpc).transpose_8x8
mova [cq+32* 0], m0
mova [cq+32* 1], m2
mova [cq+32* 2], m4
mova [cq+32* 3], m6
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
pmaxsd m0, m12, m1
pmaxsd m1, m12, m3
pmaxsd m2, m12, m5
pmaxsd m3, m12, m7
REPX {pminsd x, m13}, m0, m1, m2, m3
test eobd, eobd
jge .pass2_slow
pxor m4, m4
REPX {mova x, m4}, m5, m6, m7
jmp .pass2_fast
.pass2_slow:
sub r6, 32*8
mova m8, [r6-32*4]
mova m4, [r6-32*3]
mova m10, [r6-32*2]
mova m5, [r6-32*1]
mova m12, [r6+32*0]
mova m6, [r6+32*1]
mova m14, [r6+32*2]
mova m7, [r6+32*3]
TRANSPOSE_8X8_DWORD 8, 4, 10, 5, 12, 6, 14, 7, 9, 11, 13, 15
mova [cq+32* 4], m8
mova [cq+32* 5], m10
mova [cq+32* 6], m12
mova [cq+32* 7], m14
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
REPX {pmaxsd x, m12}, m4, m5, m6, m7
REPX {pminsd x, m13}, m4, m5, m6, m7
.pass2_fast:
vpbroadcastd m11, [pd_2048]
vpbroadcastd m14, [pd_2896]
call m(idct_8x16_internal_10bpc).main_oddhalf
pmaxsd m0, m12, [cq+32* 0]
pmaxsd m1, m12, [cq+32* 1]
pmaxsd m2, m12, [cq+32* 2]
pmaxsd m3, m12, [cq+32* 3]
REPX {pminsd x, m13}, m0, m1, m2, m3
test eobd, eobd
jge .pass2_slow2
pxor m4, m4
REPX {mova x, m4}, m5, m6, m7
jmp .pass2_fast2
.pass2_slow2:
pmaxsd m4, m12, [cq+32* 4]
pmaxsd m5, m12, [cq+32* 5]
pmaxsd m6, m12, [cq+32* 6]
pmaxsd m7, m12, [cq+32* 7]
REPX {pminsd x, m13}, m4, m5, m6, m7
.pass2_fast2:
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
psrad m11, 8 ; pd_8
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_16x8_internal_10bpc).pass1_rotations
REPX {psrad x, 4}, m0, m1, m2, m3, m4, m5, m6, m7, \
m8, m9, m10, m11, m12, m13, m14, m15
ret
INV_TXFM_16X16_FN adst, dct, 0, 12
INV_TXFM_16X16_FN adst, adst, 0, 12
INV_TXFM_16X16_FN adst, flipadst, 0, 12
cglobal iadst_16x16_internal_12bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_20b_min]
vpbroadcastd m14, [clip_20b_max]
jmp m(iadst_16x16_internal_10bpc).pass1
.pass2:
call .pass2_part1
call m(iadst_16x8_internal_10bpc).pass1_rotations
call .pass2_part2
call m(iadst_16x8_internal_10bpc).pass1_rotations
.pass2_part3:
REPX {psrad x, 4 }, m0, m1, m2, m3, m12, m13, m14, m15
REPX {psrad x, 15}, m4, m5, m6, m7, m8, m9, m10, m11
.end:
packssdw m15, m14
packssdw m14, m13, m12
packssdw m13, m11, m10
packssdw m12, m9, m8
packssdw m11, m7, m6
packssdw m10, m5, m4
packssdw m7, m3, m2
packssdw m6, m1, m0
vpblendd m0, m6, [r5-32*4], 0x33
vpblendd m1, m6, [r5-32*4], 0xcc
vpblendd m2, m7, [r5-32*3], 0x33
vpblendd m3, m7, [r5-32*3], 0xcc
vpermq m0, m0, q3120
vpermq m1, m1, q2031
vpermq m2, m2, q3120
vpermq m3, m3, q2031
call m(idct_16x8_internal_12bpc).write_16x4_start
call m(idct_16x8_internal_10bpc).write_16x4_zero
vpblendd m0, m10, [r5-32*2], 0x33
vpblendd m1, m10, [r5-32*2], 0xcc
vpblendd m2, m11, [r5-32*1], 0x33
vpblendd m3, m11, [r5-32*1], 0xcc
vpermq m0, m0, q3120
vpermq m1, m1, q2031
vpermq m2, m2, q3120
vpermq m3, m3, q2031
call m(idct_16x8_internal_10bpc).write_16x4_zero
vpblendd m0, m12, [r5+32*0], 0x33
vpblendd m1, m12, [r5+32*0], 0xcc
vpblendd m2, m13, [r5+32*1], 0x33
vpblendd m3, m13, [r5+32*1], 0xcc
vpermq m0, m0, q3120
vpermq m1, m1, q2031
vpermq m2, m2, q3120
vpermq m3, m3, q2031
call m(idct_16x8_internal_10bpc).write_16x4_zero
vpblendd m0, m14, [r5+32*2], 0x33
vpblendd m1, m14, [r5+32*2], 0xcc
vpblendd m2, m15, [r5+32*3], 0x33
vpblendd m3, m15, [r5+32*3], 0xcc
vpermq m0, m0, q3120
vpermq m1, m1, q2031
vpermq m2, m2, q3120
vpermq m3, m3, q2031
call m(idct_16x8_internal_10bpc).write_16x4_zero
RET
ALIGN function_align
.pass2_part1:
mova [cq+32* 8], m8
mova [cq+32* 9], m9
mova [cq+32*10], m10
mova [cq+32*11], m11
mova [cq+32*12], m12
mova [cq+32*13], m13
mova [cq+32*14], m14
mova [cq+32*15], m15
.pass2_main:
call m(idct_8x8_internal_12bpc).transpose_8x8
mova [cq+32* 0], m0
mova [cq+32* 1], m3
mova [cq+32* 2], m4
mova [cq+32* 3], m7
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
pmaxsd m0, m13, m2
pmaxsd m2, m13, m6
pmaxsd m5, m13, m5
pmaxsd m7, m13, m1
REPX {pminsd x, m14}, m0, m2, m5, m7
test eobd, eobd
jge .pass2_slow
pxor m1, m1
REPX {mova x, m1}, m3, m4, m6
jmp .pass2_fast
.pass2_slow:
sub r6, 32*8
mova m8, [r6-32*4]
mova m3, [r6-32*3]
mova m4, [r6-32*2]
mova m11, [r6-32*1]
mova m12, [r6+32*0]
mova m1, [r6+32*1]
mova m6, [r6+32*2]
mova m15, [r6+32*3]
TRANSPOSE_8X8_DWORD 8, 3, 4, 11, 12, 1, 6, 15, 13, 9, 10, 14
mova [cq+32* 4], m8
mova [cq+32* 5], m11
mova [cq+32* 6], m12
mova [cq+32* 7], m15
vpbroadcastd m13, [clip_18b_min]
vpbroadcastd m14, [clip_18b_max]
REPX {pmaxsd x, m13}, m1, m3, m4, m6
REPX {pminsd x, m14}, m1, m3, m4, m6
.pass2_fast:
vpbroadcastd m12, [pd_2048]
vpbroadcastd m15, [pd_2896]
call m(iadst_16x8_internal_10bpc).main_part1
pmaxsd m0, m13, [cq+32* 0] ; 0
pmaxsd m7, m13, [cq+32* 1] ; 3
pmaxsd m2, m13, [cq+32* 2] ; 4
pmaxsd m5, m13, [cq+32* 3] ; 7
REPX {pminsd x, m14}, m0, m2, m5, m7
test eobd, eobd
jge .pass2_slow2
pxor m1, m1
REPX {mova x, m1}, m3, m4, m6
jmp .pass2_fast2
.pass2_slow2:
pmaxsd m4, m13, [cq+32* 4] ; 8
pmaxsd m3, m13, [cq+32* 5] ; 11
pmaxsd m6, m13, [cq+32* 6] ; 12
pmaxsd m1, m13, [cq+32* 7] ; 15
REPX {pminsd x, m14}, m1, m3, m4, m6
.pass2_fast2:
call m(iadst_16x8_internal_10bpc).main_part2
vpbroadcastd m14, [pd_17408]
psrld m15, 11 ; pd_1
psubd m13, m14, m15 ; pd_17407
pslld m15, 3 ; pd_8
ret
ALIGN function_align
.pass2_part2:
REPX {psrad x, 4 }, m0, m1, m2, m3, m12, m13, m14, m15
REPX {psrad x, 15}, m4, m5, m6, m7, m8, m9, m10, m11
packssdw m0, m1
packssdw m1, m2, m3
packssdw m2, m4, m5
packssdw m3, m6, m7
packssdw m4, m8, m9
packssdw m5, m10, m11
packssdw m6, m12, m13
packssdw m7, m14, m15
mova [r6-32*4], m0
mova [r6-32*3], m1
mova [r6-32*2], m2
mova [r6-32*1], m3
mova [r6+32*0], m4
mova [r6+32*1], m5
mova [r6+32*2], m6
mova [r6+32*3], m7
mova m0, [cq+32* 8]
mova m1, [cq+32* 9]
mova m2, [cq+32*10]
mova m3, [cq+32*11]
mova m4, [cq+32*12]
mova m5, [cq+32*13]
mova m6, [cq+32*14]
mova m7, [cq+32*15]
mov r5, r6
add r6, 32*16
jmp .pass2_main
INV_TXFM_16X16_FN flipadst, dct, 0, 12
INV_TXFM_16X16_FN flipadst, adst, 0, 12
INV_TXFM_16X16_FN flipadst, flipadst, 0, 12
cglobal iflipadst_16x16_internal_12bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m13, [clip_20b_min]
vpbroadcastd m14, [clip_20b_max]
jmp m(iflipadst_16x16_internal_10bpc).pass1
.pass2:
call m(iadst_16x16_internal_12bpc).pass2_part1
call m(iflipadst_16x8_internal_10bpc).pass1_rotations
call m(iadst_16x16_internal_12bpc).pass2_part2
call m(iflipadst_16x8_internal_10bpc).pass1_rotations
jmp m(iadst_16x16_internal_12bpc).pass2_part3
INV_TXFM_16X16_FN identity, dct, -92, 12
INV_TXFM_16X16_FN identity, identity, 0, 12
%macro IDTX16_12BPC 1 ; src
pmulld m6, m7, m%1
paddd m6, m15
psrad m6, 12
paddd m6, m%1
psrad m%1, m6, 1
%endmacro
cglobal iidentity_16x16_internal_12bpc, 0, 7, 16, 32*24, dst, stride, c, eob, tx2
vpbroadcastd m7, [pd_1697]
vpbroadcastd m15, [pd_5120]
lea r6, [rsp+32*4]
sub eobd, 36
jl .fast
mov r3, -32*8*4
.righthalf:
mova m10, [cq+r3+32*33]
mova m11, [cq+r3+32*35]
mova m12, [cq+r3+32*37]
mova m13, [cq+r3+32*39]
add r6, 32*4
pmulld m0, m7, m10
pmulld m1, m7, m11
pmulld m2, m7, m12
pmulld m3, m7, m13
REPX {paddd x, m15}, m0, m1, m2, m3
REPX {psrad x, 12 }, m0, m1, m2, m3
paddd m0, m10
paddd m1, m11
paddd m2, m12
paddd m3, m13
REPX {psrad x, 1 }, m0, m1, m2, m3
mova [r6+32*0], m0
mova [r6+32*1], m1
mova [r6+32*2], m2
mova [r6+32*3], m3
add r3, 32*8
jl .righthalf
.fast:
mova m0, [cq+64* 0]
mova m1, [cq+64* 1]
mova m2, [cq+64* 2]
mova m3, [cq+64* 3]
mova m4, [cq+64* 4]
mova m5, [cq+64* 5]
mova m8, [cq+64* 6]
mova m9, [cq+64* 7]
REPX {IDTX16_12BPC x}, 0, 1, 2, 3, 4, 5, 8, 9
mova [cq+64*0], m8
mova [cq+64*1], m9
mova m8, [cq+64* 8]
mova m9, [cq+64* 9]
mova m10, [cq+64*10]
mova m11, [cq+64*11]
mova m12, [cq+64*12]
mova m13, [cq+64*13]
mova m14, [cq+64*14]
REPX {IDTX16_12BPC x}, 8, 9, 10, 11, 12, 13, 14
mova m6, [cq+64*15]
pmulld m7, m6
paddd m7, m15
psrad m7, 12
paddd m7, m6
mova m6, [cq+64*0]
psrad m15, m7, 1
mova m7, [cq+64*1]
jmp tx2q
.pass2:
call m(iidentity_8x16_internal_12bpc).pass2_main
call m(idct_16x16_internal_10bpc).transpose_fast
test eobd, eobd
jl .pass2_fast
mova [cq+32* 8], m0
mova [cq+32* 9], m1
mova [cq+32*10], m2
mova [cq+32*11], m3
mova [cq+32*12], m4
mova [cq+32*13], m5
mova [cq+32*14], m6
mova [cq+32*15], m7
mova m8, [r6-32*4]
mova m9, [r6-32*3]
mova m10, [r6-32*2]
mova m11, [r6-32*1]
mova m12, [r6+32*0]
mova m13, [r6+32*1]
mova m14, [r6+32*2]
mova m15, [r6+32*3]
sub r6, 32*8
mova m0, [r6-32*4]
mova m1, [r6-32*3]
mova m2, [r6-32*2]
mova m3, [r6-32*1]
mova m4, [r6+32*0]
mova m5, [r6+32*1]
mova m6, [r6+32*2]
mova m7, [r6+32*3]
call m(iidentity_8x16_internal_12bpc).pass2_main
call m(idct_16x8_internal_10bpc).transpose2
mova m8, m0
mova m9, m1
mova m10, m2
mova m11, m3
mova m12, m4
mova m13, m5
mova m14, m6
mova m15, m7
mova m0, [cq+32* 8]
mova m1, [cq+32* 9]
mova m2, [cq+32*10]
mova m3, [cq+32*11]
mova m4, [cq+32*12]
mova m5, [cq+32*13]
mova m6, [cq+32*14]
mova m7, [cq+32*15]
.pass2_fast:
call m(idct_16x16_internal_12bpc).write_16x16
RET
%macro IDCT32_END 6-7 1 ; in/out1, out2, tmp[1-3], shift, pack
mova m%4, [r6+32*(%1-4)]
mova m%2, [r5+32*(3-%1)]
mova m%5, [r4+32*(%1-4)]
psubd m%3, m%1, m%4 ; idct16 out15 - n
paddd m%1, m%4 ; idct16 out0 + n
pmaxsd m%1, m12
pmaxsd m%3, m12
pminsd m%1, m13
pminsd m%3, m13
paddd m%1, m11
paddd m%3, m11
psubd m%4, m%1, m%2 ; out31 - n
paddd m%1, m%2 ; out0 + n
paddd m%2, m%3, m%5 ; out15 - n
psubd m%3, m%5 ; out16 + n
REPX {psrad x, %6}, m%1, m%3, m%2, m%4
%if %7 & 1
packssdw m%1, m%3 ; out0 + n, out16 + n
packssdw m%2, m%4 ; out15 - n, out31 - n
%endif
%endmacro
cglobal inv_txfm_add_dct_dct_8x32_10bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jz .dconly
PROLOGUE 0, 7, 16, 32*12, dst, stride, c, eob
%undef cmp
vpbroadcastd m11, [pd_2048]
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
vbroadcasti128 m14, [idct32_shuf]
mov r4, cq
call .pass1_main
mova [rsp+32*0], m2
mova [rsp+32*1], m3
cmp eobd, 43
jge .eob43
pxor m4, m4
REPX {mova x, m4}, [rsp+32*2], m2, m3, m11
jmp .pass1_end_fast
.eob43:
lea r6, [rsp+32*8]
mova [r6-32*4], m0
mova [r6-32*3], m1
call .pass1_main
mova [rsp+32*2], m2
cmp eobd, 107
jge .eob107
mova m11, m3
mova m2, m0
mova m3, m1
mova m0, [r6-32*4]
mova m1, [r6-32*3]
pxor m4, m4
.pass1_end_fast:
vpbroadcastd m10, [pw_2048]
lea r6, [deint_shuf+128]
REPX {mova x, m4}, m5, m6, m7
call m(inv_txfm_add_dct_dct_8x32_8bpc).main_fast
jmp .end
.eob107:
mova [rsp+32*3], m3
mova [r6-32*2], m0
mova [r6-32*1], m1
call .pass1_main
cmp eobd, 171
jge .eob171
pshufd m12, m2, q1032
pshufd m13, m3, q1032
mova m4, m0
mova m5, m1
pxor m6, m6
REPX {mova x, m6}, m7, m14, m15
jmp .pass1_end
.eob171:
mova [r6+32*0], m0
mova [r6+32*1], m1
mova [r6+32*2], m2
mova [r6+32*3], m3
call .pass1_main
pshufd m12, [r6+32*2], q1032 ; out19 out17
pshufd m13, [r6+32*3], q1032 ; out23 out21
mova m4, [r6+32*0] ; out16 out18
mova m5, [r6+32*1] ; out20 out22
pshufd m14, m2, q1032 ; out27 out25
pshufd m15, m3, q1032 ; out31 out29
mova m6, m0 ; out24 out26
mova m7, m1 ; out28 out30
.pass1_end:
mova m0, [r6-32*4] ; out0 out2
mova m1, [r6-32*3] ; out4 out6
mova m2, [r6-32*2] ; out8 out10
mova m3, [r6-32*1] ; out12 out14
lea r6, [deint_shuf+128]
mova m11, [rsp+32*3] ; out13 out15
vpbroadcastd m10, [pw_2048]
call m(inv_txfm_add_dct_dct_8x32_8bpc).main
.end: ; [rsp+0*32] = m12
vpbroadcastd m12, [pw_2048]
mov cq, r4
mova [rsp+32*1], m8
mova [rsp+32*2], m9
mova [rsp+32*3], m10
mova [rsp+32*4], m11
vpermq m0, m0, q3120
vpermq m1, m1, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4_start
vpermq m0, m2, q3120
vpermq m1, m3, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m4, q3120
vpermq m1, m5, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m6, q3120
vpermq m1, m7, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [rsp+32*1], q3120
vpermq m1, [rsp+32*2], q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [rsp+32*3], q3120
vpermq m1, [rsp+32*4], q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [rsp+32*0], q3120
vpermq m1, m13, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m14, q3120
vpermq m1, m15, q2031
pmulhrsw m0, m12
pmulhrsw m1, m12
call m(idct_8x8_internal_10bpc).write_8x4
RET
.dconly:
imul r6d, [cq], 181
vpbroadcastd m2, [dconly_10bpc]
mov [cq], eobd ; 0
or r3d, 32
add r6d, 640
sar r6d, 10
jmp m(inv_txfm_add_dct_dct_8x8_10bpc).dconly3
ALIGN function_align
.pass1_main_part1:
mova m0, [cq+128*0]
mova m1, [cq+128*1]
mova m2, [cq+128*2]
mova m3, [cq+128*3]
mova m4, [cq+128*4]
mova m5, [cq+128*5]
mova m6, [cq+128*6]
mova m7, [cq+128*7]
call m(idct_8x8_internal_10bpc).main
psrld m1, m11, 10 ; pd_2
REPX {paddd x, m1}, m0, m6, m5, m3
paddd m1, m6, m7 ; out1
psubd m6, m7 ; out6
psubd m7, m0, m9 ; out7
paddd m0, m9 ; out0
paddd m2, m5, m4 ; out2
psubd m5, m4 ; out5
psubd m4, m3, m8 ; out4
paddd m3, m8 ; out3
REPX {psrad x, 2 }, m0, m1, m2, m3, m4, m5, m6, m7
ret
ALIGN function_align
.pass1_main:
call .pass1_main_part1
add cq, 32
packssdw m0, m1
packssdw m2, m3
packssdw m4, m5
packssdw m6, m7
pshufb m0, m14
pshufb m2, m14
pshufb m4, m14
pshufb m6, m14
punpckhdq m3, m0, m2
punpckldq m0, m2
punpckldq m2, m4, m6
vperm2i128 m1 r6]
vinserti128 m0, xm2, 1 ; 0 2
vinserti128 m2, m3, xm4, 1 ; 1 3
vperm2i128 java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 31
ret
.main_oddhalf_part1_fast_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3
REPX {psrad x, 12 }, m0, m1, m2, m3
.main_oddhalf_part1_fast: ; lower half zero
vpbroadcastd m7, [pd_4091]
vpbroadcastd m8, [pd_201]
vpbroadcastd m6, [pd_m1380]
vpbroadcastd m9, [pd_3857]
vpbroadcastd m5, [pd_3703]
vpbroadcastd m10, [pd_1751]
vpbroadcastd m4, [pd_m2751]
vpbroadcastd m15, [pd_3035]
pmulld m7, m0
pmulld m0, m8
pmulld m6, m1
pmulld m1, m9
pmulld m5, m2
pmulld m2, m10
pmulld m4, m3
pmulld m3, m15
jmp .main_oddhalf_part1_fast2
.main_oddhalf_part1_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
.main_oddhalf_part1: ; in1, in7, in9, in15, in17, in23, in25, in31
ITX_MULSUB_2D 0, 7, 8, 9, 10, _, 201, 4091 ; t16a, t31a
ITX_MULSUB_2D 6, 1, 8, 9, 10, _, 3857, 1380 ; t19a, t28a
ITX_MULSUB_2D 2, 5, 8, 9, 10, _, 1751, 3703 ; t18a, t29a
ITX_MULSUB_2D 4, 3, 8, 9, 10, _, 3035, 2751 ; t17a, t30a
.main_oddhalf_part1_fast2:
REPX {paddd x, m11}, m0, m7, m6, m1, m2, m5, m4, m3
REPX {psrad x, 12 }, m0, m4, m6, m2, m1, m5, m7, m3
psubd m8, m0, m4 ; t17
paddd m0, m4 ; t16
psubd m4, m6, m2 ; t18
paddd m6, m2 ; t19
psubd m2, m1, m5 ; t29
paddd m1, m5 ; t28
psubd m5, m7, m3 ; t30
paddd m7, m3 ; t31
REPX {pmaxsd x, m12}, m8, m5, m4, m2, m0, m6, m1, m7
REPX {pminsd x, m13}, m8, m5, m4, m2, m0, m6, m1, m7
vpbroadcastd m15, [pd_4017]
vpbroadcastd m10, [pd_799]
ITX_MULSUB_2D 5, 8, 3, 9, _, 11, 10, 15 ; t17a, t30a
ITX_MULSUB_2D 2, 4, 3, 9, _, 11, 10, 15, 2 ; t29a, t18a
psubd m3, m0, m6 ; t19a
paddd m0, m6 ; t16a
psubd m6, m7, m1 ; t28a
paddd m7, m1 ; t31a
psubd m1, m5, m4 ; t18
paddd m5, m4 ; t17
psubd m4, m8, m2 ; t29
paddd m8, m2 ; t30
REPX {pmaxsd x, m12}, m3, m6, m1, m4, m0, m7, m5, m8
REPX {pminsd x, m13}, m3, m6, m1, m4, m0, m7, m5, m8
vpbroadcastd m15, [pd_3784]
vpbroadcastd m10, [pd_1567]
ITX_MULSUB_2D 4, 1, 2, 9, _, 11, 10, 15 ; t18a, t29a
ITX_MULSUB_2D 6, 3, 2, 9, _, 11, 10, 15 ; t19, t28
mova [r6-32*4], m0
mova [r6-32*3], m5
mova [r6-32*2], m4
mova [r6-32*1], m6
mova [r6+32*0], m3
mova [r6+32*1], m1
mova [r6+32*2], m8
mova [r6+32*3], m7
ret
.main_oddhalf_part2_fast_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3
REPX {psrad x, 12 }, m0, m1, m2, m3
.main_oddhalf_part2_fast: ; lower half zero
vpbroadcastd m7, [pd_m601]
vpbroadcastd m8, [pd_4052]
vpbroadcastd m6, [pd_3973]
vpbroadcastd m9, [pd_995]
vpbroadcastd m5, [pd_m2106]
vpbroadcastd m10, [pd_3513]
vpbroadcastd m4, [pd_3290]
vpbroadcastd m15, [pd_2440]
pmulld m7, m0
pmulld m0, m8
pmulld m6, m1
pmulld m1, m9
pmulld m5, m2
pmulld m2, m10
pmulld m4, m3
pmulld m3, m15
jmp .main_oddhalf_part2_fast2
.main_oddhalf_part2_rect2:
REPX {paddd x, m11}, m0, m1, m2, m3, m4, m5, m6, m7
REPX {psrad x, 12 }, m0, m1, m2, m3, m4, m5, m6, m7
.main_oddhalf_part2: ; in3, in5, in11, in13, in19, in21, in27, in29
ITX_MULSUB_2D 7, 0, 8, 9, 10, _, 4052, 601 ; t23a, t24a
ITX_MULSUB_2D 1, 6, 8, 9, 10, _, 995, 3973 ; t20a, t27a
ITX_MULSUB_2D 5, 2, 8, 9, 10, _, 3513, 2106 ; t21a, t26a
ITX_MULSUB_2D 3, 4, 8, 9, 10, _, 2440, 3290 ; t22a, t25a
.main_oddhalf_part2_fast2:
REPX {paddd x, m11}, m0, m7, m6, m1, m2, m5, m4, m3
REPX {psrad x, 12 }, m0, m4, m6, m2, m1, m5, m7, m3
psubd m8, m0, m4 ; t25
paddd m0, m4 ; t24
psubd m4, m6, m2 ; t26
paddd m6, m2 ; t27
psubd m2, m1, m5 ; t21
paddd m1, m5 ; t20
psubd m5, m7, m3 ; t22
paddd m7, m3 ; t23
REPX {pmaxsd x, m12}, m8, m5, m4, m2, m0, m6, m1, m7
REPX {pminsd x, m13}, m8, m5, m4, m2, m0, m6, m1, m7
vpbroadcastd m15, [pd_2276]
vpbroadcastd m10, [pd_3406]
ITX_MULSUB_2D 4, 2, 3, 9, _, 11, 10, 15 ; t21a, t26a
ITX_MULSUB_2D 8, 5, 3, 9, _, 11, 10, 15, 2 ; t25a, t22a
psubd m3, m0, m6 ; t27a
paddd m0, m6 ; t24a
psubd m6, m7, m1 ; t20a
paddd m7, m1 ; t23a
psubd m1, m5, m4 ; t21
paddd m5, m4 ; t22
psubd m4, m8, m2 ; t26
paddd m8, m2 ; t25
REPX {pmaxsd x, m12}, m3, m6, m1, m4, m0, m7, m5, m8
REPX {pminsd x, m13}, m3, m6, m1, m4, m0, m7, m5, m8
vpbroadcastd m15, [pd_3784]
vpbroadcastd m10, [pd_1567]
ITX_MULSUB_2D 4, 1, 2, 9, _, 11, 10, 15, 2 ; t26a, t21a
ITX_MULSUB_2D 3, 6, 2, 9, _, 11, 10, 15, 2 ; t27, t20
mova m9, [r6-32*4] ; t16a
mova m10, [r6-32*3] ; t17
psubd m2, m9, m7 ; t23
paddd m9, m7 ; t16
psubd m7, m10, m5 ; t22a
paddd m10, m5 ; t17a
REPX {pmaxsd x, m12}, m9, m10, m2, m7
REPX {pminsd x, m13}, m9, m10, m2, m7
mova [r6-32*4], m9
mova [r6-32*3], m10
mova m9, [r6-32*2] ; t18a
mova m10, [r6-32*1] ; t19
psubd m5, m9, m1 ; t21
paddd m9, m1 ; t18
psubd m1, m10, m6 ; t20a
paddd m10, m6 ; t19a
REPX {pmaxsd x, m12}, m9, m10, m5, m1
REPX {pminsd x, m13}, m9, m10, m5, m1
mova [r6-32*2], m9
mova [r6-32*1], m10
mova m9, [r6+32*0] ; t28
mova m10, [r6+32*1] ; t29a
psubd m6, m9, m3 ; t27a
paddd m9, m3 ; t28a
psubd m3, m10, m4 ; t26
paddd m10, m4 ; t29
REPX {pmaxsd x, m12}, m9, m10, m6, m3
REPX {pminsd x, m13}, m9, m10, m6, m3
REPX {pmulld x, m14}, m6, m3, m1, m5
paddd m6, m11
paddd m3, m11
psubd m4, m6, m1 ; t20
paddd m6, m1 ; t27
psubd m1, m3, m5 ; t21a
paddd m3, m5 ; t26a
REPX {psrad x, 12 }, m4, m1, m3, m6
mova [r6+32*0], m4
mova [r6+32*1], m1
mova m4, [r6+32*2] ; t30
mova m1, [r6+32*3] ; t31a
psubd m5, m4, m8 ; t25a
paddd m4, m8 ; t30a
psubd m8, m1, m0 ; t24
paddd m1, m0 ; t31
REPX {pmaxsd x, m12}, m8, m5, m4, m1
REPX {pminsd x, m13}, m8, m5, m4, m1
REPX {pmulld x, m14}, m5, m8, m7, m2
paddd m5, m11
paddd m8, m11
psubd m0, m5, m7 ; t22
paddd m5, m7 ; t25
psubd m7, m8, m2 ; t23a
paddd m2, m8 ; t24a
REPX {psrad x, 12 }, m0, m7, m2, m5
mova [r6+32*2], m0
mova [r6+32*3], m7
mov r4, r6
add r6, 32*8
mova [r6-32*4], m2
mova [r6-32*3], m5
mova [r6-32*2], m3
mova [r6-32*1], m6
mova [r6+32*0], m9
mova [r6+32*1], m10
mova [r6+32*2], m4
mova [r6+32*3], m1
mov r5, r6
add r6, 32*8
ret
ALIGN function_align
.main_end:
psrld m11, 10 ; pd_2
IDCT32_END 0, 15, 8, 9, 10, 2
IDCT32_END 1, 14, 8, 9, 10, 2
punpckhwd m8, m0, m1 ; 16 17
punpcklwd m0, m1 ; 0 1
punpcklwd m1, m14, m15 ; 14 15
punpckhwd m14, m15 ; 30 31
mova [r5+32*3], m8
mova [r5+32*2], m14
IDCT32_END 2, 15, 8, 9, 10, 2
IDCT32_END 3, 14, 8, 9, 10, 2
punpckhwd m8, m2, m3 ; 18 19
punpcklwd m2, m3 ; 2 3
punpcklwd m3, m14, m15 ; 12 13
punpckhwd m14, m15 ; 28 29
mova [r5+32*1], m8
mova [r5+32*0], m14
IDCT32_END 4, 15, 8, 9, 10, 2
IDCT32_END 5, 14, 8, 9, 10, 2
punpckhwd m8, m4, m5 ; 20 21
punpcklwd m4, m5 ; 4 5
punpcklwd m5, m14, m15 ; 10 11
punpckhwd m14, m15 ; 26 27
mova [r5-32*1], m8
mova [r5-32*2], m14
IDCT32_END 6, 15, 8, 9, 10, 2
IDCT32_END 7, 14, 8, 9, 10, 2
punpckhwd m8, m6, m7 ; 22 23
punpcklwd m6, m7 ; 6 7
punpcklwd m7, m14, m15 ; 8 9
punpckhwd m14, m15 ; 24 25
mova [r5-32*3], m8
mova [r5-32*4], m14
.transpose:
punpckhdq m15, m3, m1
punpckldq m3, m1
punpckhdq m1, m4, m6
punpckldq m4, m6
punpckhdq m6, m0, m2
punpckldq m0, m2
punpckhdq m2, m7, m5
punpckldq m7, m5
punpcklqdq m5, m2, m15
punpckhqdq m2, m15
punpckhqdq m15, m7, m3
punpcklqdq m7, m3
punpckhqdq m3, m6, m1
punpcklqdq m6, m1
punpckhqdq m1, m0, m4
punpcklqdq m0, m4
vperm2i128 m4, m0, m7, 0x31
vinserti128 m0, xm7, 1
vperm2i128 m7, m3, m2, 0x31
vinserti128 m3, xm2, 1
vinserti128 m2, m6, xm5, 1
vperm2i128 m6, m5, 0x31
vperm2i128 m5, m1, m15, 0x31
vinserti128 m1, xm15, 1
ret
cglobal inv_txfm_add_identity_identity_8x32_10bpc, 4, 7, 8, dst, stride, c, eob
vpbroadcastd m7, [pixel_10bpc_max]
.pass1:
vpbroadcastd m5, [pw_5]
pxor m6, m6
mov r6d, eobd
add eobb, 21
cmovc eobd, r6d ; 43, 107, 171 -> 64, 128, 192
lea r6, [strideq*3]
lea r5, [strideq*5]
lea r4, [strideq+r6*2] ; strideq*7
.loop:
mova m0, [cq+128*0]
packssdw m0, [cq+128*1]
mova m1, [cq+128*2]
packssdw m1, [cq+128*3]
mova m2, [cq+128*4]
packssdw m2, [cq+128*5]
mova m3, [cq+128*6]
packssdw m3, [cq+128*7]
REPX {paddsw x, m5}, m0, m1, m2, m3
REPX {psraw x, 3 }, m0, m1, m2, m3
call .main_zero
add cq, 32
lea dstq, [dstq+strideq*8]
sub eobd, 64
jge .loop
RET
ALIGN function_align
.main_zero:
REPX {mova [cq+128*x], m6}, 0, 1, 2, 3, 4, 5, 6, 7
.main:
punpckhwd m4, m0, m1
punpcklwd m0, m1
punpckhwd m1, m2, m3
punpcklwd m2, m3
punpckhwd m3, m0, m4
punpcklwd m0, m4
punpckhwd m4, m2, m1
punpcklwd m2, m1
punpckhqdq m1, m0, m2
punpcklqdq m0, m2
punpcklqdq m2, m3, m4
punpckhqdq m3, m4
mova xm4, [dstq+strideq*0]
vinserti128 m4, [dstq+strideq*4], 1
paddw m0, m4
mova xm4, [dstq+strideq*1]
vinserti128 m4, [dstq+r5 ], 1
paddw m1, m4
mova xm4, [dstq+strideq*2]
vinserti128 m4, [dstq+r6*2 ], 1
paddw m2, m4
mova xm4, [dstq+r6 ]
vinserti128 m4, [dstq+r4 ], 1
paddw m3, m4
REPX {pmaxsw x, m6}, m0, m1, m2, m3
REPX {pminsw x, m7}, m0, m1, m2, m3
mova [dstq+strideq*0], xm0
vextracti128 [dstq+strideq*4], m0, 1
mova [dstq+strideq*1], xm1
vextracti128 [dstq+r5 ], m1, 1
mova [dstq+strideq*2], xm2
vextracti128 [dstq+r6*2 ], m2, 1
mova [dstq+r6 ], xm3
vextracti128 [dstq+r4 ], m3, 1
ret
cglobal inv_txfm_add_dct_dct_8x32_12bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jz .dconly
PROLOGUE 0, 7, 16, 32*24, dst, stride, c, eob
%undef cmp
vpbroadcastd m11, [pd_2048]
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
mov r4, cq
lea r6, [rsp+32*4]
call .pass1_main
cmp eobd, 43
jge .eob43
jmp .pass2_fast
.eob43:
call .pass1_main
cmp eobd, 107
jge .eob107
.pass2_fast:
mov cq, r4
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
pmaxsd m0, m12, [cq+128*1+ 0]
pmaxsd m1, m12, [cq+128*7+ 0]
pmaxsd m2, m12, [cq+128*1+32]
pmaxsd m3, m12, [cq+128*7+32]
REPX {pminsd x, m13}, m0, m1, m2, m3
vpbroadcastd m14, [pd_2896]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part1_fast
pmaxsd m0, m12, [cq+128*3+ 0]
pmaxsd m1, m12, [cq+128*5+ 0]
pmaxsd m2, m12, [cq+128*3+32]
pmaxsd m3, m12, [cq+128*5+32]
REPX {pminsd x, m13}, m0, m1, m2, m3
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part2_fast
pmaxsd m0, m12, [cq+128*2+ 0]
pmaxsd m1, m12, [cq+128*6+ 0]
pmaxsd m2, m12, [cq+128*2+32]
pmaxsd m3, m12, [cq+128*6+32]
REPX {pminsd x, m13}, m0, m1, m2, m3
call m(idct_8x16_internal_10bpc).main_oddhalf_fast
pmaxsd m0, m12, [cq+128*0+ 0]
pmaxsd m1, m12, [cq+128*4+ 0]
pmaxsd m2, m12, [cq+128*0+32]
pmaxsd m3, m12, [cq+128*4+32]
REPX {pminsd x, m13}, m0, m1, m2, m3
pxor m4, m4
REPX {mova x, m4}, m5, m6, m7
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
jmp .pass2_end
.eob107:
call .pass1_main
cmp eobd, 171
jge .eob171
jmp .pass2
.eob171:
call .pass1_main
.pass2:
mov cq, r4
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
pmaxsd m0, m12, [cq+128*1+ 0]
pmaxsd m1, m12, [cq+128*7+ 0]
pmaxsd m2, m12, [cq+128*1+32]
pmaxsd m3, m12, [cq+128*7+32]
pmaxsd m4, m12, [cq+128*1+64]
pmaxsd m5, m12, [cq+128*7+64]
pmaxsd m6, m12, [cq+128*1+96]
pmaxsd m7, m12, [cq+128*7+96]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
vpbroadcastd m14, [pd_2896]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part1
pmaxsd m0, m12, [cq+128*3+ 0]
pmaxsd m1, m12, [cq+128*5+ 0]
pmaxsd m2, m12, [cq+128*3+32]
pmaxsd m3, m12, [cq+128*5+32]
pmaxsd m4, m12, [cq+128*3+64]
pmaxsd m5, m12, [cq+128*5+64]
pmaxsd m6, m12, [cq+128*3+96]
pmaxsd m7, m12, [cq+128*5+96]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part2
pmaxsd m0, m12, [cq+128*2+ 0]
pmaxsd m1, m12, [cq+128*6+ 0]
pmaxsd m2, m12, [cq+128*2+32]
pmaxsd m3, m12, [cq+128*6+32]
pmaxsd m4, m12, [cq+128*2+64]
pmaxsd m5, m12, [cq+128*6+64]
pmaxsd m6, m12, [cq+128*2+96]
pmaxsd m7, m12, [cq+128*6+96]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_8x16_internal_10bpc).main_oddhalf
pmaxsd m0, m12, [cq+128*0+ 0]
pmaxsd m1, m12, [cq+128*4+ 0]
pmaxsd m2, m12, [cq+128*0+32]
pmaxsd m3, m12, [cq+128*4+32]
pmaxsd m4, m12, [cq+128*0+64]
pmaxsd m5, m12, [cq+128*4+64]
pmaxsd m6, m12, [cq+128*0+96]
pmaxsd m7, m12, [cq+128*4+96]
REPX {pminsd x, m13}, m0, m1, m2, m3, m4, m5, m6, m7
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
.pass2_end:
psrld m11, 8 ; pd_8
IDCT32_END 0, 15, 8, 9, 10, 4
IDCT32_END 1, 14, 8, 9, 10, 4
punpckhqdq m8, m0, m1 ; 16 17 (interleaved)
punpcklqdq m0, m1 ; 0 1 (interleaved)
punpcklqdq m1, m14, m15 ; 14 15 (interleaved)
punpckhqdq m14, m15 ; 30 31 (interleaved)
mova [r5+32*3], m8
mova [r5+32*2], m14
IDCT32_END 2, 15, 8, 9, 10, 4
IDCT32_END 3, 14, 8, 9, 10, 4
punpckhqdq m8, m2, m3 ; 18 19 (interleaved)
punpcklqdq m2, m3 ; 2 3 (interleaved)
punpcklqdq m3, m14, m15 ; 12 13 (interleaved)
punpckhqdq m14, m15 ; 28 29 (interleaved)
mova [r5+32*1], m8
mova [r5+32*0], m14
IDCT32_END 4, 15, 8, 9, 10, 4
IDCT32_END 5, 14, 8, 9, 10, 4
punpckhqdq m8, m4, m5 ; 20 21 (interleaved)
punpcklqdq m4, m5 ; 4 5 (interleaved)
punpcklqdq m5, m14, m15 ; 10 11 (interleaved)
punpckhqdq m14, m15 ; 26 27 (interleaved)
mova [r5-32*1], m8
mova [r5-32*2], m14
IDCT32_END 6, 15, 8, 9, 10, 4
IDCT32_END 7, 14, 8, 9, 10, 4
punpckhqdq m8, m6, m7 ; 22 23 (interleaved)
punpcklqdq m6, m7 ; 6 7 (interleaved)
punpcklqdq m7, m14, m15 ; 8 9 (interleaved)
punpckhqdq m14, m15 ; 24 25 (interleaved)
mova [r5-32*3], m8
mova [r5-32*4], m14
mova m15, m1
.end:
vpermq m0, m0, q3120
vpermq m1, m2, q3120
call m(idct_8x8_internal_12bpc).write_8x4_start
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m4, q3120
vpermq m1, m6, q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m7, q3120
vpermq m1, m5, q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, m3, q3120
vpermq m1, m15, q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [r5+32*3], q3120
vpermq m1, [r5+32*1], q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [r5-32*1], q3120
vpermq m1, [r5-32*3], q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [r5-32*4], q3120
vpermq m1, [r5-32*2], q3120
call m(idct_8x8_internal_10bpc).write_8x4
vpermq m0, [r5+32*0], q3120
vpermq m1, [r5+32*2], q3120
call m(idct_8x8_internal_10bpc).write_8x4
RET
.dconly:
imul r6d, [cq], 181
vpbroadcastd m2, [dconly_12bpc]
mov [cq], eobd ; 0
or r3d, 32
add r6d, 640
sar r6d, 10
jmp m(inv_txfm_add_dct_dct_8x8_10bpc).dconly3
ALIGN function_align
.pass1_main:
call m(inv_txfm_add_dct_dct_8x32_10bpc).pass1_main_part1
TRANSPOSE_8X8_DWORD 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15
mova [cq+128*0], m0
mova [cq+128*1], m1
mova [cq+128*2], m2
mova [cq+128*3], m3
mova [cq+128*4], m4
mova [cq+128*5], m5
mova [cq+128*6], m6
mova [cq+128*7], m7
add cq, 32
ret
ALIGN function_align
.main_end:
psrld m11, 10 ; pd_2
IDCT32_END 0, 15, 8, 9, 10, 2, 0
mova [cq+32*16], m8
mova [cq+32*31], m9
IDCT32_END 1, 14, 8, 9, 10, 2, 0
mova [cq+32*17], m8
mova [cq+32*30], m9
mova [cq+32*14], m14
IDCT32_END 2, 14, 8, 9, 10, 2, 0
mova [cq+32*18], m8
mova [cq+32*29], m9
mova [cq+32*13], m14
IDCT32_END 3, 14, 8, 9, 10, 2, 0
mova [cq+32*19], m8
mova [cq+32*28], m9
mova [cq+32*12], m14
IDCT32_END 4, 14, 8, 9, 10, 2, 0
mova [cq+32*20], m8
mova [cq+32*27], m9
mova [cq+32* 0], m0
mova [cq+32* 1], m1
mova [cq+32* 2], m2
IDCT32_END 5, 10, 0, 1, 2, 2, 0
mova [cq+32*21], m0
mova [cq+32*26], m1
IDCT32_END 6, 9, 0, 1, 2, 2, 0
mova [cq+32*22], m0
mova [cq+32*25], m1
IDCT32_END 7, 8, 0, 1, 2, 2, 0
mova [cq+32*23], m0
mova [cq+32*24], m1
mova m0, [cq+32* 0]
mova m1, [cq+32* 1]
mova m2, [cq+32* 2]
mova m11, m14
mova m12, [cq+32*12]
mova m13, [cq+32*13]
mova m14, [cq+32*14]
ret
cglobal inv_txfm_add_identity_identity_8x32_12bpc, 4, 7, 8, dst, stride, c, eob
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(inv_txfm_add_identity_identity_8x32_10bpc).pass1
cglobal inv_txfm_add_dct_dct_32x8_10bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jnz .full
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_10bpc]
mov [cq], eobd ; 0
or r3d, 8
.dconly:
add r6d, 640
sar r6d, 10
.dconly2:
imul r6d, 181
add r6d, 2176
sar r6d, 12
movd xm0, r6d
paddsw xm0, xm3
vpbroadcastw m0, xm0
.dconly_loop:
paddsw m1, m0, [dstq+32*0]
paddsw m2, m0, [dstq+32*1]
psubusw m1, m3
psubusw m2, m3
mova [dstq+ejava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
mova [dstq+32*1], m2
add dstq, strideq
dec r3d
jg .dconly_loop
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
.full:
PROLOGUE 0, 7, 16, 32*24, dst, java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 43
lea r6, [rsp+32*4]
java.lang.StringIndexOutOfBoundsException: Range [24, 16) out of bounds for length 43
vpbroadcastd m13, [clip_18b_max]
call .pass1
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_end
lea ,+30java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47
vpbroadcastd m11, [pw_2048]
mov r4, dstq
call .pass2
mova m0, [r5+32*3] ; 16 17
mova m1, [r5+32*2] ; 30 31
mova m2, [r5+32*1] ; 18 19
mova m3, [r5+32*0] ; 28 29
mova m4, [r5-32*1] ; 20 21
mova m5, [r5-32*2] ; 26 27
mova m6, [r5-32*3] ; 22 23
mova m7, [r5-32*4] ; 24 25
call m(inv_txfm_add_dct_dct_8x32_10bpc).transpose
lea ,[q+128*96
call .pass2
RET
ALIGN function_align
.pass2:
call m(idct_16x8_internal_8bpc).main
REPX {pmulhrsw x, m11}, m0, m1, m2, m3
call m(idct_16x8_internal_10bpc).write_16x4_start
pmulhrsw m0, m11, m4
pmulhrsw m1, m11, m5
pmulhrsw m2, m11, m6
pmulhrsw m3, m11, m7
jmp m(idct_16x8_internal_10bpc).write_16x4_zero
ALIGN function_align
.pass1:
movaREPX {pminsd,m13} ,m2 ,m4,java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 59
mova m1, [cq+32* 7]
mova m2, [cq+32* 9]
mova m3, [cq+32*15]
mova m4, [cq+32*17]
mova m5, [cq+32*23]
mova m6, [cq+32*25]
mova [+*31]
vpbroadcastd m11, [pd_2048]
vpbroadcastd m14, [pd_2896]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part1
mova m0, [cq+32* 3]
mova m1, [cq+32* 5]
mova m2, [cq+32*11]
mova m3, [cq+32*13]
mova m4, [cq+32*19]
mova m5, [cq+32*21]
mova m6, [cq+32*27]
m7,[32*]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part2
mova m0, [cq+32* 2]
mova m1, [cq+32* 6]
mova m2, [cq+32*10]
mova m3, [cq+32*14]
mova m4, [cq+32*18]
mova m5, [cq+32*22]
mova m6, [cq+32*26]
mova m7, [cq+32*30]
call m(idct_8x16_internal_10bpc).main_oddhalf
mova m0, [cq+32* 0]
mova m1, [cq+32* 4]
mova m2, [cq+32* 8]
mova m3, [cq+32*12]
mova m4, [cq+32*16]
mova m5, [cq+32*20]
mova m6, [cq+32*24]
mova m7, [cq+32*28]
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
ret
cglobal inv_txfm_add_identity_identity_32x8_10bpc, 4, 7, 8, dst, stride, c, eob
vpbroadcastd m7, [pixel_10bpc_max]
.pass1:
vpbroadcastd m5, [pw_4096]
pxor m6, m6
mov r6d, eobd
add eobb, 21
cmovc eobd, r6d
lea r6, [strideq*3]
lea r5, [strideq*5]
lea r4, [strideq+r6*2] ; strideq*7
.loop:
mova m0, [cq+32*0]
packssdw m0, [cq+32*1]
mova m1, [cq+32*2]
packssdw m1, [cq+32*3]
REPX {mova [cq+32*x], m6}, 0, 1, 2, 3
add cq, 32*8
mova m2, [cq-32*4]
packssdw m2, [cq-32*3]
mova m3, [cq-32*2]
packssdw m3, [cq-32*1]
REPX {pmulhrsw x, m5}, m0, m1, m2, m3
REPX {mova [cq+32*x], m6}, -4, -3, -2, -1
call m(inv_txfm_add_identity_identity_8x32_10bpc).main
add dstq, 16
sub eobd, 64
jge .loop
:
cglobal inv_txfm_add_dct_dct_32x8_12bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jnz .full
imul r6d, [cq], 181
m ,[q+*9]
mov [cq], eobd ; 0
or r3d, 8
jmp m(inv_txfm_add_dct_dct_32x8_10bpc).dconly
.full:
0,7,16 *24 dst,stride, c, eob
lea r6, [rsp+32*4]
vpbroadcastd m12, [clip_20b_min]
vpbroadcastd m13, [clip_20b_max]
call m(inv_txfm_add_dct_dct_32x8_10bpc).pass1
call m(inv_txfm_add_dct_dct_8x32_12bpc).main_end
mov r4, dstq
call m(idct_16x8_internal_12bpc).pass2_main
mova m0, [cq+32* 0] ; 16
mova m1, [cq+32* 1] ; 17
mova m2, [cq+32* 2] ; 18
mova m3, [cq+32* 3] ; 19
mova m4, [cq+32* 4] ; 20
mova m5, [cq+32* 5] ; 21
mova m6, [cq+32* 6] ; 22
mova m7, [cq+32* 7] ; 23
mova m8, [cq+32* 8] ; 24
mova m9, [cq+32* 9] ; 25
mova m10, [cq+32*10] ; 26
mova m11, [cq+32*11] ; 27
mova m12, [cq+32*12] ; 28
mova m13, [cq+32*13] ; 29
mova m14, [cq+32*14] ; 30
mova m15, [cq+32*15] ; 31
lea dstq, [r4+32]
call m(idct_16x8_internal_12bpc).pass2_main
RET
cglobal inv_txfm_add_identity_identity_32x8_12bpc, 4, 7, 8, dst, stride, c, eob
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(inv_txfm_add_identity_identity_32x8_10bpc).pass1
%macro IDCT32_PASS2_END 6 ; coefs[1-2], tmp[1-2], offset[1-2]
mova m%4, [%2]
paddsw m%3, m%1, m%4
psubsw m%1, m%4
%if %1 == 0
pxor m6, m6
%endif
pmulhrsw m%3, m15
pmulhrsw m%1, m15
paddw m%3, [dstq+%5]
paddw m%,[2%6
pmaxsw m%3, m6
pmaxsw m%1, m6
pminsw m%3, m7
pminsw m%1, m7
mova [dstq+%5], m%3
mova [r2+%6], m%1
%endmacro
cglobal inv_txfm_add_dct_dct_16x32_10bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jz .dconly
PROLOGUE 0, 8, 16, 32*36, dst, stride, c, eob
%undef cmp
vpbroadcastd m11, [pd_2048]
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
vpbroadcastd m14, [pd_2896]
lea r6, [rsp+32*16]
lea r4, [r6+32*8]
lea r5, [r6+32*16]
call .main
sub eobd, 44
jge .eob44
vperm2i128 ,m0,m3 ; 5
vinserti128 m0, xm3, 1 ; 1
vperm2i128 m3, m1, m4, 0x31 ; 7
vinserti128 m1, xm4, 1 ; 3
pxor m4, m4
REPX {mova x, m4}, m5, m6, m7
REPX {mova [r6+32*x], m4}, 0, 1, 2, 3
jmp .fast
.dconly:
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_10bpc]
mov [cq], eobd ; 0
or r3d, 32
add r6d, 128
sar r6d, 8
imul r6d, 181
jmp m(inv_txfm_add_dct_dct_16x4_10bpc).dconly2
.eob44:
mova [r4+16*0], xm0
mova [r4+16*1], xm3
mova [r4+16*2], xm1
mova [r4+16*3], xm4
vextracti128 [r4+16*4], m0, 1
vextracti128 [r4+16*5], m3, 1
vextracti128 [r4+16*6], m1, 1
vextracti128 [r4+16*7], m4, 1
call .main
sub eobd, 107
jge .eob151
vperm2i128 m7, m1, m4, 0x31 ; 15
vinserti128 m5, m1, xm4, 1 ; 11
vperm2i128 m6, m0, m3, 0x31 ; 13
vinserti128 m4, m0, xm3, 1 ; 9
mova m0, [r4+32*0]
mova m1, [r4+32*1]
mova m2, [r4+32*2]
mova m3, [r4+32*3]
.fast:
lea r6, [pw_5+128]
call m(inv_txfm_add_dct_dct_16x32_8bpc).main_oddhalf_fast
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, m15
jmp .dct16
.eob151:
mova [r4-16*8], xm0
mova [r4-16*7], xm3
mova [r4-16*6], xm1
mova [r4-16*5], xm4
vextracti128 [r4-16*4], m0, 1
vextracti128 [r4-16*3], m3, 1
vextracti128 [r4-16*2], m1, 1
vextracti128 [r4-16*1], m4, 1
call .main
sub eobd, 128
jge .eob279
vperm2i128 m10, m0 mova [+32*] ; 26
vinserti128 m8, , xm3, 1; 17
vperm2i128 m11, m1, m4, 0x31 ; 23
vinserti128 m9, m1, xm4, 1 ; 19
pxor m12, m12
REPX {movam m15,[cq3215];java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
REPX {mova [r6+32*x], m12}, 0, 1, 2, 3
jmp .full
.eob279:
mova [r5+16*0], xm0
mova [r5+16*1], xm3
ova[16*] java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
mova [r5+16*3], xm4
vextracti128 [r5+16*4], m0, 1
vextracti128 [r5+16*5], m3, 1
vextracti128 [r5+16*6], m1, 1
vextracti128 [r5+16*7], m4, 1
callmain
vperm2i128 m14if java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
vinserti128 m12, m0, xm3, 1 ; 25
vperm2i128 m15, m1, m4, 0x31 ; 31
vinserti128 m13, m1, xm4, 1 ; 27
mova m8, [r5+32*0]
mova m9, [r5+32*1]
mova m10, [r5+32*2]
mova m11, [r5+32*3]
.full:
mova mova r26,m%
mova m1, [r4+32*1]
mova m2, [r4+32*2]
mova m3, [r4+32*3]
mova m4, [r4-32*4]
mova m5, [r4-32*3]
mova m6, [r4-32*2]
mova m7, [r4-32*1]
lea r6, [pw_5 + 128]
call m(inv_txfm_add_dct_dct_16x32_8bpc).main_oddhalf
lea r3, [rsp+32*8]
mova m8, [r3+32*0]
mova m9, [r3+32*1]
lea r5, r6+32*]
mova m11, [r3+32*3]
mova m12, [r3-32*4]
mova m13, [r3-32*3]
mova m14, [r3-32*2]
mova m15, [r3-32*1]
.idct16:
lea r3, [rsp+32*16]
mova m0, [r3+32*0]
mova m1,REPX{ova, m4}, m5, m6, m7
mova m2, [r3+32*2]
mova m3, [r3+32*3]
mova m4, [r3-32*4]
mova m5, [r3-32*3]
mova m6, [r3-32*2]
mova m7, [r3-32*1]
mova [rsp], m15
call m(imul [q] 81
imul r2, strideq, 19
r3, [strideq*3]
add r2, dstq
call a 128
RET
ALIGN function_align
.main:
pmulld m0, m14, [cq+128* 1]
pmulld m1, m14, [cq+128* 3]
pmulld m2, m14, [cq+128* 5]
pmulld m3, m14, [cq+128* 7]
pmulld m4, m14, [cq+128* 9]
pmulldm [+16*] m4
pmulld m6, m14 vextracti128 [4164,m0, 1
pmulld m7, m14, [cq+128*15]
call m(idct_8x16_internal_10bpc).main_oddhalf_rect2
m0 m14,c+1280
pmulld m1, m14, [cq+128* 2]
pmulld m2, m14, [cq+128* 4]
pmulld m3, m14, [cq+128* 6]
pmulld m4, m14, [cq+128* 8]
pmulld m5, m14, [cq+128*10]
pmulld m6, m14, [cq+128*12]
pmulld m7, m14, [cq+128*14]
call m(idct_8x8_internal_10bpc).main_rect2
call m(idct_8x16_internal_10bpc).main_evenhalf
psrld m15, m11, 11 ; pd_1
m8 r6-324java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mova m9, [r6-32*3]
REPX {paddd x, m15}, m0, m1, m2, m3, m4, m5, m6, m7
m10 m8; out15
paddd m0, m8 ; out0
mova m8, [r6-32*2]
paddd m(nv_txfm_add_dct_dct_16x32_8bpc)main_oddhalf_fast
m1m9 ; out14
mova m9, [r6-32*1]
REPX {psrad x, 1}, m0, m15, m10, m1
packssdw m0, m15
packssdw m1, m10
psubd m10, m2, m8 ; out13
paddd m2, m8 ; out2
mova m8, [r6+32*0]
paddd m15, m3, m9 ; out3
psubd m3, m9 ; out12
mova m9, [r6+32*1]
REPX {psrad x, 1}, m2, m15, m10, m3
packssdw m2, m15
packssdw m3, m10
psubd m10, m4, m8 ; out11
paddd m4, m8 ; out4
mova m8, [r6+32*2]
paddd m15, m5, m9 ; out5
psubd m5, m9 ; out10
mova m9, [r6+32*3]
REPX {psrad x, 1}, m4, m10, m15, m5
packssdw m4, m15
packssdw REPX {mova [r6+32*x], m,0,,2 java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
psubd m10, m6, m8 ; out9
paddd m6, m8 ; out6
paddd m15, ,m9 ; out7
psubd m7, m9 ; out8
REPX {psrad x, 1}, m6, m10, m15, m7
packssdw m6, m15
packssdw m7, m10
punpckhwd m8, m0, m2
punpcklwd m0, m2
punpckhwd m2, m3, m1
punpcklwd m3, m1
punpckhwd m1, m4, m6
punpcklwd m4, m6
punpcklwd m6, m7, m5
punpckhwd m7, m5
pxor m5, m5
mov r7d, 128*13
.main_zero_loop:
mova [cq+r7-128*1], m5
mova [cq+r7+128*0], m5
mova [cq+r7+128*1], m5
mova [cq+r7+128*2], m5
sub r7d, 128*4
jg .main_zero_loop
add cq, 32
punpcklwd m5, m3, m2
punpckhwd m3, m2
punpcklwd m2, m4, m1
punpckhwd m4, m1
punpckhwd m1, m0, m8
punpcklwd m0, m8
punpckhwd lea r6, [pw_5+ 128]
punpcklwd m6, m7
punpcklqdq m7, m1, m4
punpckhqdq m1, m4
punpckhqdq m4, m8, m3
punpcklqdq m8, m3
punpckhqdq m3, m6, m5
punpcklqdq m6, m5
punpcklqdq m5, m0, m2
punpckhqdq m0, m2
mova [r6+16*0], xm5
mova [r6+16*1], xm6
mova [r6+16*2], xm7
mova [r6+16*3], xm8
vextracti128 [r6+16*4], m5, 1
vextracti128 [r6+16*5], m6, 1
vextracti128 [r6+16*6], m7, 1
+*7,m8,1
r6,*4
ret
ALIGN function_align
.pass2_end:
mova [rsp+gprsize+32*0], m6
mova [rsp+gprsize+32*2], m7
mova [rsp+gprsize+32*3], m15
vpbroadcastd m15, [pw_2048]
vpbroadcastd m7, [pixel_10bpc_max]
IDCT32_PASS2_END 0, r5+32*3, 1, 6, strideq*0, r3*4
IDCT32_PASS2_END 4, r5-32*1, 0, 1, strideq*4, strideq*8
IDCT32_PASS2_END 8, r4+32*3, 0, 4, strideq*8, strideq*4
add r2
add dstq, strideq
sub r2, strideq
mova m1, [rsp+gprsize+32*1]
IDCT32_PASS2_END 1, r5+32*2, 0, 4, strideq*0, r3*4
IDCT32_PASS2_END 5, r5-32*2, 0, 4, strideq*4, strideq*8
IDCT32_PASS2_END 9, r4+32*2, 0, 4, strideq*8, strideq*4
IDCT32_PASS2_END 13, r4-32*2, 0, 4, r3*4, strideq*0
add dstq, strideq
sub r2, strideq
mova m1, [rsp+gprsize+32*0]
IDCT32_PASS2_END 2, r5+32*1, 0, 4, strideq*0, r3*4
IDCT32_PASS2_END 1, r5-32*3, 0, 4, strideq*4, strideq*8
IDCT32_PASS2_END 10, r4+32*1, 0, 4, strideq*8, strideq*4
IDCT32_PASS2_END 14, r4-32*3, 0, 4, r3*4, strideq*0
add dstq, strideq
sub r2, strideq
mova m1, [rsp+gprsize+32*2]
mova m2, [rsp+gprsize+32*3]
IDCT32_PASS2_END 3, r5+32*0, 0, 4, strideq*0, r3*4
IDCT32_PASS2_END 1, r5-32*4, 0, 4, strideq*4, strideq*8
IDCT32_PASS2_END 11,r4+*0,0, 4, strideq*8,strideq*4
IDCT32_PASS2_END 2, r4-32*4, 0, 4, r3*4, strideq*0
ret
cglobal inv_txfm_add_identity_identity_16x32_10bpc, 4, 7, 12, dst, stride, c, eob
vpbroadcastd m7, [pixel_10bpc_max]
.pass1:
vpbroadcastd m8, [pw_2896x8]
vpbroadcastd m9, [pw_1697x16]
vpbroadcastd m11, [pw_8192]
lea r6, [strideq*5]
pxor m6, m6
paddw m10, mova m8, [r6-32*4]
mov r5, dstq
call .main
sub eobd, 36
jl .ret
add cq, 128*8
lea dstq, [r5+16]
call .main
sub cq, 128*8-32
lea dstq, [r5+strideq*8]
mov r5, dstq
call .main
sub eobd, 107 ; eob < 143
jl .ret
add cq, 128*8
lea dstq, [r5+16]
call .main
sub cq, 128*8-32
lea dstq, [r5+strideq*8]
mov r5, dstq
call .main
sub eobd, 128 ; eob < 271
jl .ret
add cq, 128*8
lea dstq, [r5+16]
call .main
sub cq, 128*8-32
lea dstq, [r5+strideq*8]
mov java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 31
call .main
sub eobd, 128 ; eob < 399
jl .ret
add cq, 128*8
lea dstq, [r5+16]
call .main
.ret:
RET
ALIGN function_align
.main:
mova m0, [cq+128*0]
packssdw m0, [cq+128*1]
mova m1, [cq+128*2java.lang.StringIndexOutOfBoundsException: Range [38, 39) out of bounds for length 32
packssdw m1, [cq+128*3]
mova m2, [cq+128*4]
packssdw m2, [cq+128*5]
mova m3, [cq+128*6]
packssdw m3, [cq+128*7]
REPX {pmulhrsw x, m8 }, m0, m1, m2, m3
REPX {IDTX16 x, 4, 9, 10}, 0, 1, 2, 3
REPX {pmulhrsw x, m11}, m0, m1, m2, m3
REPX {mova [cq+128*x], m6}, 0, 1, 2, 3, 4, 5, 6, 7
.main2:
punpckhwd m4, m0, m1
punpcklwd m0, m1
punpckhwd m1, m2, m3
punpcklwd m2, m3
punpckhwd m3, m0, m4
punpcklwd m0, m4
punpcklwd m4, m2, m1
punpckhwd m2, m1
punpckhqdq m1, m0, m4
punpcklqdq m0, m4
call m(iidentity_8x8_internal_10bpc).write_2x8x2
punpcklqdq m0, m3, m2
punpckhqdq m1, m3, m2
jmp m(iidentity_8x8_internal_10bpc).write_2x8x2
cglobal inv_txfm_add_identity_identity_16x32_12bpc, 4, 7, 12, dst, stride, c, eob
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(inv_txfm_add_identity_identity_16x32_10bpc).pass1
cglobal inv_txfm_add_dct_dct_32x16_10bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jz .dconly
PROLOGUE 0, 8, 16, 32*40, dst, stride, c, eob
%undef cmp
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
lea r6, [rsp+32*4]
call .main
cmp eobd, 36
jge .full
call m(inv_txfm_add_dct_dct_8x32_10bpc).transpose
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, [rsp]
lea r6, [pw_5+128]
mov r7, dstq
call m(idct_16x16_internal_8bpc).main
call .write_16x16
mova m0, [r5+32*3]
mova m1, [r5+32*2]
mova m2, [r5+32*1]
mova m3, [r5+32*0]
mova m4, [r5-32*1]
mova m5, [r5-32*2]
mova m6, [r5-32*3]
mova m7, [r5-32*4]
call m(inv_txfm_add_dct_dct_8x32_10bpc).transpose
pxor m8, m8
REPX {mova x, m8}, m9, m10, m11, m12, m13, m14, [rsp]
jmp .end
.dconly:
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_10bpc]
mov [cq], eobd ; 0
or r3d, 16
add r6d, 128
sar r6d, 8
imul r6d, 181
add r6d, 384
sar r6d, 9
jmp m(inv_txfm_add_dct_dct_32x8_10bpc).dconly2
.full:
add cq, 32
mova [r4+32*3], m0
,
r4]m2
mova [r4+32*0], m3
mova [r4-32*1], m4
mova [r4-32*2], m5
mova [r4-32*3], m6
mova [r4-32*4], m7
call .main
sub r4, 32*16 ; topleft 16x8
call .transpose_16x16
lea r6, [pw_5+128]
call.ain
call m(idct_16x16_internal_8bpc).main
call .write_16x16
mova m0, [r5+java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 34
mova m1, [r5+32*2]
mova m2, [r5+32*1]
ovam3,[r5+32*0java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mova eobd,
mova m5, [r5-32*2]
mova m6, [r5-32*3]
m7 r-24]
add r4, 32*8 ; bottomleft 16x8
call .transpose_16x16
.end:
lea dstq, [r7+32]
call m(idct_16x16_internal_8bpc).main
call .write_16x16
RET
ALIGN function_align
.transpose_16x16:
punpckhdq m8, m3, m1
punpckldq m3, m1
punpckhdq m1, m0, m2
punpckldq m0, m2
punpckhdq m2, m7, m5
punpckldq m7, m5
punpckhdq m5, m4, m6
punpckldq m4, m6
punpckhqdq m6, m0, m4
punpcklqdq m0, m4
punpckhqdq m4, m1, m5
punpcklqdq m1, m5
punpckhqdq m5, m7, m3
punpcklqdq m7, m3
punpckhqdq m3, m2, m8
punpcklqdq m2, m8
vinserti128 m8, m0, xm7, 1
vperm2i128 m12, m0, m7, 0x31
vinserti128 m9, m6, xm5, 1
vperm2i128 m13, m6, m5, 0x31
vinserti128 m10, m1, xm2, 1
vperm2i128 m14, m1, m2, 0x31
vinserti128 m11, m4, xm3, 1
vperm2i128 m15, m4, m3, 0x31
mova m0, [r4+32*3]
mova m1, [r4+32*2]
mova m2, [r4+32*1]
mova m3, [r4+32*0]
mova m4, [r4-32*1]
mova m5, [r4-32*2]
mova m6, [r4-32*3]
mova m7, [r4-32*4]
mova [rsp+gprsize], m15
jmp m(inv_txfm_add_dct_dct_8x32_10bpc).transpose
ALIGN function_align
.main:
vpbroadcastd m14, [pd_2896]
vpbroadcastd m11, [pd_2048]
pmulld m0, m14, [cq+64* 1]
pmulld m1, m14, [cq+64* 7]
pmulld m2, m14, [cq+64* 9]
pmulld m3, m14, [cq+64*15]
pmulld m4, m14, [cq+64*17]
pmulld m5, m14, [cq+64*23]
pmulld m6, m14, [cq+64*25]
pmulld m7, m14, [cq+64*31]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part1_rect2
pmulld m0, m14, [cq+64* 3]
pmulld m1, m14, [cq+64* 5]
pmulld m2, m14, [cq+64*11]
pmulld m3, m14, [cq+64*13]
pmulld m4, m14, [cq+64*19]
pmulld m5, m14, [cq+64*21]
pmulld m6, m14, [cq+64*27]
pmulld m7, m14, [cq+64*29]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part2_rect2
pmulld m0, m14, [cq+64* 2]
pmulld m1, m14, [cq+64* 6]
pmulld m2, m14, [cq+64*10]
pmulld m3, m14, [cq+64*14]
java.lang.StringIndexOutOfBoundsException: Range [32, 8) out of bounds for length 32
pmulld m5, m14, [cq+ IDCT32_END 3, 14, 8, 9, 10,1
pmulld m6, m14, [cq+64*26]
pmulld m7, m14, [cq+64*30]
call m(idct_8x16_internal_10bpc).main_oddhalf_rect2
pmulld m0, m14, [cq+64* 0]
pmulld m1, m14, [cq+64* 4]
pmulld m2, m14, [cq+64* 8]
pmulld m3, m14, [cq+64*12]
pmulld m4, m14, [cq+64*16]
pmulld m5 m14, [cq+64*20]
pmulld m6, m14, [cq+64*24]
pmulld m7, m14, [cq+64*28]
call m(idct_8x8_internal_10bpc).main_rect2
call m(idct_8x16_internal_10bpc).main_evenhalf
pxor m8, m8
mov r7d, 64*30
.main_zero_loop:
mova [cq+r7-64*2], m8
mova [cq+r7-64*1], m8
mova [cq+r7+64*0], m8
mova [cq+r7+64*1], m8
sub r7d, 64*4
jg .main_zero_loop
.main_end:
psrld m11, 11 ; pd_1
IDCT32_END 0 lear3
IDCT32_END 1, 14, 8, 9, 10, 1
punpckhwd m8, m0, m1 ; 16 17
punpcklwd m0, m1 ; 0 1
punpcklwd m1, m14, m15 ; 14 15
punpckhwd m14, m15 ; 30 31
mova [r5+32*3], m8
mova [r5+32*2], m14
IDCT32_END 2, 15, 8, 9, 10, 1
IDCT32_END 3, 14, 8, 9, 10, 1
punpckhwd m8, m2, m3 ; 18 19
punpcklwd m2, m3 ; 2 3
punpcklwd m3, m14, m15 ; 12 13
punpckhwd m14, m15 ; 28 29
mova [r5+32*1], m8
mova [r5+32*0], m14
IDCT32_END 4, 15, 8, 9, 10, 1
IDCT32_END 5, 14, 8, 9, 10, 1
punpckhwd m8, m4, m5 ; 20 21
punpcklwd m4, m5 ; 4 5
punpcklwd m5, m14, m15 ; 10 11
punpckhwd m14, m15 ; 26 27
mova [r5-32*1], m8
mova r5322,m14
IDCT32_END 6, 15, 8, 9, 10, 1
IDCT32_END 7, 14, 8, 9, 10, 1
punpckhwd m8, m6, m7 ; 22 23
punpcklwd m6, m7 ; 6 7
punpcklwd m7, m14, m15 ; 8 9
punpckhwd m14, m15 ; 24 25
mova [r5-32*3], m8
mova [r5-32*4], m14
ret
ALIGN function_align
.write_16x16:
mova m1, [rsp+gprsize+32*1]
mova [rsp+gprsize+32*1], m9
mova [rsp+gprsize+32*2], m12
vpbroadcastd m12, [pw_2048]
vpbroadcastd m9, [pixel_10bpc_max]
lea r3, [strideq*3]
pxor m8, m8
pmulhrsw m0, m12
pmulhrsw m1, m12
pmulhrsw m2, m12
pmulhrsw
call m(idct_16x8_internal_10bpc).write_16x4
pmulhrsw m0cglobal inv_txfm_add_identity_identity_32x16_10bpc ,7,11,dst, , c, eob
pmulhrsw m1, m12, m5
pmulhrsw m2, m12, m6
pmulhrsw m3, m12, m7
call m(idct_16x8_internal_10bpc).write_16x4
pmulhrsw m0, m12, [rsp+gprsize+32*0]
pmulhrsw vpbroadcastd m8[pw_2896x8]
pmulhrsw m2, m12, m10
pmulhrsw m3, m12, m11
call m(idct_16x8_internal_10bpc).write_16x4
pmulhrsw m0, m12, [rsp+gprsize+32*2]
pmulhrsw m1, m12, m13
pmulhrsw m2, m12, m14
pmulhrsw m3, m12, m15
jmp m(idct_16x8_internal_10bpc).write_16x4
cglobal inv_txfm_add_identity_identity_32x16_10bpc, 4, 7, 11, dst, stride, c, eob
vpbroadcastd m7, [pixel_10bpc_max]
.pass1:
vpbroadcastd m8, [pw_2896x8]
vpbroadcastd m9, [pw_1697x16]
vpbroadcastd m10, [pw_4096]
lea r6, [java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 31
pxor m6, m6
mov r5, dstq
call .main
sub eobd, 36
jl .ret
add cq, 32
lea dstq, [dstq+strideq*4]
call .main
add cq, 64*8-32
lea dstq, [r5+16*1]
call .main
sub eobd, 107 ; eob < 143
jl .ret
add cq, 32
lea dstq, [dstq+strideq*4]
call .main
add cq, 64*8-32
lea dstq, [r5+16*2]
call .main
sub eobd, 128 ; eob < 271
jl .ret
add cq, 32
lea dstq, [dstq+strideq*4]
call .main
add cq, 64*8-32
lea dstq, [r5+16*3]
call .main
sub eobd, 128 ; eob < 399
jl.et
add cq, 32
lea dstq, [dstq+strideq*4]
call .main
.ret:
RET
ALIGN function_align
.main:
mova m0, [cq+64*0]
packssdw m0, [cq+64*1]
mova m1, [cq+64*2]
packssdw m1, [cq+64*3]
mova m2, [cq+64*4]
packssdw m2, [cq+64*5]
mova m3, [cq+64*6]
packssdw m3, [cq+64*7]
REPX {pmulhrsw x, m8 }, m0, m1, m2, m3
REPX {paddsw x, x }, m0, m1, m2, m3
REPX {IDTX16 x, 4, 9, _ }, 0, 1, 2, 3
REPX {pmulhrsw x, m10}, m0, m1, m2, m3
REPX {mova [cq+64*x], m6}, 0, 1, 2, 3, 4, 5, 6, 7
jmp m(inv_txfm_add_identity_identity_16x32_10bpc).main2
cglobal inv_txfm_add_identity_identity_32x16_12bpc, 4, 7, 11, dst, stride, c, eob
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(inv_txfm_add_identity_identity_32x16_10bpc).pass1
cglobal inv_txfm_add_dct_dct_32x32_10bpc, 4, 7, 0, dst, stride, c, eob
test eobd, eobd
jz .dconly
PROLOGUE 0, 8, 16, 32*83, dst, stride, c, eob
%undef cmp
vpbroadcastd m12, [clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
lea r6, [rsp+32*7]
call .main
cmp eobd, 36
jl .fast
call .main
cmp eobd, 136
jl .fast
call .main
cmp eobd, 300
jl .fast
call .main
jmp .pass2
.dconly:
imul r6d, [cq], 181
vpbroadcastd m3, [dconly_10bpc]
mov [cq], eobd ; 0
or r3d, 32
jmp m(inv_txfm_add_dct_dct_32x8_10bpc).dconly
.fast:
lea r4, [rsp+32*71]
pxor m0, m0
.fast_loop:
REPX {mova [r6+32*x], m0}, -4, -3, -2, -1, 0, 1, 2, 3
add r6, 32*8
cmp r6, r4
jl .fast_loop
.pass2:
lea r3, [rsp+32*3]
mov r4, r6
lea r5, [r6+32*8]
lea r6, [pw_5+128]
call .pass2_oddhalf
call .pass2_evenhalf
imul r2, strideq, 19
lea r3, [strideq*3]
add r2, dstq
call m(inv_txfm_add_dct_dct_16x32_10bpc).pass2_end
sub dstq, r3
lea r2, [r2+r3+32]
add dstq, 32
lea r3, [rsp+32*11]
call .pass2_oddhalf
call .pass2_evenhalf
lea r3, [strideq*3]
call m(inv_txfm_add_dct_dct_16x32_10bpc).pass2_end
RET
ALIGN function_align
.main:
mova m0, [cq+128* 1]
movam1 cq+128 7]
mova m2, [cq+128* 9]
mova m3, [cq+128*15]
mova,x} m0, ,m2 m3
mova m5, [cq+128*23]
mova m6, [cq+128*25]
mova m7, [cq+128*31]
vpbroadcastd m11, [pd_2048]
vpbroadcastd m14, [pd_2896]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part1
mova m0, [cq+128* 3]
mova m1, [cq+128* 5]
mova m2, [cq+128*11]
mova m3, [cq+128*13]
mova m4, [cq+128*19]x_bpc, ,7, ,dst, stride,c,eob
mova m5, [cq+128*21]
mova m6, [cq+128*27]
,c+128]
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_oddhalf_part2
mova m0, [cq+128* 2]
mova m1, [cq+128* 6]
mova m2, [cq+128*10]
mova m3, [cq+128*14]
mova m4, [cq+128*18]
mova m5, [cq+128*22]
mova m6, [cq+128*26]
mova m7, [cq+128*30]
call m(idct_8x16_internal_10bpc).main_oddhalf
mova m0, [cq+128* 0]
mova m1, [cq+128* 4]
mova m2, [cq+128* 8]
mova m3, [cq+128*12]
mova m4, [cq+128*16]
mova m5, [cq+128*20]
mova m6, [cq+128*24]
mova m7, [ call.java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
call m(idct_8x8_internal_10bpc).main
call m(idct_8x16_internal_10bpc).main_evenhalf
call m(inv_txfm_add_dct_dct_8x32_10bpc).main_end
pxor m15, m15
mov r7d, 128*29
.main_zero_loop:
mova [cq+r7-128*1], m15
mova [cq+r7+128*0], m15
mova [cq+r7+128*1], m15
mova [cq+r7+128*2], m15
sub r7d, 128*4
jg .main_zero_loop
add cq, 32
mova [r4-32*4], m0
mova [r4-32*3], m1
mova [r4-32*2], m2
mova [r4-32*1], m3
mova [r4+32*0], m4
mova [r4+32*1], m5
mova [r4+32*2], m6
mova [r4+32*3], m7
mova m0, [r5+32*3]
mova m1, [r5+32*2]
mova m2, [r5+32*1]
mova m3, [r5+32*0]
mova m4, [r5-32*1]
mova m5, [r5-32*2]
mova m6, [r5-32*3]
mova m7, [r5-32*4]
call m(inv_txfm_add_dct_dct_8x32_10bpc).transpose
mova [r5-32*4], m0
mova [r5-32*3], m1
mova m
mova [r5-32*1], subdstq r3
mova [r5+32*0], m4
mova [r5+32*1], m5
mova [r5+32*2 add ,32
mova [r5+32*3], m7
ret
ALIGN function_align
.pass2_oddhalf:
mova m0, [r3+32* 1] ; 1
mova m1, [r3+32* 3] ; 3
mova m2, [r3+32* 5] ; 5
mova m3, [r3+32* 7] ; 7
mova m4, [r3+32*17] ; 9
mova m5, [r3+32*19] ; 11
mova m6, [r3+32*21] ; 13
mova m7, [r3+32*23] ; 15
m8r3+32*]; 17
mova m9, [r3+32*35] ; 19
mova m10, [r3+32*37] ; 21
mova m11, [r3+32*39] ; 23
mova m12, [r3+32*49] ; 25
mova m13, [r3+32*51] ; 27
mova m14, [r3+32*m ,[+*]
mova m15, [r3+32*55] ; 31
jmp m(inv_txfm_add_dct_dct_16x32_8bpc).main_oddhalf
ALIGN function_align
.pass2_evenhalf:
m0,[r3+ ] ; 0
mova m1, [r3+32* 2] ; 2
mova m2, [r3+32* 4] ; 4
mova m3, [r3+32* 6] ; 6
mova m4, [r3+32*16] ; 8
mova m5, [r3+32*18] ; 10
mova m6, [r3+32*20] ; 12
mova m7, [r3+32*22] ; 14
mova m8, [r3+32*32] ; 16
mova m9, [r3+32*34] ; 18
mova m10, [r3+32*36] ; 20
mova m11, [r3+32*38] ; 22
mova m12, [r3+32*48] ; 24
mova m13, [r3+32*50] ; 26
mova m14, [r3+32*52] ; 28
mova m15, [r3+32*54] ; 30
mova [rsp+gprsize], m15
jmp m(idct_16x16_internal_8bpc).main
cglobal inv_txfm_add_identity_identity_32x32_10bpc, 4, 8, 8, dst, stride, c, eob
%undef cmp
vpbroadcastd m7, [pixel_10bpc_max]
.pass1:
vpbroadcastd m5, [pw_8192]
pxor m6, m6
lea r6, [strideq*3]
lea r5, [strideq*5]
lea r4, [strideq+r6*2] ; strideq*7
call .main ; 0
cmp eobd, 36
jl .ret
add cq, 128*8 ; 0 1
mov r7, dstq ; 1
add dstq, 16
call .main
call .main2
cmp eobd, 136
jl .ret
add cq, 128*16-32 ; 0 1 2
lea dstq, [r7+16*2] ; 1 2
call .main ; 2
call .main2
call .main2
cmp eobd, 300
jl .ret
add cq, 128*24-64 ; 0 1 2 3
add r7, 16*3 ; 1 2 3
mov dstq, r7 ; 2 3
call .main ; 3
call .main2
call .main2
call .main2
cmp eobd, 535
jl .ret
add cq, 128*24-64 ; 0 1 2 3
lea dstq, [r7+strideq*8] ; 1 2 3 4
mov r7, dstq ; 2 3 4
call .main ; 3 4
call .main2
call .main2
cmp eobd, 755
r
add cq, 128*16-32 ; 0 1 2 3
lea dstq, [r7+strideq*8] ; 1 2 3 4
call .main ; 2 3 4 5
call .main2 ; 3 4 5
cmp eobd, 911
jl .ret
add cq, 128*8 ; 0 1 2 3
add dstq, 16 ; 1 2 3 4
call .main ; 2 3 4 5
.retmova [cqr7+128],m15
RET
ALIGN function_align
.main2:
sub cq, 128*8-32
.main:
mova m0, [cq+128*0]
packssdw m0,[+1281]
mova m1, [cq+128*2]
packssdw m1, [cq+128*3]
mova m2, [cq+128*4]
packssdw m2, [cq+128*5]
mova m3, [cq+128*6]
packssdw m3, [cq+128*7]
REPX {pmulhrsw x, m5}, m0, m1, m2, m3
jmp m(inv_txfm_add_identity_identity_8x32_10bpc).main_zero
cglobal inv_txfm_add_identity_identity_32x32_12bpc, 4, 8, 8, dst, stride, c, eob
vpbroadcastd m7, [pixel_12bpc_max]
jmp m(inv_txfm_add_identity_identity_32x32_10bpc).pass1
%macro IDCT64_PART2_END 6-10 ; out, src[1-2], tmp[1-3], (offset[1-4])
%if %1 & 1
mova m%5, [r5-32*(51-%1)] ; idct16 out 0+n
mova m%4, [r4-32*(14+%1)] ; idct32 out31-n
%else
mova m%5, [r4-32*(45-%1)]
mova m%4, [r5-32*(20+%1)]
%endif
paddsw m%6, m%5, m%4 ; idct32 out 0+n
psubsw m%5, m%4 ; idct32 out31-n
paddsw m%4, m%5, m%3 ; out31-n
psubsw m%5, m%3 ; out32+n
paddsw m%3, m%6, m%2 ; out 0+n
psubsw m%6, m%2 ; out63-n
REPX {pmulhrsw x, m14}, m%5, m%6, m%4, m%3
%ifALIGN
%define %%d0 r2
%define %%d1 dstq
%else
%define %%d0 dstq
%define %%d1 r2
%endif
paddw m%3, [%%d0+%7 ]
paddw m%4, [%%d1+%8 ]
paddw m%5, [%%d0+%9 ]
m%,[%1+10]
pxor m%2, m%2
REPX {pmaxsw x, m%2}, m%3, m%4, m%5, m%6
vpbroadcastd m%2, [pixel_10bpc_max]
REPX {pminsw x, m%2}, m%3, m%4, m%5, m%6
%d0% ] m%
mova [%%d1+%8 ], m%4
mova [%%d0+%9 ], m%5
mova [%%d1+%10 m7 []
%endmacro
cglobal inv_txfm_add_dct_dct_16x64_10bpc, 4lea[3java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
test eobd, eobd
jz .dconly
PROLOGUE 0, 10, 16, 32*98, dst, stride, c, eob
%undef cmp
vpbroadcastd m11, [pd_2048]
vpbroadcastdm12 clip_18b_min]
vpbroadcastd m13, [clip_18b_max]
vpbroadcastd jljava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 | |