]> granicus.if.org Git - libx264/commitdiff
x86inc: Fix edge case in forced VEX-encoding
authorHenrik Gramner <henrik@gramner.com>
Sun, 20 Feb 2022 13:21:34 +0000 (14:21 +0100)
committerHenrik Gramner <henrik@gramner.com>
Mon, 21 Feb 2022 02:42:54 +0000 (03:42 +0100)
Correctly handle emulation of 4-operand instructions (e.g. 'shufps')
where src1 is a memory operand.

common/x86/x86inc.asm

index 6cc734052455c5dc7b0ed514ba57e2bebd54f547..0750b0a4794e6c44c0c1a81dc25508e324153f8c 100644 (file)
@@ -1342,7 +1342,20 @@ INIT_XMM
             %1 %6, __src2
         %endif
     %elif %0 >= 9
-        __instr %6, %7, %8, %9
+        %if avx_enabled && __sizeofreg >= 16 && %4 == 1
+            %ifnnum regnumof%7
+                %if %3
+                    vmovaps %6, %7
+                %else
+                    vmovdqa %6, %7
+                %endif
+                __instr %6, %6, %8, %9
+            %else
+                __instr %6, %7, %8, %9
+            %endif
+        %else
+            __instr %6, %7, %8, %9
+        %endif
     %elif %0 == 8
         %if avx_enabled && __sizeofreg >= 16 && %4 == 0
             %xdefine __src1 %7
@@ -1379,7 +1392,7 @@ INIT_XMM
                 %else
                     vmovdqa %6, %7
                 %endif
-                __instr %6, %8
+                __instr %6, %6, %8
             %else
                 __instr %6, __src1, __src2
             %endif