x86: improve a few diagnostics

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.
This commit is contained in:
Jan Beulich
2023-11-17 11:24:12 +01:00
parent 97f31cb469
commit 54294d7364
9 changed files with 93 additions and 84 deletions

View File

@@ -242,6 +242,8 @@ enum i386_error
unsupported, unsupported,
unsupported_on_arch, unsupported_on_arch,
unsupported_64bit, unsupported_64bit,
no_vex_encoding,
no_evex_encoding,
invalid_sib_address, invalid_sib_address,
invalid_vsib_address, invalid_vsib_address,
invalid_vector_register_set, invalid_vector_register_set,
@@ -254,7 +256,7 @@ enum i386_error
mask_not_on_destination, mask_not_on_destination,
no_default_mask, no_default_mask,
unsupported_rc_sae, unsupported_rc_sae,
invalid_register_operand, unsupported_vector_size,
internal_error, internal_error,
}; };
@@ -5304,6 +5306,12 @@ md_assemble (char *line)
pass1_mnem ? pass1_mnem : insn_name (current_templates->start)); pass1_mnem ? pass1_mnem : insn_name (current_templates->start));
} }
return; 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: case invalid_sib_address:
err_msg = _("invalid SIB address"); err_msg = _("invalid SIB address");
break; break;
@@ -5340,9 +5348,10 @@ md_assemble (char *line)
case unsupported_rc_sae: case unsupported_rc_sae:
err_msg = _("unsupported static rounding/sae"); err_msg = _("unsupported static rounding/sae");
break; break;
case invalid_register_operand: case unsupported_vector_size:
err_msg = _("invalid register operand"); as_bad (_("vector size above %u required for `%s'"), 128u << vector_size,
break; pass1_mnem ? pass1_mnem : insn_name (current_templates->start));
return;
case internal_error: case internal_error:
err_msg = _("internal error"); err_msg = _("internal error");
break; break;
@@ -6567,7 +6576,7 @@ check_VecOperands (const insn_template *t)
&& (i.types[op].bitfield.ymmword && (i.types[op].bitfield.ymmword
|| i.types[op].bitfield.xmmword)) || i.types[op].bitfield.xmmword))
{ {
i.error = unsupported; i.error = operand_size_mismatch;
return 1; return 1;
} }
} }
@@ -6583,7 +6592,7 @@ check_VecOperands (const insn_template *t)
if (t->operand_types[op].bitfield.xmmword if (t->operand_types[op].bitfield.xmmword
&& i.types[op].bitfield.ymmword) && i.types[op].bitfield.ymmword)
{ {
i.error = unsupported; i.error = operand_size_mismatch;
return 1; return 1;
} }
} }
@@ -6963,7 +6972,7 @@ VEX_check_encoding (const insn_template *t)
|| t->opcode_modifier.vex == VEX256 || t->opcode_modifier.vex == VEX256
|| t->opcode_modifier.vsz >= VSZ256))) || t->opcode_modifier.vsz >= VSZ256)))
{ {
i.error = unsupported; i.error = unsupported_vector_size;
return 1; return 1;
} }
@@ -6973,7 +6982,7 @@ VEX_check_encoding (const insn_template *t)
/* This instruction must be encoded with EVEX prefix. */ /* This instruction must be encoded with EVEX prefix. */
if (!t->opcode_modifier.evex) if (!t->opcode_modifier.evex)
{ {
i.error = unsupported; i.error = no_evex_encoding;
return 1; return 1;
} }
return 0; return 0;
@@ -6984,7 +6993,7 @@ VEX_check_encoding (const insn_template *t)
/* This instruction template doesn't have VEX prefix. */ /* This instruction template doesn't have VEX prefix. */
if (i.vec_encoding != vex_encoding_default) if (i.vec_encoding != vex_encoding_default)
{ {
i.error = unsupported; i.error = no_vex_encoding;
return 1; return 1;
} }
return 0; return 0;

View File

@@ -4,71 +4,71 @@
.*:47: Error: ambiguous operand size for `vcvtpd2ps' .*:47: Error: ambiguous operand size for `vcvtpd2ps'
.*:48: Error: ambiguous operand size for `vfpclassps' .*:48: Error: ambiguous operand size for `vfpclassps'
.*:7: Warning: \.avx10\.1/256 .*:7: Warning: \.avx10\.1/256
.*:12: Error: unsupported instruction `kunpckdq' .*:12: Error: vector size .* `kunpckdq'
.*:16: Error: unsupported instruction `kaddq' .*:16: Error: vector size .* `kaddq'
.*:17: Error: unsupported instruction `kandq' .*:17: Error: vector size .* `kandq'
.*:18: Error: unsupported instruction `kandnq' .*:18: Error: vector size .* `kandnq'
.*:19: Error: unsupported instruction `kmovq' .*:19: Error: vector size .* `kmovq'
.*:20: Error: unsupported instruction `kmovq' .*:20: Error: vector size .* `kmovq'
.*:21: Error: unsupported instruction `kmovq' .*:21: Error: vector size .* `kmovq'
.*:22: Error: unsupported instruction `knotq' .*:22: Error: vector size .* `knotq'
.*:23: Error: unsupported instruction `korq' .*:23: Error: vector size .* `korq'
.*:24: Error: unsupported instruction `kortestq' .*:24: Error: vector size .* `kortestq'
.*:25: Error: unsupported instruction `kshiftlq' .*:25: Error: vector size .* `kshiftlq'
.*:26: Error: unsupported instruction `kshiftrq' .*:26: Error: vector size .* `kshiftrq'
.*:27: Error: unsupported instruction `ktestq' .*:27: Error: vector size .* `ktestq'
.*:28: Error: unsupported instruction `kxorq' .*:28: Error: vector size .* `kxorq'
.*:29: Error: unsupported instruction `kxnorq' .*:29: Error: vector size .* `kxnorq'
.*:32: Error: unsupported instruction `vcvtpd2phz' .*:32: Error: vector size .* `vcvtpd2phz'
.*:34: Error: unsupported broadcast for `vcvtpd2ph' .*:34: Error: unsupported broadcast for `vcvtpd2ph'
.*:37: Error: unsupported instruction `vcvtpd2ps' .*:37: Error: vector size .* for `vcvtpd2ps'
.*:43: Error: unsupported instruction `vfpclasspsz' .*:43: Error: vector size .* `vfpclasspsz'
.*:46: Error: ambiguous operand size for `vcvtpd2ph' .*:46: Error: ambiguous operand size for `vcvtpd2ph'
.*:47: Error: ambiguous operand size for `vcvtpd2ps' .*:47: Error: ambiguous operand size for `vcvtpd2ps'
.*:48: Error: ambiguous operand size for `vfpclassps' .*:48: Error: ambiguous operand size for `vfpclassps'
.*:7: Warning: \.avx10\.1/128 .*:7: Warning: \.avx10\.1/128
.*:10: Error: unsupported instruction `kmovd' .*:10: Error: vector size .* `kmovd'
.*:11: Error: unsupported instruction `kmovd' .*:11: Error: vector size .* `kmovd'
.*:12: Error: unsupported instruction `kunpckdq' .*:12: Error: vector size .* `kunpckdq'
.*:13: Error: unsupported instruction `kunpckwd' .*:13: Error: vector size .* `kunpckwd'
.*:16: Error: unsupported instruction `kaddd' .*:16: Error: vector size .* `kaddd'
.*:17: Error: unsupported instruction `kandd' .*:17: Error: vector size .* `kandd'
.*:18: Error: unsupported instruction `kandnd' .*:18: Error: vector size .* `kandnd'
.*:19: Error: unsupported instruction `kmovd' .*:19: Error: vector size .* `kmovd'
.*:20: Error: unsupported instruction `kmovd' .*:20: Error: vector size .* `kmovd'
.*:21: Error: unsupported instruction `kmovd' .*:21: Error: vector size .* `kmovd'
.*:22: Error: unsupported instruction `knotd' .*:22: Error: vector size .* `knotd'
.*:23: Error: unsupported instruction `kord' .*:23: Error: vector size .* `kord'
.*:24: Error: unsupported instruction `kortestd' .*:24: Error: vector size .* `kortestd'
.*:25: Error: unsupported instruction `kshiftld' .*:25: Error: vector size .* `kshiftld'
.*:26: Error: unsupported instruction `kshiftrd' .*:26: Error: vector size .* `kshiftrd'
.*:27: Error: unsupported instruction `ktestd' .*:27: Error: vector size .* `ktestd'
.*:28: Error: unsupported instruction `kxord' .*:28: Error: vector size .* `kxord'
.*:29: Error: unsupported instruction `kxnord' .*:29: Error: vector size .* `kxnord'
.*:16: Error: unsupported instruction `kaddq' .*:16: Error: vector size .* `kaddq'
.*:17: Error: unsupported instruction `kandq' .*:17: Error: vector size .* `kandq'
.*:18: Error: unsupported instruction `kandnq' .*:18: Error: vector size .* `kandnq'
.*:19: Error: unsupported instruction `kmovq' .*:19: Error: vector size .* `kmovq'
.*:20: Error: unsupported instruction `kmovq' .*:20: Error: vector size .* `kmovq'
.*:21: Error: unsupported instruction `kmovq' .*:21: Error: vector size .* `kmovq'
.*:22: Error: unsupported instruction `knotq' .*:22: Error: vector size .* `knotq'
.*:23: Error: unsupported instruction `korq' .*:23: Error: vector size .* `korq'
.*:24: Error: unsupported instruction `kortestq' .*:24: Error: vector size .* `kortestq'
.*:25: Error: unsupported instruction `kshiftlq' .*:25: Error: vector size .* `kshiftlq'
.*:26: Error: unsupported instruction `kshiftrq' .*:26: Error: vector size .* `kshiftrq'
.*:27: Error: unsupported instruction `ktestq' .*:27: Error: vector size .* `ktestq'
.*:28: Error: unsupported instruction `kxorq' .*:28: Error: vector size .* `kxorq'
.*:29: Error: unsupported instruction `kxnorq' .*:29: Error: vector size .* `kxnorq'
.*:32: Error: unsupported instruction `vcvtpd2phz' .*:32: Error: vector size .* `vcvtpd2phz'
.*:33: Error: unsupported instruction `vcvtpd2phy' .*:33: Error: vector size .* `vcvtpd2phy'
.*:34: Error: unsupported broadcast for `vcvtpd2ph' .*:34: Error: unsupported broadcast for `vcvtpd2ph'
.*:35: Error: unsupported broadcast for `vcvtpd2ph' .*:35: Error: unsupported broadcast for `vcvtpd2ph'
.*:37: Error: .* .*:37: Error: .*
.*:38: Error: unsupported instruction `vcvtpd2psy' .*:38: Error: vector size .* `vcvtpd2psy'
.*:39: Error: unsupported instruction `vcvtpd2psy' .*:39: Error: vector size .* `vcvtpd2psy'
.*:40: Error: unsupported broadcast for `vcvtpd2ps' .*:40: Error: unsupported broadcast for `vcvtpd2ps'
.*:42: Error: unsupported instruction `vfpclasspsy' .*:42: Error: vector size .* `vfpclasspsy'
.*:43: Error: unsupported instruction `vfpclasspsz' .*:43: Error: vector size .* `vfpclasspsz'
.*:7: Warning: \.avx10\.1 .*:7: Warning: \.avx10\.1
.*:46: Error: ambiguous operand size for `vcvtpd2ph' .*:46: Error: ambiguous operand size for `vcvtpd2ph'
.*:47: Error: ambiguous operand size for `vcvtpd2ps' .*:47: Error: ambiguous operand size for `vcvtpd2ps'

View File

@@ -3,8 +3,8 @@
.*:8: Error: .*corei7\.avx.* .*:8: Error: .*corei7\.avx.*
.*:9: Error: .*corei7\.avx.* .*:9: Error: .*corei7\.avx.*
.*:10: Error: .*corei7\.avx.* .*:10: Error: .*corei7\.avx.*
.*:15: Error: .*unsupported.* .*:15: Error: .*operand size mismatch.*
.*:16: Error: .*unsupported.* .*:16: Error: .*operand size mismatch.*
GAS LISTING .* GAS LISTING .*
#... #...
[ ]*1[ ]+\.text [ ]*1[ ]+\.text

View File

@@ -1,6 +1,6 @@
.*: Assembler messages: .*: Assembler messages:
.*:5: Error: .*unsupported instruction.* .*:5: Error: .*operand size mismatch.*
.*:6: Error: .*unsupported instruction.* .*:6: Error: .*operand size mismatch.*
GAS LISTING .* GAS LISTING .*

View File

@@ -5,7 +5,7 @@
.*:17: Error: .*bad register name `%zmm.* .*:17: Error: .*bad register name `%zmm.*
.*:18: Error: .*bad register name `%zmm.* .*:18: Error: .*bad register name `%zmm.*
.*:21: 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.* .*:25: Error: .*bad register name `%zmm.*
.*:8: Error: .*bad register name `%zmm.* .*:8: Error: .*bad register name `%zmm.*
.*:10: Error: .*bad register name `%ymm.* .*:10: Error: .*bad register name `%ymm.*
@@ -23,16 +23,16 @@
.*:27: Error: .*bad register name `%ymm.* .*:27: Error: .*bad register name `%ymm.*
.*:9: Error: .*unsupported masking.* .*:9: Error: .*unsupported masking.*
.*:10: Error: .*unsupported masking.* .*:10: Error: .*unsupported masking.*
.*:12: Error: .*unsupported instruction.* .*:12: Error: .*operand size mismatch.*
.*:13: Error: .*unsupported instruction.* .*:13: Error: .*operand size mismatch.*
.*:15: Error: .*unsupported instruction.* .*:15: Error: .*operand size mismatch.*
.*:16: Error: .*unsupported instruction.* .*:16: Error: .*operand size mismatch.*
.*:19: Error: .*unsupported masking.* .*:19: Error: .*unsupported masking.*
.*:20: Error: .*unsupported masking.* .*:20: Error: .*unsupported masking.*
.*:22: Error: .*unsupported instruction.* .*:22: Error: .*operand size mismatch.*
.*:23: Error: .*unsupported instruction.* .*:23: Error: .*operand size mismatch.*
.*:26: Error: .*unsupported instruction.* .*:26: Error: .*operand size mismatch.*
.*:27: Error: .*unsupported instruction.* .*:27: Error: .*operand size mismatch.*
#... #...
[ ]*[0-9]+[ ]+\# Test \.arch \.noavx512vl [ ]*[0-9]+[ ]+\# Test \.arch \.noavx512vl
[ ]*[0-9]+[ ]+\.text [ ]*[0-9]+[ ]+\.text

View File

@@ -1,4 +1,4 @@
.* Assembler messages: .* Assembler messages:
.*:6: Error: unsupported .* `vpmadd52huq' .*:6: Error: unsupported .* `vpmadd52huq'
.*:7: Error: unsupported .* `vpmadd52huq' .*:7: Error: no EVEX .* `vpmadd52huq'
.*:8: Error: operand .* `vpmadd52huq' .*:8: Error: operand .* `vpmadd52huq'

View File

@@ -1,4 +1,4 @@
.* Assembler messages: .* Assembler messages:
.*:6: Error: unsupported .* `vpdpbusds' .*:6: Error: unsupported .* `vpdpbusds'
.*:7: Error: unsupported .* `vpdpbusds' .*:7: Error: no EVEX .* `vpdpbusds'
.*:8: Error: operand .* `vpdpbusds' .*:8: Error: operand .* `vpdpbusds'

View File

@@ -3,8 +3,8 @@
.*:8: Error: .*corei7\.avx.* .*:8: Error: .*corei7\.avx.*
.*:9: Error: .*corei7\.avx.* .*:9: Error: .*corei7\.avx.*
.*:10: Error: .*corei7\.avx.* .*:10: Error: .*corei7\.avx.*
.*:15: Error: .*unsupported.* .*:15: Error: .*operand size mismatch.*
.*:16: Error: .*unsupported.* .*:16: Error: .*operand size mismatch.*
GAS LISTING .* GAS LISTING .*
#... #...
[ ]*1[ ]+\.text [ ]*1[ ]+\.text

View File

@@ -1,6 +1,6 @@
.*: Assembler messages: .*: Assembler messages:
.*:5: Error: .*unsupported instruction.* .*:5: Error: .*operand size mismatch.*
.*:6: Error: .*unsupported instruction.* .*:6: Error: .*operand size mismatch.*
GAS LISTING .* GAS LISTING .*