]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: improve a few diagnostics
authorJan Beulich <jbeulich@suse.com>
Fri, 17 Nov 2023 10:24:12 +0000 (11:24 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 17 Nov 2023 10:24:12 +0000 (11:24 +0100)
PR gas/31043
"unsupported instruction ..." can mean about anything, and can also be
mistaken to mean something that isn't meant. Replace most of its uses by
more specific diagnostics,

While there also take the opportunity and purge the no longer used
invalid_register_operand enumerator.

gas/config/tc-i386.c
gas/testsuite/gas/i386/avx10-vsz.l
gas/testsuite/gas/i386/avx512vl-1.l
gas/testsuite/gas/i386/inval-avx512vl.l
gas/testsuite/gas/i386/noavx512-2.l
gas/testsuite/gas/i386/x86-64-avx-ifma-inval.l
gas/testsuite/gas/i386/x86-64-avx-vnni-inval.l
gas/testsuite/gas/i386/x86-64-avx512vl-1.l
gas/testsuite/gas/i386/x86-64-inval-avx512vl.l

index 1692dfcdf54f28976cea65fe72f93b185f790739..2651cd2d25a0b8903d8d5c3718f3e714696eb558 100644 (file)
@@ -242,6 +242,8 @@ enum i386_error
     unsupported,
     unsupported_on_arch,
     unsupported_64bit,
+    no_vex_encoding,
+    no_evex_encoding,
     invalid_sib_address,
     invalid_vsib_address,
     invalid_vector_register_set,
@@ -254,7 +256,7 @@ enum i386_error
     mask_not_on_destination,
     no_default_mask,
     unsupported_rc_sae,
-    invalid_register_operand,
+    unsupported_vector_size,
     internal_error,
   };
 
@@ -5304,6 +5306,12 @@ md_assemble (char *line)
                        pass1_mnem ? pass1_mnem : insn_name (current_templates->start));
            }
          return;
+       case no_vex_encoding:
+         err_msg = _("no VEX/XOP encoding");
+         break;
+       case no_evex_encoding:
+         err_msg = _("no EVEX encoding");
+         break;
        case invalid_sib_address:
          err_msg = _("invalid SIB address");
          break;
@@ -5340,9 +5348,10 @@ md_assemble (char *line)
        case unsupported_rc_sae:
          err_msg = _("unsupported static rounding/sae");
          break;
-       case invalid_register_operand:
-         err_msg = _("invalid register operand");
-         break;
+       case unsupported_vector_size:
+         as_bad (_("vector size above %u required for `%s'"), 128u << vector_size,
+                 pass1_mnem ? pass1_mnem : insn_name (current_templates->start));
+         return;
        case internal_error:
          err_msg = _("internal error");
          break;
@@ -6567,7 +6576,7 @@ check_VecOperands (const insn_template *t)
              && (i.types[op].bitfield.ymmword
                  || i.types[op].bitfield.xmmword))
            {
-             i.error = unsupported;
+             i.error = operand_size_mismatch;
              return 1;
            }
        }
@@ -6583,7 +6592,7 @@ check_VecOperands (const insn_template *t)
          if (t->operand_types[op].bitfield.xmmword
              && i.types[op].bitfield.ymmword)
            {
-             i.error = unsupported;
+             i.error = operand_size_mismatch;
              return 1;
            }
        }
@@ -6963,7 +6972,7 @@ VEX_check_encoding (const insn_template *t)
              || t->opcode_modifier.vex == VEX256
              || t->opcode_modifier.vsz >= VSZ256)))
     {
-      i.error = unsupported;
+      i.error = unsupported_vector_size;
       return 1;
     }
 
@@ -6973,7 +6982,7 @@ VEX_check_encoding (const insn_template *t)
       /* This instruction must be encoded with EVEX prefix.  */
       if (!t->opcode_modifier.evex)
        {
-         i.error = unsupported;
+         i.error = no_evex_encoding;
          return 1;
        }
       return 0;
@@ -6984,7 +6993,7 @@ VEX_check_encoding (const insn_template *t)
       /* This instruction template doesn't have VEX prefix.  */
       if (i.vec_encoding != vex_encoding_default)
        {
-         i.error = unsupported;
+         i.error = no_vex_encoding;
          return 1;
        }
       return 0;
index 8cbc2b28a086fb7791247022525852fe57e769b1..d10ff55ee9d8038fe493628719c3a317ce223bf3 100644 (file)
@@ -4,71 +4,71 @@
 .*:47: Error: ambiguous operand size for `vcvtpd2ps'
 .*:48: Error: ambiguous operand size for `vfpclassps'
 .*:7: Warning: \.avx10\.1/256
-.*:12: Error: unsupported instruction `kunpckdq'
-.*:16: Error: unsupported instruction `kaddq'
-.*:17: Error: unsupported instruction `kandq'
-.*:18: Error: unsupported instruction `kandnq'
-.*:19: Error: unsupported instruction `kmovq'
-.*:20: Error: unsupported instruction `kmovq'
-.*:21: Error: unsupported instruction `kmovq'
-.*:22: Error: unsupported instruction `knotq'
-.*:23: Error: unsupported instruction `korq'
-.*:24: Error: unsupported instruction `kortestq'
-.*:25: Error: unsupported instruction `kshiftlq'
-.*:26: Error: unsupported instruction `kshiftrq'
-.*:27: Error: unsupported instruction `ktestq'
-.*:28: Error: unsupported instruction `kxorq'
-.*:29: Error: unsupported instruction `kxnorq'
-.*:32: Error: unsupported instruction `vcvtpd2phz'
+.*:12: Error: vector size .* `kunpckdq'
+.*:16: Error: vector size .* `kaddq'
+.*:17: Error: vector size .* `kandq'
+.*:18: Error: vector size .* `kandnq'
+.*:19: Error: vector size .* `kmovq'
+.*:20: Error: vector size .* `kmovq'
+.*:21: Error: vector size .* `kmovq'
+.*:22: Error: vector size .* `knotq'
+.*:23: Error: vector size .* `korq'
+.*:24: Error: vector size .* `kortestq'
+.*:25: Error: vector size .* `kshiftlq'
+.*:26: Error: vector size .* `kshiftrq'
+.*:27: Error: vector size .* `ktestq'
+.*:28: Error: vector size .* `kxorq'
+.*:29: Error: vector size .* `kxnorq'
+.*:32: Error: vector size .* `vcvtpd2phz'
 .*:34: Error: unsupported broadcast for `vcvtpd2ph'
-.*:37: Error: unsupported instruction `vcvtpd2ps'
-.*:43: Error: unsupported instruction `vfpclasspsz'
+.*:37: Error: vector size .* for `vcvtpd2ps'
+.*:43: Error: vector size .* `vfpclasspsz'
 .*:46: Error: ambiguous operand size for `vcvtpd2ph'
 .*:47: Error: ambiguous operand size for `vcvtpd2ps'
 .*:48: Error: ambiguous operand size for `vfpclassps'
 .*:7: Warning: \.avx10\.1/128
-.*:10: Error: unsupported instruction `kmovd'
-.*:11: Error: unsupported instruction `kmovd'
-.*:12: Error: unsupported instruction `kunpckdq'
-.*:13: Error: unsupported instruction `kunpckwd'
-.*:16: Error: unsupported instruction `kaddd'
-.*:17: Error: unsupported instruction `kandd'
-.*:18: Error: unsupported instruction `kandnd'
-.*:19: Error: unsupported instruction `kmovd'
-.*:20: Error: unsupported instruction `kmovd'
-.*:21: Error: unsupported instruction `kmovd'
-.*:22: Error: unsupported instruction `knotd'
-.*:23: Error: unsupported instruction `kord'
-.*:24: Error: unsupported instruction `kortestd'
-.*:25: Error: unsupported instruction `kshiftld'
-.*:26: Error: unsupported instruction `kshiftrd'
-.*:27: Error: unsupported instruction `ktestd'
-.*:28: Error: unsupported instruction `kxord'
-.*:29: Error: unsupported instruction `kxnord'
-.*:16: Error: unsupported instruction `kaddq'
-.*:17: Error: unsupported instruction `kandq'
-.*:18: Error: unsupported instruction `kandnq'
-.*:19: Error: unsupported instruction `kmovq'
-.*:20: Error: unsupported instruction `kmovq'
-.*:21: Error: unsupported instruction `kmovq'
-.*:22: Error: unsupported instruction `knotq'
-.*:23: Error: unsupported instruction `korq'
-.*:24: Error: unsupported instruction `kortestq'
-.*:25: Error: unsupported instruction `kshiftlq'
-.*:26: Error: unsupported instruction `kshiftrq'
-.*:27: Error: unsupported instruction `ktestq'
-.*:28: Error: unsupported instruction `kxorq'
-.*:29: Error: unsupported instruction `kxnorq'
-.*:32: Error: unsupported instruction `vcvtpd2phz'
-.*:33: Error: unsupported instruction `vcvtpd2phy'
+.*:10: Error: vector size .* `kmovd'
+.*:11: Error: vector size .* `kmovd'
+.*:12: Error: vector size .* `kunpckdq'
+.*:13: Error: vector size .* `kunpckwd'
+.*:16: Error: vector size .* `kaddd'
+.*:17: Error: vector size .* `kandd'
+.*:18: Error: vector size .* `kandnd'
+.*:19: Error: vector size .* `kmovd'
+.*:20: Error: vector size .* `kmovd'
+.*:21: Error: vector size .* `kmovd'
+.*:22: Error: vector size .* `knotd'
+.*:23: Error: vector size .* `kord'
+.*:24: Error: vector size .* `kortestd'
+.*:25: Error: vector size .* `kshiftld'
+.*:26: Error: vector size .* `kshiftrd'
+.*:27: Error: vector size .* `ktestd'
+.*:28: Error: vector size .* `kxord'
+.*:29: Error: vector size .* `kxnord'
+.*:16: Error: vector size .* `kaddq'
+.*:17: Error: vector size .* `kandq'
+.*:18: Error: vector size .* `kandnq'
+.*:19: Error: vector size .* `kmovq'
+.*:20: Error: vector size .* `kmovq'
+.*:21: Error: vector size .* `kmovq'
+.*:22: Error: vector size .* `knotq'
+.*:23: Error: vector size .* `korq'
+.*:24: Error: vector size .* `kortestq'
+.*:25: Error: vector size .* `kshiftlq'
+.*:26: Error: vector size .* `kshiftrq'
+.*:27: Error: vector size .* `ktestq'
+.*:28: Error: vector size .* `kxorq'
+.*:29: Error: vector size .* `kxnorq'
+.*:32: Error: vector size .* `vcvtpd2phz'
+.*:33: Error: vector size .* `vcvtpd2phy'
 .*:34: Error: unsupported broadcast for `vcvtpd2ph'
 .*:35: Error: unsupported broadcast for `vcvtpd2ph'
 .*:37: Error: .*
-.*:38: Error: unsupported instruction `vcvtpd2psy'
-.*:39: Error: unsupported instruction `vcvtpd2psy'
+.*:38: Error: vector size .* `vcvtpd2psy'
+.*:39: Error: vector size .* `vcvtpd2psy'
 .*:40: Error: unsupported broadcast for `vcvtpd2ps'
-.*:42: Error: unsupported instruction `vfpclasspsy'
-.*:43: Error: unsupported instruction `vfpclasspsz'
+.*:42: Error: vector size .* `vfpclasspsy'
+.*:43: Error: vector size .* `vfpclasspsz'
 .*:7: Warning: \.avx10\.1
 .*:46: Error: ambiguous operand size for `vcvtpd2ph'
 .*:47: Error: ambiguous operand size for `vcvtpd2ps'
index 183c21dfc943af5147d3a17b95cae96fa0ee825a..e247a103ce6efbd6641499990f2a84f21cbca0c4 100644 (file)
@@ -3,8 +3,8 @@
 .*:8: Error: .*corei7\.avx.*
 .*:9: Error: .*corei7\.avx.*
 .*:10: Error: .*corei7\.avx.*
-.*:15: Error: .*unsupported.*
-.*:16: Error: .*unsupported.*
+.*:15: Error: .*operand size mismatch.*
+.*:16: Error: .*operand size mismatch.*
 GAS LISTING .*
 #...
 [      ]*1[    ]+\.text
index b0c039933cb4363718c1eb290c9bf01654ecdaf2..cdd1f19d386950b82b832395ab2211d5d495ec04 100644 (file)
@@ -1,6 +1,6 @@
 .*: Assembler messages:
-.*:5: Error: .*unsupported instruction.*
-.*:6: Error: .*unsupported instruction.*
+.*:5: Error: .*operand size mismatch.*
+.*:6: Error: .*operand size mismatch.*
 GAS LISTING .*
 
 
index 3f9b21556a80a6cc824d9bb38dbd7e3c1e8ab833..25d18d0793b4b52e1f412ed9e89e415753e70af2 100644 (file)
@@ -5,7 +5,7 @@
 .*:17: Error: .*bad register name `%zmm.*
 .*:18: Error: .*bad register name `%zmm.*
 .*:21: Error: .*bad register name `%zmm.*
-.*:24: Error: .*unsupported instruction.*
+.*:24: Error: .*vector size.*
 .*:25: Error: .*bad register name `%zmm.*
 .*:8: Error: .*bad register name `%zmm.*
 .*:10: Error: .*bad register name `%ymm.*
 .*:27: Error: .*bad register name `%ymm.*
 .*:9: Error: .*unsupported masking.*
 .*:10: Error: .*unsupported masking.*
-.*:12: Error: .*unsupported instruction.*
-.*:13: Error: .*unsupported instruction.*
-.*:15: Error: .*unsupported instruction.*
-.*:16: Error: .*unsupported instruction.*
+.*:12: Error: .*operand size mismatch.*
+.*:13: Error: .*operand size mismatch.*
+.*:15: Error: .*operand size mismatch.*
+.*:16: Error: .*operand size mismatch.*
 .*:19: Error: .*unsupported masking.*
 .*:20: Error: .*unsupported masking.*
-.*:22: Error: .*unsupported instruction.*
-.*:23: Error: .*unsupported instruction.*
-.*:26: Error: .*unsupported instruction.*
-.*:27: Error: .*unsupported instruction.*
+.*:22: Error: .*operand size mismatch.*
+.*:23: Error: .*operand size mismatch.*
+.*:26: Error: .*operand size mismatch.*
+.*:27: Error: .*operand size mismatch.*
 #...
 [      ]*[0-9]+[       ]+\# Test \.arch \.noavx512vl
 [      ]*[0-9]+[       ]+\.text
index fad43f6768c4591689839d43b14d8a8f82c002e3..33006957b2ecaf495d9fd17860fb35835aa41b65 100644 (file)
@@ -1,4 +1,4 @@
 .* Assembler messages:
 .*:6: Error: unsupported .* `vpmadd52huq'
-.*:7: Error: unsupported .* `vpmadd52huq'
+.*:7: Error: no EVEX .* `vpmadd52huq'
 .*:8: Error: operand .* `vpmadd52huq'
index 61808668a8deacd6c9291b0224d80e4b42dfa1d4..ca0f212f11dad8ce7656ada3236653bdc39f914d 100644 (file)
@@ -1,4 +1,4 @@
 .* Assembler messages:
 .*:6: Error: unsupported .* `vpdpbusds'
-.*:7: Error: unsupported .* `vpdpbusds'
+.*:7: Error: no EVEX .* `vpdpbusds'
 .*:8: Error: operand .* `vpdpbusds'
index c5982e74312b1751fa761b7bf075c4e918b6470a..3dfab9628648ce3c30fbcd2e3c4d95116c944a8e 100644 (file)
@@ -3,8 +3,8 @@
 .*:8: Error: .*corei7\.avx.*
 .*:9: Error: .*corei7\.avx.*
 .*:10: Error: .*corei7\.avx.*
-.*:15: Error: .*unsupported.*
-.*:16: Error: .*unsupported.*
+.*:15: Error: .*operand size mismatch.*
+.*:16: Error: .*operand size mismatch.*
 GAS LISTING .*
 #...
 [      ]*1[    ]+\.text
index 7b661f378435ac31cad6a4ded3d8c512de3dbb7f..a0db1ccaa67db36e2adc815d2a7b047756eb5951 100644 (file)
@@ -1,6 +1,6 @@
 .*: Assembler messages:
-.*:5: Error: .*unsupported instruction.*
-.*:6: Error: .*unsupported instruction.*
+.*:5: Error: .*operand size mismatch.*
+.*:6: Error: .*operand size mismatch.*
 GAS LISTING .*