x86-64: assert sane internal state for REX conversions
authorJan Beulich <jbeulich@suse.com>
Thu, 9 Jan 2020 10:39:33 +0000 (11:39 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 9 Jan 2020 10:39:33 +0000 (11:39 +0100)
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/ChangeLog
gas/config/tc-i386.c

index c3045c13ef4dd3daeb7149335617f126b089dafc..26a0075e0792225758fb5d872b18f0a313adb137 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-09  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.c (md_assemble): Check RegRex is clear during
+       REX transformations. Correct comment indentation.
+
 2020-01-09  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (optimize_encoding): Generalize register
index efa43650928ab70f5fd8c6f02fee8a1031277478..645fd38a12c1de6d86dec292a9d87aadc1c2bc79 100644 (file)
@@ -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;
          }