ref: eeca6f25dc8548941921ef9c332fa13af835ad62
parent: 70b66ff13fc7f082e43777a8c9fa4c0a2ace685e
author: Henrik Gramner <gramner@twoorioles.com>
date: Wed Aug 28 11:30:46 EDT 2019
x86: Fix inverse ADST transform overflows
--- a/src/x86/itx.asm
+++ b/src/x86/itx.asm
@@ -738,8 +738,8 @@
vpblendd m0, m0, m4, 0xcc ; out0 -out1
shufps m4, m2, m1, q1032 ; t3 t7
vpblendd m1, m2, m1, 0xcc ; t2 t6
- psubw m2, m1, m4 ; t2-t3 t6-t7
- paddw m1, m4 ; t2+t3 t6+t7
+ psubsw m2, m1, m4 ; t2-t3 t6-t7
+ paddsw m1, m4 ; t2+t3 t6+t7
pmulhrsw m2, m5 ; out4 -out5
pshufd m1, m1, q1032
pmulhrsw m1, m5 ; out2 -out3
@@ -1184,8 +1184,8 @@
psubsw m4, m2 ; t6 t7 t14a t15a
shufps m2, m1, m4, q1032 ; t2a t6 t10 t14a
vpblendd m4, m4, m1, 0x33 ; t3a t7 t11 t15a
- paddw m1, m2, m4
- psubw m2, m4
+ paddsw m1, m2, m4
+ psubsw m2, m4
pmulhrsw m1, m5 ; -out7 out4 out6 -out5
pmulhrsw m2, m5 ; out8 -out11 -out9 out10
ret
@@ -1955,10 +1955,10 @@
shufps m5, m5, m7, q1032 ; t14a t6
shufps m7, m2, m0, q1032 ; out14 -out15
vpblendd m0, m0, m2, 0x33 ; -out1 out0
- paddw m2, m5, m4 ; -out5 out4
- psubw m5, m4 ; out10 -out11
- psubw m4, m6, m3 ; out8 -out9
- paddw m3, m6 ; -out7 out6
+ paddsw m2, m5, m4 ; -out5 out4
+ psubsw m5, m4 ; out10 -out11
+ psubsw m4, m6, m3 ; out8 -out9
+ paddsw m3, m6 ; -out7 out6
shufps m6, m8, m1, q1032 ; out12 -out13
vpblendd m1, m1, m8, 0x33 ; -out3 out2
REPX {pmulhrsw x, m12}, m2, m3, m4, m5
@@ -2598,10 +2598,10 @@
paddsw m0, m2 ; out0
psubsw m2, m1, m4 ; t6
paddsw m1, m4 ; -out1
- psubw m4, m5, m3
- paddw m3, m5
- psubw m5, m2, m9
- paddw m2, m9
+ psubsw m4, m5, m3
+ paddsw m3, m5
+ psubsw m5, m2, m9
+ paddsw m2, m9
pmulhrsw m2, m8 ; out2
pmulhrsw m3, m8 ; -out3
pmulhrsw m4, m8 ; out4
@@ -3081,14 +3081,14 @@
paddsw m0, m12 ; out0
paddsw m12, m8, m5 ; out12
psubsw m8, m5 ; t7
- paddw m5, m10, m11 ; -out5
- psubw m10, m11 ; out10
- psubw m11, m4, m8 ; -out11
- paddw m4, m8 ; out4
- psubw m8, m7, m9 ; out8
- paddw m7, m9 ; -out7
- psubw m9, m1, m6 ; -out9
- paddw m6, m1 ; out6
+ paddsw m5, m10, m11 ; -out5
+ psubsw m10, m11 ; out10
+ psubsw m11, m4, m8 ; -out11
+ paddsw m4, m8 ; out4
+ psubsw m8, m7, m9 ; out8
+ paddsw m7, m9 ; -out7
+ psubsw m9, m1, m6 ; -out9
+ paddsw m6, m1 ; out6
vpbroadcastd m1, [o(pw_2896x8)]
REPX {pmulhrsw x, m1}, m4, m5, m6, m7, m8, m9, m10, m11
ret
--- a/src/x86/itx_ssse3.asm
+++ b/src/x86/itx_ssse3.asm
@@ -670,8 +670,8 @@
shufps m4, m1, m5, q1032 ;low: t3 high: t7
shufps m1, m5, q3210 ;low: t2 high: t6
mova m5, [o(pw_2896x8)]
- psubw m2, m1, m4 ;low: t2-t3 high: t6-t7
- paddw m1, m4 ;low: t2+t3 high: t6+t7
+ psubsw m2, m1, m4 ;low: t2-t3 high: t6-t7
+ paddsw m1, m4 ;low: t2+t3 high: t6+t7
pmulhrsw m2, m5 ;low: out4 high: -out5
shufps m1, m1, q1032
pmulhrsw m1, m5 ;low: out2 high: -out3
@@ -1491,10 +1491,10 @@
psubsw m5, m6 ;t6
paddsw m6, m2, m7 ;out6
psubsw m2, m7 ;t7
- paddw m7, m4, m3 ;t2 + t3
- psubw m4, m3 ;t2 - t3
- paddw m3, m5, m2 ;t6 + t7
- psubw m5, m2 ;t6 - t7
+ paddsw m7, m4, m3 ;t2 + t3
+ psubsw m4, m3 ;t2 - t3
+ paddsw m3, m5, m2 ;t6 + t7
+ psubsw m5, m2 ;t6 - t7
mova m2, [o(pw_2896x8)]
pmulhrsw m4, m2 ;out4
pmulhrsw m5, m2 ;-out5
@@ -2254,8 +2254,8 @@
paddsw m3, m2 ;low:out2 high:-out13
punpckhqdq m2, m4, m1 ;low:t11 high:t15a
punpcklqdq m4, m1 ;low:t10 high:t14a
- psubw m1, m4, m2
- paddw m2, m4
+ psubsw m1, m4, m2
+ paddsw m2, m4
mova [coeffq+16*6], m0
mova [coeffq+16*7], m3
mova m0, [coeffq+16*4]
@@ -2277,8 +2277,8 @@
mova m7, [o(pw_2896x8)]
punpckhqdq m6, m4, m5 ;low:t3a high:t7
punpcklqdq m4, m5 ;low:t2a high:t6
- psubw m5, m4, m6
- paddw m4, m6
+ psubsw m5, m4, m6
+ paddsw m4, m6
pmulhrsw m1, m7 ;low:-out9 high:out10
pmulhrsw m2, m7 ;low:out6 high:-out5
pmulhrsw m5, m7 ;low:out8 high:-out11
@@ -2999,8 +2999,8 @@
psubsw m3, m0, m4 ;t7
paddsw m0, m4 ;out12
mova m7, [o(pw_2896x8)]
- psubw m4, m2, m3
- paddw m2, m3
+ psubsw m4, m2, m3
+ paddsw m2, m3
mova m3, [rsp+gprsize*2+16*7] ;t3
pmulhrsw m4, m7 ;-out11
pmulhrsw m2, m7 ;out4
@@ -3007,8 +3007,8 @@
mova [rsp+gprsize*2+16*7], m2 ;out4
psubsw m2, m5, m3 ;t3a
paddsw m5, m3 ;-out15
- psubw m3, m1, m2
- paddw m1, m2
+ psubsw m3, m1, m2
+ paddsw m1, m2
mova m2, [rsp+gprsize*2+32*5] ;t15
pmulhrsw m3, m7 ;out8
pmulhrsw m1, m7 ;-out7
@@ -3044,8 +3044,8 @@
paddsw m2, m6 ;-out1
paddsw m6, m4, m1 ;out14
psubsw m4, m1 ;t11
- psubw m1, m3, m4
- paddw m3, m4
+ psubsw m1, m3, m4
+ paddsw m3, m4
pmulhrsw m1, m7 ;-out9
pmulhrsw m3, m7 ;out6
mova [rsp+gprsize*2+16*4], m2 ;-out1
@@ -3056,8 +3056,8 @@
paddsw m0, m4 ;out2
psubsw m4, m5, m2 ;t15a
paddsw m5, m2 ;-out13
- psubw m2, m3, m4
- paddw m3, m4
+ psubsw m2, m3, m4
+ paddsw m3, m4
mova [rsp+gprsize*2+16*5], m0 ;out2
pmulhrsw m3, m7 ;-out5
pmulhrsw m2, m7 ;out10