From: Jan Beulich Date: Thu, 9 Jan 2020 10:39:33 +0000 (+0100) Subject: x86-64: assert sane internal state for REX conversions X-Git-Tag: binutils-2_34~185 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3f93af61413b6f6e4381ac286cb510d897971e3f;p=thirdparty%2Fbinutils-gdb.git x86-64: assert sane internal state for REX conversions For the comments about "hi" registers to be really applicable, RegRex may not be set on the respective registers. Assert this is the case. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index c3045c13ef4..26a0075e079 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2020-01-09 Jan Beulich + + * config/tc-i386.c (md_assemble): Check RegRex is clear during + REX transformations. Correct comment indentation. + 2020-01-09 Jan Beulich * config/tc-i386.c (optimize_encoding): Generalize register diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index efa43650928..645fd38a12c 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4574,6 +4574,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 " @@ -4592,7 +4593,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++) @@ -4601,6 +4602,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; }