]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add check for 8-bit old registers in EVEX format
authorCui, Lili <lili.cui@intel.com>
Wed, 22 May 2024 01:33:10 +0000 (09:33 +0800)
committerCui, Lili <lili.cui@intel.com>
Wed, 22 May 2024 02:16:14 +0000 (10:16 +0800)
Since APX supports EVEX from legacy instructions, we need to check
the 8-bit old registers in EVEX format. And add test cases for it.

gas/ChangeLog:

        * config/tc-i386.c (md_assemble): Add invalid check for old byte
        registers in EVEX format.
        * testsuite/gas/i386/x86-64-apx-inval.l: Add new test.
        * testsuite/gas/i386/x86-64-apx-inval.s: Ditto.

gas/config/tc-i386.c
gas/testsuite/gas/i386/x86-64-apx-inval.l
gas/testsuite/gas/i386/x86-64-apx-inval.s

index 12af7ceec08120f7ace3d01b961395ef99a2d39f..dc6d8bb939821aa36c6041d4a574cd1707bc4adb 100644 (file)
@@ -4314,7 +4314,7 @@ static void establish_rex (void)
   /* For REX/REX2/EVEX prefix instructions, we need to convert old registers
      (AL, CL, DL and BL) to new ones (AXL, CXL, DXL and BXL) and reject AH,
      CH, DH and BH.  */
-  if (i.rex || i.rex2)
+  if (i.rex || i.rex2 || i.tm.opcode_modifier.evex)
     {
       for (unsigned int x = first; x <= last; x++)
        {
@@ -4326,8 +4326,9 @@ static void establish_rex (void)
              /* In case it is "hi" register, give up.  */
              if (i.op[x].regs->reg_num > 3)
                as_bad (_("can't encode register '%s%s' in an "
-                         "instruction requiring REX/REX2 prefix"),
-                       register_prefix, i.op[x].regs->reg_name);
+                         "instruction requiring %s prefix"),
+                       register_prefix, i.op[x].regs->reg_name,
+                       i.tm.opcode_modifier.evex ? "EVEX" : "REX/REX2");
 
              /* Otherwise it is equivalent to the extended register.
                 Since the encoding doesn't change this is merely
index 7a870b27b72242586479be26505fcda9efb17d1d..a15f6b87cac30de1979455daa55e1e0ab2b90705 100644 (file)
@@ -12,3 +12,6 @@
 .*:13: Error: \{nf\} unsupported for `mulx'
 .*:14: Error: \{nf\} cannot be combined with \{vex\}/\{vex3\}
 .*:15: Error: \{nf\} cannot be combined with \{vex\}/\{vex3\}
+.*:16: Error: can't encode register '%ah' in an instruction requiring EVEX prefix
+.*:17: Error: can't encode register '%ah' in an instruction requiring EVEX prefix
+#pass
index 0487b885ec8fa52370b066b8932e866802f79f1f..3d69deabe4d99f417b2b88cbd01c87e4731aeece 100644 (file)
@@ -13,3 +13,5 @@
        {nf} mulx %r15,%r15,%r11
        {nf} {vex} bextr %ecx, %edx, %r10d
        {vex} {nf} bextr %ecx, %edx, %r10d
+       {nf} add %dl,%ah
+       {evex} adc %dl,%ah