[PATCH 2/3] x86-64: assert sane internal state for REX conversions
Jan Beulich
jbeulich@suse.com
Mon Dec 16 10:03:00 GMT 2019
For the comments about "hi" registers to be really applicable, RegRex
may not be set on the respective registers. Assert this is the case.
gas/
2019-12-XX Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (md_assemble): Check RegRex is clear during
REX transformations. Correct comment indentation.
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -4497,6 +4497,7 @@ md_assemble (char *line)
if (i.types[x].bitfield.class == Reg && i.types[x].bitfield.byte
&& (i.op[x].regs->reg_flags & RegRex64) == 0)
{
+ gas_assert (!(i.op[x].regs->reg_flags & RegRex));
/* 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 "
@@ -4515,7 +4516,7 @@ md_assemble (char *line)
if (i.rex == 0 && i.rex_encoding)
{
/* Check if we can add a REX_OPCODE byte. Look for 8 bit operand
- that uses legacy register. If it is "hi" register, don't add
+ that uses legacy register. If it is "hi" register, don't add
the REX_OPCODE byte. */
int x;
for (x = 0; x < 2; x++)
@@ -4524,6 +4525,7 @@ md_assemble (char *line)
&& (i.op[x].regs->reg_flags & RegRex64) == 0
&& i.op[x].regs->reg_num > 3)
{
+ gas_assert (!(i.op[x].regs->reg_flags & RegRex));
i.rex_encoding = FALSE;
break;
}
More information about the Binutils
mailing list