yadif.asm: Fix improper usage of LOAD macro
authorVivia Nikolaidou <vivia@ahiru.eu>
Mon, 28 Feb 2022 22:12:56 +0000 (00:12 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 1 Mar 2022 07:22:10 +0000 (07:22 +0000)
LOAD macro relies in m7 being zero for interleaving purposes. Using LOAD
on the m7 register makes it interleave with its new content instead of
with 0.

The effect of this bug was bobbing on some static lines that appeared
over fast-moving content.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1816>

subprojects/gst-plugins-good/gst/deinterlace/x86/yadif.asm

index f957d0a..df2bb89 100644 (file)
@@ -160,6 +160,8 @@ SECTION .text
     psraw        m3, 1
     ; rsp + 0 = d
     mova   [rsp+ 0], m3
+    ; rsp + 16 = bzeroq
+    mova   [rsp+16], m1
     ; m2 = m1 - mp
     psubw        m2, m4
     ; m2 = temporal_diff0 (m4 is temporary)
@@ -195,8 +197,8 @@ SECTION .text
     psrlw        m3, 1
     ; m2 = diff (for real)
     pmaxsw       m2, m3
-    ; rsp + 16 = diff
-    mova   [rsp+16], m2
+    ; rsp + 32 = diff
+    mova   [rsp+32], m2
 
     ; m1 = e + c
     paddw        m1, m0
@@ -251,7 +253,7 @@ SECTION .text
     ; now m0 = spatial_score, m1 = spatial_pred
 
     ; m6 = diff
-    mova         m6, [rsp+16]
+    mova         m6, [rsp+32]
 %endmacro
 
 %macro FILTER_TAIL 0
@@ -311,7 +313,7 @@ SECTION .text
     ; m5 = d
     mova         m5, [rsp]
     ; m7 = e
-    LOAD         m7, [bzeroq]
+    mova         m7, [rsp+16]
     ; m2 = b - c
     psubw        m2, m4
     ; m3 = f - e