OSDN Git Service

2009-11-11 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl>
Thu, 12 Nov 2009 11:21:46 +0000 (11:21 +0000)
committerhjl <hjl>
Thu, 12 Nov 2009 11:21:46 +0000 (11:21 +0000)
* config/tc-i386.c (build_modrm_byte): Don't set register
operand twice.

gas/ChangeLog
gas/config/tc-i386.c

index a372f9a..c239616 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (build_modrm_byte): Don't set register
+       operand twice.
+
 2009-11-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * configure.in: Call ACX_LARGEFILE.  Stop calling AC_SYS_LARGEFILE.
index 2996751..e787215 100644 (file)
@@ -5344,19 +5344,23 @@ build_modrm_byte (void)
              i.vex.register_specifier = i.op[vex_reg].regs;
            }
 
-         /* If there is an extension opcode to put here, the
-            register number must be put into the regmem field.  */
-         if (i.tm.extension_opcode != None)
+         /* Don't set OP operand twice.  */
+         if (vex_reg != op)
            {
-             i.rm.regmem = i.op[op].regs->reg_num;
-             if ((i.op[op].regs->reg_flags & RegRex) != 0)
-               i.rex |= REX_B;
-           }
-         else
-           {
-             i.rm.reg = i.op[op].regs->reg_num;
-             if ((i.op[op].regs->reg_flags & RegRex) != 0)
-               i.rex |= REX_R;
+             /* If there is an extension opcode to put here, the
+                register number must be put into the regmem field.  */
+             if (i.tm.extension_opcode != None)
+               {
+                 i.rm.regmem = i.op[op].regs->reg_num;
+                 if ((i.op[op].regs->reg_flags & RegRex) != 0)
+                   i.rex |= REX_B;
+               }
+             else
+               {
+                 i.rm.reg = i.op[op].regs->reg_num;
+                 if ((i.op[op].regs->reg_flags & RegRex) != 0)
+                   i.rex |= REX_R;
+               }
            }
 
          /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we