x86: Check VEX/EVEX encoding before checking vector operands
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Oct 2022 16:18:19 +0000 (09:18 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Oct 2022 16:28:23 +0000 (09:28 -0700)
Since

commit 837e225ba1992f9745e5bbbd5e8443243a7f475f
Author: Jan Beulich <jbeulich@suse.com>
Date:   Thu Oct 20 10:01:12 2022 +0200

    x86: re-work AVX-VNNI support

moved AVX-VNNI after AVX512-VNNI, vector Disp8 is applied even when VEX
encoding is selected.  Check VEX/EVEX encoding before checking vector
operands to avoid vector Disp8 with VEX encoding.

PR gas/29708
* config/tc-i386.c (match_template): Check VEX/EVEX encoding
before checking vector operands.
* testsuite/gas/i386/avx-vnni.d: Updated.
* testsuite/gas/i386/x86-64-avx-vnni.d: Likewise.
* testsuite/gas/i386/avx-vnni.s: Add a Disp32 test.
* testsuite/gas/i386/x86-64-avx-vnni.s: Likewise.

gas/config/tc-i386.c
gas/testsuite/gas/i386/avx-vnni.d
gas/testsuite/gas/i386/avx-vnni.s
gas/testsuite/gas/i386/x86-64-avx-vnni.d
gas/testsuite/gas/i386/x86-64-avx-vnni.s

index 526802ed308609acaa52b10c04931cf854c932c7..02905c170219ff91e34aacca83dc08090693d158 100644 (file)
@@ -6821,15 +6821,15 @@ match_template (char mnem_suffix)
             slip through to break.  */
        }
 
-      /* Check if vector operands are valid.  */
-      if (check_VecOperands (t))
+      /* Check if VEX/EVEX encoding requirements can be satisfied.  */
+      if (VEX_check_encoding (t))
        {
          specific_error = progress (i.error);
          continue;
        }
 
-      /* Check if VEX/EVEX encoding requirements can be satisfied.  */
-      if (VEX_check_encoding (t))
+      /* Check if vector operands are valid.  */
+      if (check_VecOperands (t))
        {
          specific_error = progress (i.error);
          continue;
index 47e3118b1cebbe4e4f8625df6bae8344ef9e22c4..4dc353e89fd1a9385b92a776103a606b5ec3e8c4 100644 (file)
@@ -39,4 +39,5 @@ Disassembly of section .text:
  +[a-f0-9]+:   c4 e2 7d 50 c0          \{vex\} vpdpbusd %ymm0,%ymm0,%ymm0
  +[a-f0-9]+:   c4 e2 79 50 c0          \{vex\} vpdpbusd %xmm0,%xmm0,%xmm0
  +[a-f0-9]+:   62 f2 5d 08 50 d2       vpdpbusd %xmm2,%xmm4,%xmm2
+ +[a-f0-9]+:   c4 e2 59 50 91 f0 07 00 00      \{vex\} vpdpbusd 0x7f0\(%ecx\),%xmm4,%xmm2
 #pass
index e2b793b24a6ef1bdfcd7fc846e4102382f41a7c2..6260330cca466a28e9dd798a3e1a4b4498648c74 100644 (file)
@@ -37,3 +37,4 @@ _start:
        .arch default
        .arch .avx_vnni
         vpdpbusd       %xmm2, %xmm4, %xmm2
+       {vex3} vpdpbusd 2032(%ecx), %xmm4, %xmm2
index 6b3acab5d549fdd92166e1a1e5bfe5dd617eecc2..1fa08a5c64a6c04d0373e7e03b3eb7cb4c0445ea 100644 (file)
@@ -36,4 +36,5 @@ Disassembly of section .text:
  +[a-f0-9]+:   c4 e2 59 53 11          \{vex\} vpdpwssds \(%rcx\),%xmm4,%xmm2
  +[a-f0-9]+:   62 b2 5d 08 53 d6       vpdpwssds %xmm22,%xmm4,%xmm2
  +[a-f0-9]+:   62 d2 5d 08 50 d4       vpdpbusd %xmm12,%xmm4,%xmm2
+ +[a-f0-9]+:   c4 e2 59 50 91 f0 07 00 00      \{vex\} vpdpbusd 0x7f0\(%rcx\),%xmm4,%xmm2
 #pass
index 95b6dc2ef331b6af47ca6e8042cca571e54d511f..9c57e6f6a9705c43e8bcb5427d89b502611d797b 100644 (file)
@@ -19,3 +19,4 @@ _start:
 
        .arch .avx_vnni
        vpdpbusd        %xmm12, %xmm4, %xmm2
+       {vex3} vpdpbusd 2032(%rcx), %xmm4, %xmm2