[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