shithub: dav1d

Download patch

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