diff options
author | Martin Storsjö <martin@martin.st> | 2022-03-02 01:24:08 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2022-03-02 01:25:09 +0300 |
commit | b53ff29d80a21180e5ad9bbe39a02541151f4f53 (patch) | |
tree | ea41315cc046192b88f4be052ea16653067e2e38 /src/arm | |
parent | 0028e8ea57b9391915e97c8f69251bf47dd13357 (diff) |
arm: itx: Do clipping in all narrowing downshifts
This should avoid the risk of unexpected wraparound. This shouldn't
technically be needed for spec compliant bitstreams. In practice,
this fixes the mismatch observed in issue !388 (in checkasm generated
input data).
Diffstat (limited to 'src/arm')
-rw-r--r-- | src/arm/32/itx.S | 358 | ||||
-rw-r--r-- | src/arm/64/itx.S | 282 |
2 files changed, 320 insertions, 320 deletions
diff --git a/src/arm/32/itx.S b/src/arm/32/itx.S index a1aea41..ceea025 100644 --- a/src/arm/32/itx.S +++ b/src/arm/32/itx.S @@ -134,9 +134,9 @@ endconst vmlsl.s16 \d1, \s3, \c1 .endm -.macro vrshrn_8h d0, d1, s0, s1, shift - vrshrn.i32 \d0, \s0, \shift - vrshrn.i32 \d1, \s1, \shift +.macro vqrshrn_8h d0, d1, s0, s1, shift + vqrshrn.s32 \d0, \s0, \shift + vqrshrn.s32 \d1, \s1, \shift .endm .macro scale_input c, r0, r1, r2 r3, r4, r5, r6, r7 @@ -418,11 +418,11 @@ endfunc vmull_vmlal q3, \r1, \r3, d0[3], d0[2] vmull_vmlsl q2, \r1, \r3, d0[2], d0[3] vmull_vmlal q1, \r0, \r2, d0[0], d0[0] - vrshrn.i32 d6, q3, #12 - vrshrn.i32 d7, q2, #12 + vqrshrn.s32 d6, q3, #12 + vqrshrn.s32 d7, q2, #12 vmull_vmlsl q2, \r0, \r2, d0[0], d0[0] - vrshrn.i32 d2, q1, #12 - vrshrn.i32 d3, q2, #12 + vqrshrn.s32 d2, q1, #12 + vqrshrn.s32 d3, q2, #12 vqadd.s16 \r0, d2, d6 vqsub.s16 \r3, d2, d6 vqadd.s16 \r1, d3, d7 @@ -433,11 +433,11 @@ endfunc vmull_vmlal_8h q6, q7, \r2, \r3, \r6, \r7, d0[3], d0[2] vmull_vmlsl_8h q4, q5, \r2, \r3, \r6, \r7, d0[2], d0[3] vmull_vmlal_8h q2, q3, \r0, \r1, \r4, \r5, d0[0], d0[0] - vrshrn_8h d12, d13, q6, q7, #12 - vrshrn_8h d14, d15, q4, q5, #12 + vqrshrn_8h d12, d13, q6, q7, #12 + vqrshrn_8h d14, d15, q4, q5, #12 vmull_vmlsl_8h q4, q5, \r0, \r1, \r4, \r5, d0[0], d0[0] - vrshrn_8h d4, d5, q2, q3, #12 - vrshrn_8h d6, d7, q4, q5, #12 + vqrshrn_8h d4, d5, q2, q3, #12 + vqrshrn_8h d6, d7, q4, q5, #12 vqadd.s16 \q0, q2, q6 vqsub.s16 \q3, q2, q6 vqadd.s16 \q1, q3, q7 @@ -478,10 +478,10 @@ endfunc vadd.s32 q3, q3, q10 vsub.s32 q11, q11, q10 - vrshrn.i32 \o0, q2, #12 - vrshrn.i32 \o2, q1, #12 - vrshrn.i32 \o1, q3, #12 - vrshrn.i32 \o3, q11, #12 + vqrshrn.s32 \o0, q2, #12 + vqrshrn.s32 \o2, q1, #12 + vqrshrn.s32 \o1, q3, #12 + vqrshrn.s32 \o3, q11, #12 .endm function inv_adst_4h_x4_neon, export=1 @@ -533,21 +533,21 @@ endfunc vsub.s32 q4, q4, q2 // out3 vsub.s32 q5, q5, q3 - vrshrn.i32 d20, q10, #12 - vrshrn.i32 d21, q11, #12 + vqrshrn.s32 d20, q10, #12 + vqrshrn.s32 d21, q11, #12 - vrshrn.i32 \o0, q8, #12 - vrshrn.i32 \o1, q9, #12 + vqrshrn.s32 \o0, q8, #12 + vqrshrn.s32 \o1, q9, #12 .ifc \o4, d18 vmov q9, q10 .endif - vrshrn.i32 \o2, q6, #12 - vrshrn.i32 \o3, q7, #12 + vqrshrn.s32 \o2, q6, #12 + vqrshrn.s32 \o3, q7, #12 - vrshrn.i32 \o6, q4, #12 - vrshrn.i32 \o7, q5, #12 + vqrshrn.s32 \o6, q4, #12 + vqrshrn.s32 \o7, q5, #12 .endm function inv_adst_8h_x4_neon, export=1 @@ -702,11 +702,11 @@ def_fn_4x4 identity, flipadst vmull_vmlsl_8h q2, q3, \r2, \r3, \r14, \r15, d1[0], d1[1] // -> t4a vmull_vmlal_8h q4, q5, \r2, \r3, \r14, \r15, d1[1], d1[0] // -> t7a vmull_vmlsl_8h q6, q7, \r10, \r11, \r6, \r7, d1[2], d1[3] // -> t5a - vrshrn_8h \r2, \r3, q2, q3, #12 // t4a - vrshrn_8h \r14, \r15, q4, q5, #12 // t7a + vqrshrn_8h \r2, \r3, q2, q3, #12 // t4a + vqrshrn_8h \r14, \r15, q4, q5, #12 // t7a vmull_vmlal_8h q2, q3, \r10, \r11, \r6, \r7, d1[3], d1[2] // -> t6a - vrshrn_8h \r6, \r7, q6, q7, #12 // t5a - vrshrn_8h \r10, \r11, q2, q3, #12 // t6a + vqrshrn_8h \r6, \r7, q6, q7, #12 // t5a + vqrshrn_8h \r10, \r11, q2, q3, #12 // t6a vqadd.s16 q2, \q1, \q3 // t4 vqsub.s16 \q1, \q1, \q3 // t5a @@ -715,8 +715,8 @@ def_fn_4x4 identity, flipadst vmull_vmlsl_8h q4, q5, \r6, \r7, \r2, \r3, d0[0], d0[0] // -> t5 vmull_vmlal_8h q6, q7, \r6, \r7, \r2, \r3, d0[0], d0[0] // -> t6 - vrshrn_8h d8, d9, q4, q5, #12 // t5 - vrshrn_8h d10, d11, q6, q7, #12 // t6 + vqrshrn_8h d8, d9, q4, q5, #12 // t5 + vqrshrn_8h d10, d11, q6, q7, #12 // t6 vqsub.s16 \q7, \q0, q3 // out7 vqadd.s16 \q0, \q0, q3 // out0 @@ -735,11 +735,11 @@ def_fn_4x4 identity, flipadst vmull_vmlsl q1, \r1, \r7, d1[0], d1[1] // -> t4a vmull_vmlal q2, \r1, \r7, d1[1], d1[0] // -> t7a vmull_vmlsl q3, \r5, \r3, d1[2], d1[3] // -> t5a - vrshrn.i32 \r1, q1, #12 // t4a + vqrshrn.s32 \r1, q1, #12 // t4a vmull_vmlal q1, \r5, \r3, d1[3], d1[2] // -> t6a - vrshrn.i32 \r7, q2, #12 // t7a - vrshrn.i32 \r3, q3, #12 // t5a - vrshrn.i32 \r5, q1, #12 // taa + vqrshrn.s32 \r7, q2, #12 // t7a + vqrshrn.s32 \r3, q3, #12 // t5a + vqrshrn.s32 \r5, q1, #12 // taa vqadd.s16 d2, \r1, \r3 // t4 vqsub.s16 \r1, \r1, \r3 // t5a @@ -748,8 +748,8 @@ def_fn_4x4 identity, flipadst vmull_vmlsl q2, \r3, \r1, d0[0], d0[0] // -> t5 vmull_vmlal q3, \r3, \r1, d0[0], d0[0] // -> t6 - vrshrn.i32 d4, q2, #12 // t5 - vrshrn.i32 d5, q3, #12 // t6 + vqrshrn.s32 d4, q2, #12 // t5 + vqrshrn.s32 d5, q3, #12 // t6 vqsub.s16 \r7, \r0, d3 // out7 vqadd.s16 \r0, \r0, d3 // out0 @@ -783,19 +783,19 @@ endfunc vmull_vmlal_8h q2, q3, d30, d31, d16, d17, d0[0], d0[1] vmull_vmlsl_8h q4, q5, d30, d31, d16, d17, d0[1], d0[0] vmull_vmlal_8h q6, q7, d26, d27, d20, d21, d0[2], d0[3] - vrshrn_8h d16, d17, q2, q3, #12 // t0a - vrshrn_8h d30, d31, q4, q5, #12 // t1a + vqrshrn_8h d16, d17, q2, q3, #12 // t0a + vqrshrn_8h d30, d31, q4, q5, #12 // t1a vmull_vmlsl_8h q2, q3, d26, d27, d20, d21, d0[3], d0[2] vmull_vmlal_8h q4, q5, d22, d23, d24, d25, d1[0], d1[1] - vrshrn_8h d20, d21, q6, q7, #12 // t2a - vrshrn_8h d26, d27, q2, q3, #12 // t3a + vqrshrn_8h d20, d21, q6, q7, #12 // t2a + vqrshrn_8h d26, d27, q2, q3, #12 // t3a vmull_vmlsl_8h q6, q7, d22, d23, d24, d25, d1[1], d1[0] vmull_vmlal_8h q2, q3, d18, d19, d28, d29, d1[2], d1[3] - vrshrn_8h d24, d25, q4, q5, #12 // t4a - vrshrn_8h d22, d23, q6, q7, #12 // t5a + vqrshrn_8h d24, d25, q4, q5, #12 // t4a + vqrshrn_8h d22, d23, q6, q7, #12 // t5a vmull_vmlsl_8h q4, q5, d18, d19, d28, d29, d1[3], d1[2] - vrshrn_8h d28, d29, q2, q3, #12 // t6a - vrshrn_8h d18, d19, q4, q5, #12 // t7a + vqrshrn_8h d28, d29, q2, q3, #12 // t6a + vqrshrn_8h d18, d19, q4, q5, #12 // t7a vqadd.s16 q2, q8, q12 // t0 vqsub.s16 q3, q8, q12 // t4 @@ -810,13 +810,13 @@ endfunc vmull_vmlsl_8h q12, q13, d6, d7, d10, d11, d2[2], d2[3] vmull_vmlsl_8h q14, q15, d22, d23, d14, d15, d2[3], d2[2] - vrshrn_8h d6, d7, q8, q9, #12 // t4a - vrshrn_8h d10, d11, q12, q13, #12 // t5a + vqrshrn_8h d6, d7, q8, q9, #12 // t4a + vqrshrn_8h d10, d11, q12, q13, #12 // t5a vmull_vmlal_8h q8, q9, d22, d23, d14, d15, d2[2], d2[3] - vrshrn_8h d14, d15, q14, q15, #12 // t6a - vrshrn_8h d22, d23, q8, q9, #12 // t7a + vqrshrn_8h d14, d15, q14, q15, #12 // t6a + vqrshrn_8h d22, d23, q8, q9, #12 // t7a vqadd.s16 \q0, q2, q6 // out0 vqsub.s16 q2, q2, q6 // t2 @@ -833,11 +833,11 @@ endfunc vmull_vmlal_8h q10, q11, d4, d5, d8, d9, d2[0], d2[0] // -> out3 (q11 or q12) vmull_vmlsl_8h q6, q7, d4, d5, d8, d9, d2[0], d2[0] // -> out4 (q12 or q11) vmull_vmlsl_8h q12, q13, d6, d7, d10, d11, d2[0], d2[0] // -> out5 (q13 or q10) - vrshrn_8h d4, d5, q10, q11, #12 // out3 + vqrshrn_8h d4, d5, q10, q11, #12 // out3 vmull_vmlal_8h q10, q11, d6, d7, d10, d11, d2[0], d2[0] // -> out2 (q10 or q13) - vrshrn_8h d6, d7, q12, q13, #12 // out5 - vrshrn_8h \r4, \r5, q10, q11, #12 // out2 (q10 or q13) - vrshrn_8h \r8, \r9, q6, q7, #12 // out4 (q12 or q11) + vqrshrn_8h d6, d7, q12, q13, #12 // out5 + vqrshrn_8h \r4, \r5, q10, q11, #12 // out2 (q10 or q13) + vqrshrn_8h \r8, \r9, q6, q7, #12 // out4 (q12 or q11) vqneg.s16 \q3, q2 // out3 vqneg.s16 \q5, q3 // out5 @@ -850,19 +850,19 @@ endfunc vmull_vmlal q2, d23, d16, d0[0], d0[1] vmull_vmlsl q3, d23, d16, d0[1], d0[0] vmull_vmlal q4, d21, d18, d0[2], d0[3] - vrshrn.i32 d16, q2, #12 // t0a - vrshrn.i32 d23, q3, #12 // t1a + vqrshrn.s32 d16, q2, #12 // t0a + vqrshrn.s32 d23, q3, #12 // t1a vmull_vmlsl q5, d21, d18, d0[3], d0[2] vmull_vmlal q6, d19, d20, d1[0], d1[1] - vrshrn.i32 d18, q4, #12 // t2a - vrshrn.i32 d21, q5, #12 // t3a + vqrshrn.s32 d18, q4, #12 // t2a + vqrshrn.s32 d21, q5, #12 // t3a vmull_vmlsl q7, d19, d20, d1[1], d1[0] vmull_vmlal q2, d17, d22, d1[2], d1[3] - vrshrn.i32 d20, q6, #12 // t4a - vrshrn.i32 d19, q7, #12 // t5a + vqrshrn.s32 d20, q6, #12 // t4a + vqrshrn.s32 d19, q7, #12 // t5a vmull_vmlsl q3, d17, d22, d1[3], d1[2] - vrshrn.i32 d22, q2, #12 // t6a - vrshrn.i32 d17, q3, #12 // t7a + vqrshrn.s32 d22, q2, #12 // t6a + vqrshrn.s32 d17, q3, #12 // t7a vqadd.s16 d4, d16, d20 // t0 vqsub.s16 d5, d16, d20 // t4 @@ -877,13 +877,13 @@ endfunc vmull_vmlsl q10, d5, d7, d2[2], d2[3] vmull_vmlsl q11, d19, d9, d2[3], d2[2] - vrshrn.i32 d5, q8, #12 // t4a - vrshrn.i32 d7, q10, #12 // t5a + vqrshrn.s32 d5, q8, #12 // t4a + vqrshrn.s32 d7, q10, #12 // t5a vmull_vmlal q8, d19, d9, d2[2], d2[3] - vrshrn.i32 d9, q11, #12 // t6a - vrshrn.i32 d19, q8, #12 // t7a + vqrshrn.s32 d9, q11, #12 // t6a + vqrshrn.s32 d19, q8, #12 // t7a vqadd.s16 \r0, d4, d8 // out0 vqsub.s16 d4, d4, d8 // t2 @@ -900,11 +900,11 @@ endfunc vmull_vmlal q9, d4, d6, d2[0], d2[0] // -> out3 (d19 or d20) vmull_vmlsl q4, d4, d6, d2[0], d2[0] // -> out4 (d20 or d19) vmull_vmlsl q10, d5, d7, d2[0], d2[0] // -> out5 (d21 or d18) - vrshrn.i32 d4, q9, #12 // out3 + vqrshrn.s32 d4, q9, #12 // out3 vmull_vmlal q9, d5, d7, d2[0], d2[0] // -> out2 (d18 or d21) - vrshrn.i32 d5, q10, #12 // out5 - vrshrn.i32 \r2, q9, #12 // out2 (d18 or d21) - vrshrn.i32 \r4, q4, #12 // out4 (d20 or d19) + vqrshrn.s32 d5, q10, #12 // out5 + vqrshrn.s32 \r2, q9, #12 // out2 (d18 or d21) + vqrshrn.s32 \r4, q4, #12 // out4 (d20 or d19) vqneg.s16 \r3, d4 // out3 vqneg.s16 \r5, d5 // out5 @@ -1122,19 +1122,19 @@ function inv_dct_4h_x16_neon, export=1 vmull_vmlsl q2, d17, d31, d2[0], d2[1] // -> t8a vmull_vmlal q3, d17, d31, d2[1], d2[0] // -> t15a vmull_vmlsl q4, d25, d23, d2[2], d2[3] // -> t9a - vrshrn.i32 d17, q2, #12 // t8a - vrshrn.i32 d31, q3, #12 // t15a + vqrshrn.s32 d17, q2, #12 // t8a + vqrshrn.s32 d31, q3, #12 // t15a vmull_vmlal q2, d25, d23, d2[3], d2[2] // -> t14a vmull_vmlsl q3, d21, d27, d3[0], d3[1] // -> t10a - vrshrn.i32 d23, q4, #12 // t9a - vrshrn.i32 d25, q2, #12 // t14a + vqrshrn.s32 d23, q4, #12 // t9a + vqrshrn.s32 d25, q2, #12 // t14a vmull_vmlal q4, d21, d27, d3[1], d3[0] // -> t13a vmull_vmlsl q2, d29, d19, d3[2], d3[3] // -> t11a - vrshrn.i32 d21, q3, #12 // t10a - vrshrn.i32 d27, q4, #12 // t13a + vqrshrn.s32 d21, q3, #12 // t10a + vqrshrn.s32 d27, q4, #12 // t13a vmull_vmlal q3, d29, d19, d3[3], d3[2] // -> t12a - vrshrn.i32 d19, q2, #12 // t11a - vrshrn.i32 d29, q3, #12 // t12a + vqrshrn.s32 d19, q2, #12 // t11a + vqrshrn.s32 d29, q3, #12 // t12a idct_4h_x8 d16, d18, d20, d22, d24, d26, d28, d30 @@ -1149,14 +1149,14 @@ function inv_dct_4h_x16_neon, export=1 vmull_vmlsl q3, d5, d4, d0[2], d0[3] // -> t9a vmull_vmlal q4, d5, d4, d0[3], d0[2] // -> t14a - vrshrn.i32 d21, q3, #12 // t9a - vrshrn.i32 d27, q4, #12 // t14a + vqrshrn.s32 d21, q3, #12 // t9a + vqrshrn.s32 d27, q4, #12 // t14a vmull_vmlsl q3, d29, d23, d0[2], d0[3] // -> t13a vmull_vmlal q4, d29, d23, d0[3], d0[2] // -> t10a - vrshrn.i32 d29, q3, #12 // t13a + vqrshrn.s32 d29, q3, #12 // t13a vneg.s32 q4, q4 - vrshrn.i32 d23, q4, #12 // t10a + vqrshrn.s32 d23, q4, #12 // t10a vqsub.s16 d4, d17, d19 // t11a vqadd.s16 d17, d17, d19 // t8a @@ -1171,11 +1171,11 @@ function inv_dct_4h_x16_neon, export=1 vmull_vmlal q4, d5, d4, d0[0], d0[0] // -> t12 vmull_vmlsl q2, d25, d21, d0[0], d0[0] // -> t10a - vrshrn.i32 d6, q3, #12 // t11 - vrshrn.i32 d7, q4, #12 // t12 + vqrshrn.s32 d6, q3, #12 // t11 + vqrshrn.s32 d7, q4, #12 // t12 vmull_vmlal q4, d25, d21, d0[0], d0[0] // -> t13a - vrshrn.i32 d4, q2, #12 // t10a - vrshrn.i32 d5, q4, #12 // t13a + vqrshrn.s32 d4, q2, #12 // t10a + vqrshrn.s32 d5, q4, #12 // t13a vqadd.s16 d8, d16, d31 // out0 vqsub.s16 d31, d16, d31 // out15 @@ -1208,35 +1208,35 @@ endfunc vmull_vmlal q2, d31, d16, d0[0], d0[1] // -> t0 vmull_vmlsl q3, d31, d16, d0[1], d0[0] // -> t1 vmull_vmlal q4, d29, d18, d0[2], d0[3] // -> t2 - vrshrn.i32 d16, q2, #12 // t0 - vrshrn.i32 d31, q3, #12 // t1 + vqrshrn.s32 d16, q2, #12 // t0 + vqrshrn.s32 d31, q3, #12 // t1 vmull_vmlsl q2, d29, d18, d0[3], d0[2] // -> t3 vmull_vmlal q3, d27, d20, d1[0], d1[1] // -> t4 - vrshrn.i32 d18, q4, #12 // t2 - vrshrn.i32 d29, q2, #12 // t3 + vqrshrn.s32 d18, q4, #12 // t2 + vqrshrn.s32 d29, q2, #12 // t3 vmull_vmlsl q4, d27, d20, d1[1], d1[0] // -> t5 vmull_vmlal q2, d25, d22, d1[2], d1[3] // -> t6 - vrshrn.i32 d20, q3, #12 // t4 - vrshrn.i32 d27, q4, #12 // t5 + vqrshrn.s32 d20, q3, #12 // t4 + vqrshrn.s32 d27, q4, #12 // t5 vmull_vmlsl q3, d25, d22, d1[3], d1[2] // -> t7 vmull_vmlal q4, d23, d24, d2[0], d2[1] // -> t8 - vrshrn.i32 d22, q2, #12 // t6 - vrshrn.i32 d25, q3, #12 // t7 + vqrshrn.s32 d22, q2, #12 // t6 + vqrshrn.s32 d25, q3, #12 // t7 vmull_vmlsl q2, d23, d24, d2[1], d2[0] // -> t9 vmull_vmlal q3, d21, d26, d2[2], d2[3] // -> t10 - vrshrn.i32 d23, q4, #12 // t8 - vrshrn.i32 d24, q2, #12 // t9 + vqrshrn.s32 d23, q4, #12 // t8 + vqrshrn.s32 d24, q2, #12 // t9 vmull_vmlsl q4, d21, d26, d2[3], d2[2] // -> t11 vmull_vmlal q2, d19, d28, d3[0], d3[1] // -> t12 - vrshrn.i32 d21, q3, #12 // t10 - vrshrn.i32 d26, q4, #12 // t11 + vqrshrn.s32 d21, q3, #12 // t10 + vqrshrn.s32 d26, q4, #12 // t11 vmull_vmlsl q3, d19, d28, d3[1], d3[0] // -> t13 vmull_vmlal q4, d17, d30, d3[2], d3[3] // -> t14 - vrshrn.i32 d19, q2, #12 // t12 - vrshrn.i32 d28, q3, #12 // t13 + vqrshrn.s32 d19, q2, #12 // t12 + vqrshrn.s32 d28, q3, #12 // t13 vmull_vmlsl q2, d17, d30, d3[3], d3[2] // -> t15 - vrshrn.i32 d17, q4, #12 // t14 - vrshrn.i32 d30, q2, #12 // t15 + vqrshrn.s32 d17, q4, #12 // t14 + vqrshrn.s32 d30, q2, #12 // t15 vld1.16 {q0}, [r12, :128] @@ -1260,19 +1260,19 @@ endfunc vmull_vmlal q2, d2, d3, d1[1], d1[0] // -> t8 vmull_vmlsl q3, d2, d3, d1[0], d1[1] // -> t9 vmull_vmlal q4, d18, d29, d1[3], d1[2] // -> t10 - vrshrn.i32 d17, q2, #12 // t8 - vrshrn.i32 d30, q3, #12 // t9 + vqrshrn.s32 d17, q2, #12 // t8 + vqrshrn.s32 d30, q3, #12 // t9 vmull_vmlsl q2, d18, d29, d1[2], d1[3] // -> t11 vmull_vmlsl q3, d27, d20, d1[1], d1[0] // -> t12 - vrshrn.i32 d18, q4, #12 // t10 - vrshrn.i32 d29, q2, #12 // t11 + vqrshrn.s32 d18, q4, #12 // t10 + vqrshrn.s32 d29, q2, #12 // t11 vmull_vmlal q4, d27, d20, d1[0], d1[1] // -> t13 vmull_vmlsl q2, d25, d22, d1[3], d1[2] // -> t14 - vrshrn.i32 d27, q3, #12 // t12 - vrshrn.i32 d20, q4, #12 // t13 + vqrshrn.s32 d27, q3, #12 // t12 + vqrshrn.s32 d20, q4, #12 // t13 vmull_vmlal q3, d25, d22, d1[2], d1[3] // -> t15 - vrshrn.i32 d25, q2, #12 // t14 - vrshrn.i32 d22, q3, #12 // t15 + vqrshrn.s32 d25, q2, #12 // t14 + vqrshrn.s32 d22, q3, #12 // t15 vqsub.s16 d2, d16, d21 // t4 vqadd.s16 d16, d16, d21 // t0 @@ -1294,19 +1294,19 @@ endfunc vmull_vmlal q2, d2, d3, d0[3], d0[2] // -> t4a vmull_vmlsl q3, d2, d3, d0[2], d0[3] // -> t5a vmull_vmlsl q4, d24, d23, d0[3], d0[2] // -> t6a - vrshrn.i32 d22, q2, #12 // t4a - vrshrn.i32 d25, q3, #12 // t5a + vqrshrn.s32 d22, q2, #12 // t4a + vqrshrn.s32 d25, q3, #12 // t5a vmull_vmlal q2, d24, d23, d0[2], d0[3] // -> t7a vmull_vmlal q3, d17, d30, d0[3], d0[2] // -> t12 - vrshrn.i32 d24, q4, #12 // t6a - vrshrn.i32 d23, q2, #12 // t7a + vqrshrn.s32 d24, q4, #12 // t6a + vqrshrn.s32 d23, q2, #12 // t7a vmull_vmlsl q4, d17, d30, d0[2], d0[3] // -> t13 vmull_vmlsl q2, d29, d18, d0[3], d0[2] // -> t14 - vrshrn.i32 d17, q3, #12 // t12 + vqrshrn.s32 d17, q3, #12 // t12 vmull_vmlal q3, d29, d18, d0[2], d0[3] // -> t15 - vrshrn.i32 d29, q4, #12 // t13 - vrshrn.i32 d30, q2, #12 // t14 - vrshrn.i32 d18, q3, #12 // t15 + vqrshrn.s32 d29, q4, #12 // t13 + vqrshrn.s32 d30, q2, #12 // t14 + vqrshrn.s32 d18, q3, #12 // t15 vqsub.s16 d2, d16, d21 // t2a .ifc \o0, d16 @@ -1343,21 +1343,21 @@ endfunc vmull_vmlal q2, d2, d21, d0[0], d0[0] // -> out7 (d23 or d24) vmull_vmlal q3, d26, d3, d0[0], d0[0] // -> out5 (d21 or d26) - vrshrn.i32 d24, q12, #12 // out8 - vrshrn.i32 d4, q2, #12 // out7 - vrshrn.i32 d5, q3, #12 // out5 + vqrshrn.s32 d24, q12, #12 // out8 + vqrshrn.s32 d4, q2, #12 // out7 + vqrshrn.s32 d5, q3, #12 // out5 vmull_vmlsl q4, d26, d3, d0[0], d0[0] // -> out10 (d26 or d21) vmull_vmlal q1, d22, d23, d0[0], d0[0] // -> out4 (d20 or d27) - vrshrn.i32 d26, q4, #12 // out10 + vqrshrn.s32 d26, q4, #12 // out10 vmull_vmlsl q4, d22, d23, d0[0], d0[0] // -> out11 (d27 or d20) vmull_vmlal q11, d27, d20, d0[0], d0[0] // -> out6 (d22 or d25) vmull_vmlsl q3, d27, d20, d0[0], d0[0] // -> out9 (d25 or d22) - vrshrn.i32 \o4, q1, #12 // out4 - vrshrn.i32 d7, q3, #12 // out9 - vrshrn.i32 d6, q4, #12 // out11 - vrshrn.i32 \o6, q11, #12 // out6 + vqrshrn.s32 \o4, q1, #12 // out4 + vqrshrn.s32 d7, q3, #12 // out9 + vqrshrn.s32 d6, q4, #12 // out11 + vqrshrn.s32 \o6, q11, #12 // out6 .ifc \o8, d23 vmov \o8, d24 @@ -1927,35 +1927,35 @@ function inv_dct32_odd_4h_x16_neon, export=1 vmull_vmlsl q2, d16, d31, d0[0], d0[1] // -> t16a vmull_vmlal q3, d16, d31, d0[1], d0[0] // -> t31a vmull_vmlsl q4, d24, d23, d0[2], d0[3] // -> t17a - vrshrn.i32 d16, q2, #12 // t16a - vrshrn.i32 d31, q3, #12 // t31a + vqrshrn.s32 d16, q2, #12 // t16a + vqrshrn.s32 d31, q3, #12 // t31a vmull_vmlal q2, d24, d23, d0[3], d0[2] // -> t30a vmull_vmlsl q3, d20, d27, d1[0], d1[1] // -> t18a - vrshrn.i32 d24, q4, #12 // t17a - vrshrn.i32 d23, q2, #12 // t30a + vqrshrn.s32 d24, q4, #12 // t17a + vqrshrn.s32 d23, q2, #12 // t30a vmull_vmlal q4, d20, d27, d1[1], d1[0] // -> t29a vmull_vmlsl q2, d28, d19, d1[2], d1[3] // -> t19a - vrshrn.i32 d20, q3, #12 // t18a - vrshrn.i32 d27, q4, #12 // t29a + vqrshrn.s32 d20, q3, #12 // t18a + vqrshrn.s32 d27, q4, #12 // t29a vmull_vmlal q3, d28, d19, d1[3], d1[2] // -> t28a vmull_vmlsl q4, d18, d29, d2[0], d2[1] // -> t20a - vrshrn.i32 d28, q2, #12 // t19a - vrshrn.i32 d19, q3, #12 // t28a + vqrshrn.s32 d28, q2, #12 // t19a + vqrshrn.s32 d19, q3, #12 // t28a vmull_vmlal q2, d18, d29, d2[1], d2[0] // -> t27a vmull_vmlsl q3, d26, d21, d2[2], d2[3] // -> t21a - vrshrn.i32 d18, q4, #12 // t20a - vrshrn.i32 d29, q2, #12 // t27a + vqrshrn.s32 d18, q4, #12 // t20a + vqrshrn.s32 d29, q2, #12 // t27a vmull_vmlal q4, d26, d21, d2[3], d2[2] // -> t26a vmull_vmlsl q2, d22, d25, d3[0], d3[1] // -> t22a - vrshrn.i32 d26, q3, #12 // t21a - vrshrn.i32 d21, q4, #12 // t26a + vqrshrn.s32 d26, q3, #12 // t21a + vqrshrn.s32 d21, q4, #12 // t26a vmull_vmlal q3, d22, d25, d3[1], d3[0] // -> t25a vmull_vmlsl q4, d30, d17, d3[2], d3[3] // -> t23a - vrshrn.i32 d22, q2, #12 // t22a - vrshrn.i32 d25, q3, #12 // t25a + vqrshrn.s32 d22, q2, #12 // t22a + vqrshrn.s32 d25, q3, #12 // t25a vmull_vmlal q2, d30, d17, d3[3], d3[2] // -> t24a - vrshrn.i32 d30, q4, #12 // t23a - vrshrn.i32 d17, q2, #12 // t24a + vqrshrn.s32 d30, q4, #12 // t23a + vqrshrn.s32 d17, q2, #12 // t24a vld1.16 {q0}, [r12, :128] @@ -1979,21 +1979,21 @@ function inv_dct32_odd_4h_x16_neon, export=1 vmull_vmlsl q2, d3, d2, d1[0], d1[1] // -> t17a vmull_vmlal q3, d3, d2, d1[1], d1[0] // -> t30a vmull_vmlal q4, d19, d24, d1[1], d1[0] // -> t18a - vrshrn.i32 d21, q2, #12 // t17a - vrshrn.i32 d27, q3, #12 // t30a + vqrshrn.s32 d21, q2, #12 // t17a + vqrshrn.s32 d27, q3, #12 // t30a vneg.s32 q4, q4 // -> t18a vmull_vmlsl q1, d19, d24, d1[0], d1[1] // -> t29a vmull_vmlsl q2, d22, d18, d1[2], d1[3] // -> t21a - vrshrn.i32 d19, q4, #12 // t18a - vrshrn.i32 d24, q1, #12 // t29a + vqrshrn.s32 d19, q4, #12 // t18a + vqrshrn.s32 d24, q1, #12 // t29a vmull_vmlal q3, d22, d18, d1[3], d1[2] // -> t26a vmull_vmlal q4, d17, d20, d1[3], d1[2] // -> t22a - vrshrn.i32 d22, q2, #12 // t21a - vrshrn.i32 d18, q3, #12 // t26a + vqrshrn.s32 d22, q2, #12 // t21a + vqrshrn.s32 d18, q3, #12 // t26a vneg.s32 q4, q4 // -> t22a vmull_vmlsl q1, d17, d20, d1[2], d1[3] // -> t25a - vrshrn.i32 d17, q4, #12 // t22a - vrshrn.i32 d20, q1, #12 // t25a + vqrshrn.s32 d17, q4, #12 // t22a + vqrshrn.s32 d20, q1, #12 // t25a vqsub.s16 d2, d27, d24 // t29 vqadd.s16 d27, d27, d24 // t30 @@ -2015,21 +2015,21 @@ function inv_dct32_odd_4h_x16_neon, export=1 vmull_vmlsl q2, d2, d3, d0[2], d0[3] // -> t18a vmull_vmlal q3, d2, d3, d0[3], d0[2] // -> t29a vmull_vmlsl q4, d29, d24, d0[2], d0[3] // -> t19 - vrshrn.i32 d18, q2, #12 // t18a - vrshrn.i32 d25, q3, #12 // t29a + vqrshrn.s32 d18, q2, #12 // t18a + vqrshrn.s32 d25, q3, #12 // t29a vmull_vmlal q1, d29, d24, d0[3], d0[2] // -> t28 vmull_vmlal q2, d26, d19, d0[3], d0[2] // -> t20 - vrshrn.i32 d29, q4, #12 // t19 - vrshrn.i32 d24, q1, #12 // t28 + vqrshrn.s32 d29, q4, #12 // t19 + vqrshrn.s32 d24, q1, #12 // t28 vneg.s32 q2, q2 // -> t20 vmull_vmlsl q3, d26, d19, d0[2], d0[3] // -> t27 vmull_vmlal q4, d20, d28, d0[3], d0[2] // -> t21a - vrshrn.i32 d26, q2, #12 // t20 - vrshrn.i32 d19, q3, #12 // t27 + vqrshrn.s32 d26, q2, #12 // t20 + vqrshrn.s32 d19, q3, #12 // t27 vneg.s32 q4, q4 // -> t21a vmull_vmlsl q1, d20, d28, d0[2], d0[3] // -> t26a - vrshrn.i32 d20, q4, #12 // t21a - vrshrn.i32 d28, q1, #12 // t26a + vqrshrn.s32 d20, q4, #12 // t21a + vqrshrn.s32 d28, q1, #12 // t26a vqsub.s16 d2, d16, d30 // t23 vqadd.s16 d16, d16, d30 // t16 = out16 @@ -2051,24 +2051,24 @@ function inv_dct32_odd_4h_x16_neon, export=1 vmull_vmlsl q2, d24, d26, d0[0], d0[0] // -> t20 vmull_vmlal q3, d24, d26, d0[0], d0[0] // -> t27 - vrshrn.i32 d20, q2, #12 // t20 - vrshrn.i32 d22, q3, #12 // t27 + vqrshrn.s32 d20, q2, #12 // t20 + vqrshrn.s32 d22, q3, #12 // t27 vmull_vmlal q2, d25, d27, d0[0], d0[0] // -> t26a vmull_vmlsl q3, d25, d27, d0[0], d0[0] // -> t21a vmov d27, d22 // t27 - vrshrn.i32 d26, q2, #12 // t26a + vqrshrn.s32 d26, q2, #12 // t26a vmull_vmlsl q12, d21, d23, d0[0], d0[0] // -> t22 vmull_vmlal q2, d21, d23, d0[0], d0[0] // -> t25 - vrshrn.i32 d21, q3, #12 // t21a - vrshrn.i32 d22, q12, #12 // t22 - vrshrn.i32 d25, q2, #12 // t25 + vqrshrn.s32 d21, q3, #12 // t21a + vqrshrn.s32 d22, q12, #12 // t22 + vqrshrn.s32 d25, q2, #12 // t25 vmull_vmlsl q2, d3, d2, d0[0], d0[0] // -> t23a vmull_vmlal q3, d3, d2, d0[0], d0[0] // -> t24a - vrshrn.i32 d23, q2, #12 // t23a - vrshrn.i32 d24, q3, #12 // t24a + vqrshrn.s32 d23, q2, #12 // t23a + vqrshrn.s32 d24, q3, #12 // t24a bx lr endfunc @@ -2679,11 +2679,11 @@ function inv_dct64_step1_neon vmull_vmlsl q3, d29, d26, d2[1], d2[0] // -> t61a vneg.s32 q2, q2 // t34a vmull_vmlsl q4, d30, d25, d2[1], d2[0] // -> t33a - vrshrn.i32 d26, q2, #12 // t34a + vqrshrn.s32 d26, q2, #12 // t34a vmull_vmlal q2, d30, d25, d2[0], d2[1] // -> t62a - vrshrn.i32 d29, q3, #12 // t61a - vrshrn.i32 d25, q4, #12 // t33a - vrshrn.i32 d30, q2, #12 // t62a + vqrshrn.s32 d29, q3, #12 // t61a + vqrshrn.s32 d25, q4, #12 // t33a + vqrshrn.s32 d30, q2, #12 // t62a vqadd.s16 d16, d24, d27 // t32a vqsub.s16 d19, d24, d27 // t35a @@ -2697,11 +2697,11 @@ function inv_dct64_step1_neon vmull_vmlal q2, d21, d18, d2[2], d2[3] // -> t61a vmull_vmlsl q3, d21, d18, d2[3], d2[2] // -> t34a vmull_vmlal q4, d20, d19, d2[2], d2[3] // -> t60 - vrshrn.i32 d21, q2, #12 // t61a - vrshrn.i32 d18, q3, #12 // t34a + vqrshrn.s32 d21, q2, #12 // t61a + vqrshrn.s32 d18, q3, #12 // t34a vmull_vmlsl q2, d20, d19, d2[3], d2[2] // -> t35 - vrshrn.i32 d20, q4, #12 // t60 - vrshrn.i32 d19, q2, #12 // t35 + vqrshrn.s32 d20, q4, #12 // t60 + vqrshrn.s32 d19, q2, #12 // t35 vst1.16 {d16, d17, d18, d19}, [r6, :128]! vst1.16 {d20, d21, d22, d23}, [r6, :128]! @@ -2738,12 +2738,12 @@ function inv_dct64_step2_neon vmull_vmlal q2, d27, d25, d0[3], d0[2] // -> t56a vmull_vmlsl q3, d27, d25, d0[2], d0[3] // -> t39a vmull_vmlal q4, d31, d28, d0[3], d0[2] // -> t40a - vrshrn.i32 d25, q2, #12 // t56a - vrshrn.i32 d27, q3, #12 // t39a + vqrshrn.s32 d25, q2, #12 // t56a + vqrshrn.s32 d27, q3, #12 // t39a vneg.s32 q4, q4 // t40a vmull_vmlsl q2, d31, d28, d0[2], d0[3] // -> t55a - vrshrn.i32 d31, q4, #12 // t40a - vrshrn.i32 d28, q2, #12 // t55a + vqrshrn.s32 d31, q4, #12 // t40a + vqrshrn.s32 d28, q2, #12 // t55a vqadd.s16 d16, d24, d29 // t32a vqsub.s16 d19, d24, d29 // t47a @@ -2757,11 +2757,11 @@ function inv_dct64_step2_neon vmull_vmlsl q2, d21, d18, d0[0], d0[0] // -> t40a vmull_vmlal q3, d21, d18, d0[0], d0[0] // -> t55a vmull_vmlsl q4, d20, d19, d0[0], d0[0] // -> t47 - vrshrn.i32 d18, q2, #12 // t40a - vrshrn.i32 d21, q3, #12 // t55a + vqrshrn.s32 d18, q2, #12 // t40a + vqrshrn.s32 d21, q3, #12 // t55a vmull_vmlal q2, d20, d19, d0[0], d0[0] // -> t48 - vrshrn.i32 d19, q4, #12 // t47 - vrshrn.i32 d20, q2, #12 // t48 + vqrshrn.s32 d19, q4, #12 // t47 + vqrshrn.s32 d20, q2, #12 // t48 vstr d16, [r6, #2*4*0] // t32a vstr d17, [r9, #2*4*0] // t39 diff --git a/src/arm/64/itx.S b/src/arm/64/itx.S index ec932af..c9650e9 100644 --- a/src/arm/64/itx.S +++ b/src/arm/64/itx.S @@ -133,10 +133,10 @@ endconst .endif .endm -.macro rshrn_sz d0, s0, s1, shift, sz - rshrn \d0\().4h, \s0\().4s, \shift +.macro sqrshrn_sz d0, s0, s1, shift, sz + sqrshrn \d0\().4h, \s0\().4s, \shift .ifc \sz, .8h - rshrn2 \d0\().8h, \s1\().4s, \shift + sqrshrn2 \d0\().8h, \s1\().4s, \shift .endif .endm @@ -438,11 +438,11 @@ endfunc smull_smlal v6, v7, \r1, \r3, v0.h[3], v0.h[2], \sz smull_smlsl v4, v5, \r1, \r3, v0.h[2], v0.h[3], \sz smull_smlal v2, v3, \r0, \r2, v0.h[0], v0.h[0], \sz - rshrn_sz v6, v6, v7, #12, \sz - rshrn_sz v7, v4, v5, #12, \sz + sqrshrn_sz v6, v6, v7, #12, \sz + sqrshrn_sz v7, v4, v5, #12, \sz smull_smlsl v4, v5, \r0, \r2, v0.h[0], v0.h[0], \sz - rshrn_sz v2, v2, v3, #12, \sz - rshrn_sz v3, v4, v5, #12, \sz + sqrshrn_sz v2, v2, v3, #12, \sz + sqrshrn_sz v3, v4, v5, #12, \sz sqadd \r0\sz, v2\sz, v6\sz sqsub \r3\sz, v2\sz, v6\sz sqadd \r1\sz, v3\sz, v7\sz @@ -714,11 +714,11 @@ def_fn_4x4 identity, flipadst smull_smlsl v2, v3, \r1, \r7, v0.h[4], v0.h[5], \sz // -> t4a smull_smlal v4, v5, \r1, \r7, v0.h[5], v0.h[4], \sz // -> t7a smull_smlsl v6, v7, \r5, \r3, v0.h[6], v0.h[7], \sz // -> t5a - rshrn_sz \r1, v2, v3, #12, \sz // t4a - rshrn_sz \r7, v4, v5, #12, \sz // t7a + sqrshrn_sz \r1, v2, v3, #12, \sz // t4a + sqrshrn_sz \r7, v4, v5, #12, \sz // t7a smull_smlal v2, v3, \r5, \r3, v0.h[7], v0.h[6], \sz // -> t6a - rshrn_sz \r3, v6, v7, #12, \sz // t5a - rshrn_sz \r5, v2, v3, #12, \sz // t6a + sqrshrn_sz \r3, v6, v7, #12, \sz // t5a + sqrshrn_sz \r5, v2, v3, #12, \sz // t6a sqadd v2\sz, \r1\sz, \r3\sz // t4 sqsub \r1\sz, \r1\sz, \r3\sz // t5a @@ -727,8 +727,8 @@ def_fn_4x4 identity, flipadst smull_smlsl v4, v5, \r3, \r1, v0.h[0], v0.h[0], \sz // -> t5 smull_smlal v6, v7, \r3, \r1, v0.h[0], v0.h[0], \sz // -> t6 - rshrn_sz v4, v4, v5, #12, \sz // t5 - rshrn_sz v5, v6, v7, #12, \sz // t6 + sqrshrn_sz v4, v4, v5, #12, \sz // t5 + sqrshrn_sz v5, v6, v7, #12, \sz // t6 sqsub \r7\sz, \r0\sz, v3\sz // out7 sqadd \r0\sz, \r0\sz, v3\sz // out0 @@ -762,19 +762,19 @@ endfunc smull_smlal v2, v3, v23, v16, v0.h[0], v0.h[1], \sz smull_smlsl v4, v5, v23, v16, v0.h[1], v0.h[0], \sz smull_smlal v6, v7, v21, v18, v0.h[2], v0.h[3], \sz - rshrn_sz v16, v2, v3, #12, \sz // t0a - rshrn_sz v23, v4, v5, #12, \sz // t1a + sqrshrn_sz v16, v2, v3, #12, \sz // t0a + sqrshrn_sz v23, v4, v5, #12, \sz // t1a smull_smlsl v2, v3, v21, v18, v0.h[3], v0.h[2], \sz smull_smlal v4, v5, v19, v20, v0.h[4], v0.h[5], \sz - rshrn_sz v18, v6, v7, #12, \sz // t2a - rshrn_sz v21, v2, v3, #12, \sz // t3a + sqrshrn_sz v18, v6, v7, #12, \sz // t2a + sqrshrn_sz v21, v2, v3, #12, \sz // t3a smull_smlsl v6, v7, v19, v20, v0.h[5], v0.h[4], \sz smull_smlal v2, v3, v17, v22, v0.h[6], v0.h[7], \sz - rshrn_sz v20, v4, v5, #12, \sz // t4a - rshrn_sz v19, v6, v7, #12, \sz // t5a + sqrshrn_sz v20, v4, v5, #12, \sz // t4a + sqrshrn_sz v19, v6, v7, #12, \sz // t5a smull_smlsl v4, v5, v17, v22, v0.h[7], v0.h[6], \sz - rshrn_sz v22, v2, v3, #12, \sz // t6a - rshrn_sz v17, v4, v5, #12, \sz // t7a + sqrshrn_sz v22, v2, v3, #12, \sz // t6a + sqrshrn_sz v17, v4, v5, #12, \sz // t7a sqadd v2\sz, v16\sz, v20\sz // t0 sqsub v3\sz, v16\sz, v20\sz // t4 @@ -789,13 +789,13 @@ endfunc smull_smlsl v20, v21, v3, v5, v1.h[2], v1.h[3], \sz smull_smlsl v22, v23, v19, v7, v1.h[3], v1.h[2], \sz - rshrn_sz v3, v16, v17, #12, \sz // t4a - rshrn_sz v5, v20, v21, #12, \sz // t5a + sqrshrn_sz v3, v16, v17, #12, \sz // t4a + sqrshrn_sz v5, v20, v21, #12, \sz // t5a smull_smlal v16, v17, v19, v7, v1.h[2], v1.h[3], \sz - rshrn_sz v7, v22, v23, #12, \sz // t6a - rshrn_sz v19, v16, v17, #12, \sz // t7a + sqrshrn_sz v7, v22, v23, #12, \sz // t6a + sqrshrn_sz v19, v16, v17, #12, \sz // t7a sqadd \o0\()\sz, v2\sz, v6\sz // out0 sqsub v2\sz, v2\sz, v6\sz // t2 @@ -812,11 +812,11 @@ endfunc smull_smlal v18, v19, v2, v4, v1.h[0], v1.h[0], \sz // -> out3 (v19 or v20) smull_smlsl v6, v7, v2, v4, v1.h[0], v1.h[0], \sz // -> out4 (v20 or v19) smull_smlsl v20, v21, v3, v5, v1.h[0], v1.h[0], \sz // -> out5 (v21 or v18) - rshrn_sz v2, v18, v19, #12, \sz // out3 + sqrshrn_sz v2, v18, v19, #12, \sz // out3 smull_smlal v18, v19, v3, v5, v1.h[0], v1.h[0], \sz // -> out2 (v18 or v21) - rshrn_sz v3, v20, v21, #12, \sz // out5 - rshrn_sz \o2, v18, v19, #12, \sz // out2 (v18 or v21) - rshrn_sz \o4, v6, v7, #12, \sz // out4 (v20 or v19) + sqrshrn_sz v3, v20, v21, #12, \sz // out5 + sqrshrn_sz \o2, v18, v19, #12, \sz // out2 (v18 or v21) + sqrshrn_sz \o4, v6, v7, #12, \sz // out4 (v20 or v19) sqneg \o3\()\sz, v2\sz // out3 sqneg \o5\()\sz, v3\sz // out5 @@ -1033,19 +1033,19 @@ def_fns_48 8, 4 smull_smlsl v2, v3, v17, v31, v1.h[0], v1.h[1], \sz // -> t8a smull_smlal v4, v5, v17, v31, v1.h[1], v1.h[0], \sz // -> t15a smull_smlsl v6, v7, v25, v23, v1.h[2], v1.h[3], \sz // -> t9a - rshrn_sz v17, v2, v3, #12, \sz // t8a - rshrn_sz v31, v4, v5, #12, \sz // t15a + sqrshrn_sz v17, v2, v3, #12, \sz // t8a + sqrshrn_sz v31, v4, v5, #12, \sz // t15a smull_smlal v2, v3, v25, v23, v1.h[3], v1.h[2], \sz // -> t14a smull_smlsl v4, v5, v21, v27, v1.h[4], v1.h[5], \sz // -> t10a - rshrn_sz v23, v6, v7, #12, \sz // t9a - rshrn_sz v25, v2, v3, #12, \sz // t14a + sqrshrn_sz v23, v6, v7, #12, \sz // t9a + sqrshrn_sz v25, v2, v3, #12, \sz // t14a smull_smlal v6, v7, v21, v27, v1.h[5], v1.h[4], \sz // -> t13a smull_smlsl v2, v3, v29, v19, v1.h[6], v1.h[7], \sz // -> t11a - rshrn_sz v21, v4, v5, #12, \sz // t10a - rshrn_sz v27, v6, v7, #12, \sz // t13a + sqrshrn_sz v21, v4, v5, #12, \sz // t10a + sqrshrn_sz v27, v6, v7, #12, \sz // t13a smull_smlal v4, v5, v29, v19, v1.h[7], v1.h[6], \sz // -> t12a - rshrn_sz v19, v2, v3, #12, \sz // t11a - rshrn_sz v29, v4, v5, #12, \sz // t12a + sqrshrn_sz v19, v2, v3, #12, \sz // t11a + sqrshrn_sz v29, v4, v5, #12, \sz // t12a sqsub v2\sz, v17\sz, v23\sz // t9 sqadd v17\sz, v17\sz, v23\sz // t8 @@ -1058,17 +1058,17 @@ def_fns_48 8, 4 smull_smlsl v4, v5, v3, v2, v0.h[2], v0.h[3], \sz // -> t9a smull_smlal v6, v7, v3, v2, v0.h[3], v0.h[2], \sz // -> t14a - rshrn_sz v21, v4, v5, #12, \sz // t9a - rshrn_sz v27, v6, v7, #12, \sz // t14a + sqrshrn_sz v21, v4, v5, #12, \sz // t9a + sqrshrn_sz v27, v6, v7, #12, \sz // t14a smull_smlsl v4, v5, v29, v23, v0.h[2], v0.h[3], \sz // -> t13a smull_smlal v6, v7, v29, v23, v0.h[3], v0.h[2], \sz // -> t10a - rshrn_sz v29, v4, v5, #12, \sz // t13a + sqrshrn_sz v29, v4, v5, #12, \sz // t13a neg v6.4s, v6.4s .ifc \sz, .8h neg v7.4s, v7.4s .endif - rshrn_sz v23, v6, v7, #12, \sz // t10a + sqrshrn_sz v23, v6, v7, #12, \sz // t10a sqsub v2\sz, v17\sz, v19\sz // t11a sqadd v17\sz, v17\sz, v19\sz // t8a @@ -1083,11 +1083,11 @@ def_fns_48 8, 4 smull_smlal v6, v7, v3, v2, v0.h[0], v0.h[0], \sz // -> t12 smull_smlsl v2, v3, v25, v21, v0.h[0], v0.h[0], \sz // -> t10a - rshrn_sz v4, v4, v5, #12, \sz // t11 - rshrn_sz v5, v6, v7, #12, \sz // t12 + sqrshrn_sz v4, v4, v5, #12, \sz // t11 + sqrshrn_sz v5, v6, v7, #12, \sz // t12 smull_smlal v6, v7, v25, v21, v0.h[0], v0.h[0], \sz // -> t13a - rshrn_sz v2, v2, v3, #12, \sz // t10a - rshrn_sz v3, v6, v7, #12, \sz // t13a + sqrshrn_sz v2, v2, v3, #12, \sz // t10a + sqrshrn_sz v3, v6, v7, #12, \sz // t13a sqadd v6\sz, v16\sz, v31\sz // out0 sqsub v31\sz, v16\sz, v31\sz // out15 @@ -1132,35 +1132,35 @@ endfunc smull_smlal v2, v3, v31, v16, v0.h[0], v0.h[1], \sz // -> t0 smull_smlsl v4, v5, v31, v16, v0.h[1], v0.h[0], \sz // -> t1 smull_smlal v6, v7, v29, v18, v0.h[2], v0.h[3], \sz // -> t2 - rshrn_sz v16, v2, v3, #12, \sz // t0 - rshrn_sz v31, v4, v5, #12, \sz // t1 + sqrshrn_sz v16, v2, v3, #12, \sz // t0 + sqrshrn_sz v31, v4, v5, #12, \sz // t1 smull_smlsl v2, v3, v29, v18, v0.h[3], v0.h[2], \sz // -> t3 smull_smlal v4, v5, v27, v20, v0.h[4], v0.h[5], \sz // -> t4 - rshrn_sz v18, v6, v7, #12, \sz // t2 - rshrn_sz v29, v2, v3, #12, \sz // t3 + sqrshrn_sz v18, v6, v7, #12, \sz // t2 + sqrshrn_sz v29, v2, v3, #12, \sz // t3 smull_smlsl v6, v7, v27, v20, v0.h[5], v0.h[4], \sz // -> t5 smull_smlal v2, v3, v25, v22, v0.h[6], v0.h[7], \sz // -> t6 - rshrn_sz v20, v4, v5, #12, \sz // t4 - rshrn_sz v27, v6, v7, #12, \sz // t5 + sqrshrn_sz v20, v4, v5, #12, \sz // t4 + sqrshrn_sz v27, v6, v7, #12, \sz // t5 smull_smlsl v4, v5, v25, v22, v0.h[7], v0.h[6], \sz // -> t7 smull_smlal v6, v7, v23, v24, v1.h[0], v1.h[1], \sz // -> t8 - rshrn_sz v22, v2, v3, #12, \sz // t6 - rshrn_sz v25, v4, v5, #12, \sz // t7 + sqrshrn_sz v22, v2, v3, #12, \sz // t6 + sqrshrn_sz v25, v4, v5, #12, \sz // t7 smull_smlsl v2, v3, v23, v24, v1.h[1], v1.h[0], \sz // -> t9 smull_smlal v4, v5, v21, v26, v1.h[2], v1.h[3], \sz // -> t10 - rshrn_sz v23, v6, v7, #12, \sz // t8 - rshrn_sz v24, v2, v3, #12, \sz // t9 + sqrshrn_sz v23, v6, v7, #12, \sz // t8 + sqrshrn_sz v24, v2, v3, #12, \sz // t9 smull_smlsl v6, v7, v21, v26, v1.h[3], v1.h[2], \sz // -> t11 smull_smlal v2, v3, v19, v28, v1.h[4], v1.h[5], \sz // -> t12 - rshrn_sz v21, v4, v5, #12, \sz // t10 - rshrn_sz v26, v6, v7, #12, \sz // t11 + sqrshrn_sz v21, v4, v5, #12, \sz // t10 + sqrshrn_sz v26, v6, v7, #12, \sz // t11 smull_smlsl v4, v5, v19, v28, v1.h[5], v1.h[4], \sz // -> t13 smull_smlal v6, v7, v17, v30, v1.h[6], v1.h[7], \sz // -> t14 - rshrn_sz v19, v2, v3, #12, \sz // t12 - rshrn_sz v28, v4, v5, #12, \sz // t13 + sqrshrn_sz v19, v2, v3, #12, \sz // t12 + sqrshrn_sz v28, v4, v5, #12, \sz // t13 smull_smlsl v2, v3, v17, v30, v1.h[7], v1.h[6], \sz // -> t15 - rshrn_sz v17, v6, v7, #12, \sz // t14 - rshrn_sz v30, v2, v3, #12, \sz // t15 + sqrshrn_sz v17, v6, v7, #12, \sz // t14 + sqrshrn_sz v30, v2, v3, #12, \sz // t15 ld1 {v0.8h}, [x16] @@ -1184,19 +1184,19 @@ endfunc smull_smlal v4, v5, v2, v3, v0.h[5], v0.h[4], \sz // -> t8 smull_smlsl v6, v7, v2, v3, v0.h[4], v0.h[5], \sz // -> t9 smull_smlal v2, v3, v18, v29, v0.h[7], v0.h[6], \sz // -> t10 - rshrn_sz v17, v4, v5, #12, \sz // t8 - rshrn_sz v30, v6, v7, #12, \sz // t9 + sqrshrn_sz v17, v4, v5, #12, \sz // t8 + sqrshrn_sz v30, v6, v7, #12, \sz // t9 smull_smlsl v4, v5, v18, v29, v0.h[6], v0.h[7], \sz // -> t11 smull_smlsl v6, v7, v27, v20, v0.h[5], v0.h[4], \sz // -> t12 - rshrn_sz v18, v2, v3, #12, \sz // t10 - rshrn_sz v29, v4, v5, #12, \sz // t11 + sqrshrn_sz v18, v2, v3, #12, \sz // t10 + sqrshrn_sz v29, v4, v5, #12, \sz // t11 smull_smlal v2, v3, v27, v20, v0.h[4], v0.h[5], \sz // -> t13 smull_smlsl v4, v5, v25, v22, v0.h[7], v0.h[6], \sz // -> t14 - rshrn_sz v27, v6, v7, #12, \sz // t12 - rshrn_sz v20, v2, v3, #12, \sz // t13 + sqrshrn_sz v27, v6, v7, #12, \sz // t12 + sqrshrn_sz v20, v2, v3, #12, \sz // t13 smull_smlal v6, v7, v25, v22, v0.h[6], v0.h[7], \sz // -> t15 - rshrn_sz v25, v4, v5, #12, \sz // t14 - rshrn_sz v22, v6, v7, #12, \sz // t15 + sqrshrn_sz v25, v4, v5, #12, \sz // t14 + sqrshrn_sz v22, v6, v7, #12, \sz // t15 sqsub v2\sz, v16\sz, v21\sz // t4 sqadd v16\sz, v16\sz, v21\sz // t0 @@ -1218,19 +1218,19 @@ endfunc smull_smlal v4, v5, v2, v3, v0.h[3], v0.h[2], \sz // -> t4a smull_smlsl v6, v7, v2, v3, v0.h[2], v0.h[3], \sz // -> t5a smull_smlsl v2, v3, v24, v23, v0.h[3], v0.h[2], \sz // -> t6a - rshrn_sz v22, v4, v5, #12, \sz // t4a - rshrn_sz v25, v6, v7, #12, \sz // t5a + sqrshrn_sz v22, v4, v5, #12, \sz // t4a + sqrshrn_sz v25, v6, v7, #12, \sz // t5a smull_smlal v4, v5, v24, v23, v0.h[2], v0.h[3], \sz // -> t7a smull_smlal v6, v7, v17, v30, v0.h[3], v0.h[2], \sz // -> t12 - rshrn_sz v24, v2, v3, #12, \sz // t6a - rshrn_sz v23, v4, v5, #12, \sz // t7a + sqrshrn_sz v24, v2, v3, #12, \sz // t6a + sqrshrn_sz v23, v4, v5, #12, \sz // t7a smull_smlsl v2, v3, v17, v30, v0.h[2], v0.h[3], \sz // -> t13 smull_smlsl v4, v5, v29, v18, v0.h[3], v0.h[2], \sz // -> t14 - rshrn_sz v17, v6, v7, #12, \sz // t12 + sqrshrn_sz v17, v6, v7, #12, \sz // t12 smull_smlal v6, v7, v29, v18, v0.h[2], v0.h[3], \sz // -> t15 - rshrn_sz v29, v2, v3, #12, \sz // t13 - rshrn_sz v30, v4, v5, #12, \sz // t14 - rshrn_sz v18, v6, v7, #12, \sz // t15 + sqrshrn_sz v29, v2, v3, #12, \sz // t13 + sqrshrn_sz v30, v4, v5, #12, \sz // t14 + sqrshrn_sz v18, v6, v7, #12, \sz // t15 sqsub v2\sz, v16\sz, v21\sz // t2a .ifc \o0, v16 @@ -1267,21 +1267,21 @@ endfunc smull_smlal v4, v5, v2, v21, v0.h[0], v0.h[0], \sz // -> out7 (v23 or v24) smull_smlal v6, v7, v26, v3, v0.h[0], v0.h[0], \sz // -> out5 (v21 or v26) - rshrn_sz v24, v24, v25, #12, \sz // out8 - rshrn_sz v4, v4, v5, #12, \sz // out7 - rshrn_sz v5, v6, v7, #12, \sz // out5 + sqrshrn_sz v24, v24, v25, #12, \sz // out8 + sqrshrn_sz v4, v4, v5, #12, \sz // out7 + sqrshrn_sz v5, v6, v7, #12, \sz // out5 smull_smlsl v6, v7, v26, v3, v0.h[0], v0.h[0], \sz // -> out10 (v26 or v21) smull_smlal v2, v3, v22, v23, v0.h[0], v0.h[0], \sz // -> out4 (v20 or v27) - rshrn_sz v26, v6, v7, #12, \sz // out10 + sqrshrn_sz v26, v6, v7, #12, \sz // out10 smull_smlsl v6, v7, v22, v23, v0.h[0], v0.h[0], \sz // -> out11 (v27 or v20) smull_smlal v22, v23, v27, v20, v0.h[0], v0.h[0], \sz // -> out6 (v22 or v25) smull_smlsl v21, v25, v27, v20, v0.h[0], v0.h[0], \sz // -> out9 (v25 or v22) - rshrn_sz \o4, v2, v3, #12, \sz // out4 - rshrn_sz v6, v6, v7, #12, \sz // out11 - rshrn_sz v7, v21, v25, #12, \sz // out9 - rshrn_sz \o6, v22, v23, #12, \sz // out6 + sqrshrn_sz \o4, v2, v3, #12, \sz // out4 + sqrshrn_sz v6, v6, v7, #12, \sz // out11 + sqrshrn_sz v7, v21, v25, #12, \sz // out9 + sqrshrn_sz \o6, v22, v23, #12, \sz // out6 .ifc \o8, v23 mov \o8\szb, v24\szb @@ -1860,35 +1860,35 @@ function inv_dct32_odd_8h_x16_neon, export=1 smull_smlsl v2, v3, v16, v31, v0.h[0], v0.h[1], .8h // -> t16a smull_smlal v4, v5, v16, v31, v0.h[1], v0.h[0], .8h // -> t31a smull_smlsl v6, v7, v24, v23, v0.h[2], v0.h[3], .8h // -> t17a - rshrn_sz v16, v2, v3, #12, .8h // t16a - rshrn_sz v31, v4, v5, #12, .8h // t31a + sqrshrn_sz v16, v2, v3, #12, .8h // t16a + sqrshrn_sz v31, v4, v5, #12, .8h // t31a smull_smlal v2, v3, v24, v23, v0.h[3], v0.h[2], .8h // -> t30a smull_smlsl v4, v5, v20, v27, v0.h[4], v0.h[5], .8h // -> t18a - rshrn_sz v24, v6, v7, #12, .8h // t17a - rshrn_sz v23, v2, v3, #12, .8h // t30a + sqrshrn_sz v24, v6, v7, #12, .8h // t17a + sqrshrn_sz v23, v2, v3, #12, .8h // t30a smull_smlal v6, v7, v20, v27, v0.h[5], v0.h[4], .8h // -> t29a smull_smlsl v2, v3, v28, v19, v0.h[6], v0.h[7], .8h // -> t19a - rshrn_sz v20, v4, v5, #12, .8h // t18a - rshrn_sz v27, v6, v7, #12, .8h // t29a + sqrshrn_sz v20, v4, v5, #12, .8h // t18a + sqrshrn_sz v27, v6, v7, #12, .8h // t29a smull_smlal v4, v5, v28, v19, v0.h[7], v0.h[6], .8h // -> t28a smull_smlsl v6, v7, v18, v29, v1.h[0], v1.h[1], .8h // -> t20a - rshrn_sz v28, v2, v3, #12, .8h // t19a - rshrn_sz v19, v4, v5, #12, .8h // t28a + sqrshrn_sz v28, v2, v3, #12, .8h // t19a + sqrshrn_sz v19, v4, v5, #12, .8h // t28a smull_smlal v2, v3, v18, v29, v1.h[1], v1.h[0], .8h // -> t27a smull_smlsl v4, v5, v26, v21, v1.h[2], v1.h[3], .8h // -> t21a - rshrn_sz v18, v6, v7, #12, .8h // t20a - rshrn_sz v29, v2, v3, #12, .8h // t27a + sqrshrn_sz v18, v6, v7, #12, .8h // t20a + sqrshrn_sz v29, v2, v3, #12, .8h // t27a smull_smlal v6, v7, v26, v21, v1.h[3], v1.h[2], .8h // -> t26a smull_smlsl v2, v3, v22, v25, v1.h[4], v1.h[5], .8h // -> t22a - rshrn_sz v26, v4, v5, #12, .8h // t21a - rshrn_sz v21, v6, v7, #12, .8h // t26a + sqrshrn_sz v26, v4, v5, #12, .8h // t21a + sqrshrn_sz v21, v6, v7, #12, .8h // t26a smull_smlal v4, v5, v22, v25, v1.h[5], v1.h[4], .8h // -> t25a smull_smlsl v6, v7, v30, v17, v1.h[6], v1.h[7], .8h // -> t23a - rshrn_sz v22, v2, v3, #12, .8h // t22a - rshrn_sz v25, v4, v5, #12, .8h // t25a + sqrshrn_sz v22, v2, v3, #12, .8h // t22a + sqrshrn_sz v25, v4, v5, #12, .8h // t25a smull_smlal v2, v3, v30, v17, v1.h[7], v1.h[6], .8h // -> t24a - rshrn_sz v30, v6, v7, #12, .8h // t23a - rshrn_sz v17, v2, v3, #12, .8h // t24a + sqrshrn_sz v30, v6, v7, #12, .8h // t23a + sqrshrn_sz v17, v2, v3, #12, .8h // t24a ld1 {v0.8h}, [x16] @@ -1912,23 +1912,23 @@ function inv_dct32_odd_8h_x16_neon, export=1 smull_smlsl v4, v5, v3, v2, v0.h[4], v0.h[5], .8h // -> t17a smull_smlal v6, v7, v3, v2, v0.h[5], v0.h[4], .8h // -> t30a smull_smlal v2, v3, v19, v24, v0.h[5], v0.h[4], .8h // -> t18a - rshrn_sz v21, v4, v5, #12, .8h // t17a - rshrn_sz v27, v6, v7, #12, .8h // t30a + sqrshrn_sz v21, v4, v5, #12, .8h // t17a + sqrshrn_sz v27, v6, v7, #12, .8h // t30a neg v2.4s, v2.4s // -> t18a neg v3.4s, v3.4s // -> t18a smull_smlsl v4, v5, v19, v24, v0.h[4], v0.h[5], .8h // -> t29a smull_smlsl v6, v7, v22, v18, v0.h[6], v0.h[7], .8h // -> t21a - rshrn_sz v19, v2, v3, #12, .8h // t18a - rshrn_sz v24, v4, v5, #12, .8h // t29a + sqrshrn_sz v19, v2, v3, #12, .8h // t18a + sqrshrn_sz v24, v4, v5, #12, .8h // t29a smull_smlal v2, v3, v22, v18, v0.h[7], v0.h[6], .8h // -> t26a smull_smlal v4, v5, v17, v20, v0.h[7], v0.h[6], .8h // -> t22a - rshrn_sz v22, v6, v7, #12, .8h // t21a - rshrn_sz v18, v2, v3, #12, .8h // t26a + sqrshrn_sz v22, v6, v7, #12, .8h // t21a + sqrshrn_sz v18, v2, v3, #12, .8h // t26a neg v4.4s, v4.4s // -> t22a neg v5.4s, v5.4s // -> t22a smull_smlsl v6, v7, v17, v20, v0.h[6], v0.h[7], .8h // -> t25a - rshrn_sz v17, v4, v5, #12, .8h // t22a - rshrn_sz v20, v6, v7, #12, .8h // t25a + sqrshrn_sz v17, v4, v5, #12, .8h // t22a + sqrshrn_sz v20, v6, v7, #12, .8h // t25a sqsub v2.8h, v27.8h, v24.8h // t29 sqadd v27.8h, v27.8h, v24.8h // t30 @@ -1950,23 +1950,23 @@ function inv_dct32_odd_8h_x16_neon, export=1 smull_smlsl v4, v5, v2, v3, v0.h[2], v0.h[3], .8h // -> t18a smull_smlal v6, v7, v2, v3, v0.h[3], v0.h[2], .8h // -> t29a smull_smlsl v2, v3, v29, v24, v0.h[2], v0.h[3], .8h // -> t19 - rshrn_sz v18, v4, v5, #12, .8h // t18a - rshrn_sz v25, v6, v7, #12, .8h // t29a + sqrshrn_sz v18, v4, v5, #12, .8h // t18a + sqrshrn_sz v25, v6, v7, #12, .8h // t29a smull_smlal v4, v5, v29, v24, v0.h[3], v0.h[2], .8h // -> t28 smull_smlal v6, v7, v26, v19, v0.h[3], v0.h[2], .8h // -> t20 - rshrn_sz v29, v2, v3, #12, .8h // t19 - rshrn_sz v24, v4, v5, #12, .8h // t28 + sqrshrn_sz v29, v2, v3, #12, .8h // t19 + sqrshrn_sz v24, v4, v5, #12, .8h // t28 neg v6.4s, v6.4s // -> t20 neg v7.4s, v7.4s // -> t20 smull_smlsl v2, v3, v26, v19, v0.h[2], v0.h[3], .8h // -> t27 smull_smlal v4, v5, v20, v28, v0.h[3], v0.h[2], .8h // -> t21a - rshrn_sz v26, v6, v7, #12, .8h // t20 - rshrn_sz v19, v2, v3, #12, .8h // t27 + sqrshrn_sz v26, v6, v7, #12, .8h // t20 + sqrshrn_sz v19, v2, v3, #12, .8h // t27 neg v4.4s, v4.4s // -> t21a neg v5.4s, v5.4s // -> t21a smull_smlsl v6, v7, v20, v28, v0.h[2], v0.h[3], .8h // -> t26a - rshrn_sz v20, v4, v5, #12, .8h // t21a - rshrn_sz v28, v6, v7, #12, .8h // t26a + sqrshrn_sz v20, v4, v5, #12, .8h // t21a + sqrshrn_sz v28, v6, v7, #12, .8h // t26a sqsub v2.8h, v16.8h, v30.8h // t23 sqadd v16.8h, v16.8h, v30.8h // t16 = out16 @@ -1988,24 +1988,24 @@ function inv_dct32_odd_8h_x16_neon, export=1 smull_smlsl v4, v5, v24, v26, v0.h[0], v0.h[0], .8h // -> t20 smull_smlal v6, v7, v24, v26, v0.h[0], v0.h[0], .8h // -> t27 - rshrn_sz v20, v4, v5, #12, .8h // t20 - rshrn_sz v22, v6, v7, #12, .8h // t27 + sqrshrn_sz v20, v4, v5, #12, .8h // t20 + sqrshrn_sz v22, v6, v7, #12, .8h // t27 smull_smlal v4, v5, v25, v27, v0.h[0], v0.h[0], .8h // -> t26a smull_smlsl v6, v7, v25, v27, v0.h[0], v0.h[0], .8h // -> t21a mov v27.16b, v22.16b // t27 - rshrn_sz v26, v4, v5, #12, .8h // t26a + sqrshrn_sz v26, v4, v5, #12, .8h // t26a smull_smlsl v24, v25, v21, v23, v0.h[0], v0.h[0], .8h // -> t22 smull_smlal v4, v5, v21, v23, v0.h[0], v0.h[0], .8h // -> t25 - rshrn_sz v21, v6, v7, #12, .8h // t21a - rshrn_sz v22, v24, v25, #12, .8h // t22 - rshrn_sz v25, v4, v5, #12, .8h // t25 + sqrshrn_sz v21, v6, v7, #12, .8h // t21a + sqrshrn_sz v22, v24, v25, #12, .8h // t22 + sqrshrn_sz v25, v4, v5, #12, .8h // t25 smull_smlsl v4, v5, v3, v2, v0.h[0], v0.h[0], .8h // -> t23a smull_smlal v6, v7, v3, v2, v0.h[0], v0.h[0], .8h // -> t24a - rshrn_sz v23, v4, v5, #12, .8h // t23a - rshrn_sz v24, v6, v7, #12, .8h // t24a + sqrshrn_sz v23, v4, v5, #12, .8h // t23a + sqrshrn_sz v24, v6, v7, #12, .8h // t24a ret endfunc @@ -2594,11 +2594,11 @@ function inv_dct64_step1_neon neg v2.4s, v2.4s // t34a neg v3.4s, v3.4s // t34a smull_smlsl v6, v7, v30, v25, v1.h[1], v1.h[0], .8h // -> t33a - rshrn_sz v26, v2, v3, #12, .8h // t34a + sqrshrn_sz v26, v2, v3, #12, .8h // t34a smull_smlal v2, v3, v30, v25, v1.h[0], v1.h[1], .8h // -> t62a - rshrn_sz v29, v4, v5, #12, .8h // t61a - rshrn_sz v25, v6, v7, #12, .8h // t33a - rshrn_sz v30, v2, v3, #12, .8h // t62a + sqrshrn_sz v29, v4, v5, #12, .8h // t61a + sqrshrn_sz v25, v6, v7, #12, .8h // t33a + sqrshrn_sz v30, v2, v3, #12, .8h // t62a sqadd v16.8h, v24.8h, v27.8h // t32a sqsub v19.8h, v24.8h, v27.8h // t35a @@ -2612,11 +2612,11 @@ function inv_dct64_step1_neon smull_smlal v2, v3, v21, v18, v1.h[2], v1.h[3], .8h // -> t61a smull_smlsl v4, v5, v21, v18, v1.h[3], v1.h[2], .8h // -> t34a smull_smlal v6, v7, v20, v19, v1.h[2], v1.h[3], .8h // -> t60 - rshrn_sz v21, v2, v3, #12, .8h // t61a - rshrn_sz v18, v4, v5, #12, .8h // t34a + sqrshrn_sz v21, v2, v3, #12, .8h // t61a + sqrshrn_sz v18, v4, v5, #12, .8h // t34a smull_smlsl v2, v3, v20, v19, v1.h[3], v1.h[2], .8h // -> t35 - rshrn_sz v20, v6, v7, #12, .8h // t60 - rshrn_sz v19, v2, v3, #12, .8h // t35 + sqrshrn_sz v20, v6, v7, #12, .8h // t60 + sqrshrn_sz v19, v2, v3, #12, .8h // t35 st1 {v16.8h, v17.8h, v18.8h, v19.8h}, [x6], #64 st1 {v20.8h, v21.8h, v22.8h, v23.8h}, [x6], #64 @@ -2653,13 +2653,13 @@ function inv_dct64_step2_neon smull_smlal v2, v3, v27, v25, v0.h[3], v0.h[2], .8h // -> t56a smull_smlsl v4, v5, v27, v25, v0.h[2], v0.h[3], .8h // -> t39a smull_smlal v6, v7, v31, v28, v0.h[3], v0.h[2], .8h // -> t40a - rshrn_sz v25, v2, v3, #12, .8h // t56a - rshrn_sz v27, v4, v5, #12, .8h // t39a + sqrshrn_sz v25, v2, v3, #12, .8h // t56a + sqrshrn_sz v27, v4, v5, #12, .8h // t39a neg v6.4s, v6.4s // t40a neg v7.4s, v7.4s // t40a smull_smlsl v2, v3, v31, v28, v0.h[2], v0.h[3], .8h // -> t55a - rshrn_sz v31, v6, v7, #12, .8h // t40a - rshrn_sz v28, v2, v3, #12, .8h // t55a + sqrshrn_sz v31, v6, v7, #12, .8h // t40a + sqrshrn_sz v28, v2, v3, #12, .8h // t55a sqadd v16.8h, v24.8h, v29.8h // t32a sqsub v19.8h, v24.8h, v29.8h // t47a @@ -2673,11 +2673,11 @@ function inv_dct64_step2_neon smull_smlsl v2, v3, v21, v18, v0.h[0], v0.h[0], .8h // -> t40a smull_smlal v4, v5, v21, v18, v0.h[0], v0.h[0], .8h // -> t55a smull_smlsl v6, v7, v20, v19, v0.h[0], v0.h[0], .8h // -> t47 - rshrn_sz v18, v2, v3, #12, .8h // t40a - rshrn_sz v21, v4, v5, #12, .8h // t55a + sqrshrn_sz v18, v2, v3, #12, .8h // t40a + sqrshrn_sz v21, v4, v5, #12, .8h // t55a smull_smlal v2, v3, v20, v19, v0.h[0], v0.h[0], .8h // -> t48 - rshrn_sz v19, v6, v7, #12, .8h // t47 - rshrn_sz v20, v2, v3, #12, .8h // t48 + sqrshrn_sz v19, v6, v7, #12, .8h // t47 + sqrshrn_sz v20, v2, v3, #12, .8h // t48 str q16, [x6, #2*8*0] // t32a str q17, [x9, #2*8*0] // t39 |