2007-10-12 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 12 Oct 2007 22:26:55 +0000 (22:26 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 12 Oct 2007 22:26:55 +0000 (22:26 +0000)
* config/tc-i386.c (process_operands): Simplify implicit xmm0
handling.

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

index 6bffb5c..82a5d36 100644 (file)
@@ -1,5 +1,10 @@
 2007-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
+       * config/tc-i386.c (process_operands): Simplify implicit xmm0
+       handling.
+
+2007-10-12  H.J. Lu  <hongjiu.lu@intel.com>
+
        * config/tc-i386.c (process_operands): Check the firstxmm0
        field in opcode_modifier for instruction with a implicit
        xmm0 as the first operand.
index 8962980..0c430ea 100644 (file)
@@ -4232,6 +4232,8 @@ process_operands (void)
 
   if (i.tm.opcode_modifier.firstxmm0)
     {
+      unsigned int j;
+
       /* The first operand is implicit and must be xmm0.  */
       assert (i.reg_operands && UINTS_EQUAL (i.types[0], regxmm));
       if (i.op[0].regs->reg_num != 0)
@@ -4244,17 +4246,19 @@ process_operands (void)
                    i.tm.name, register_prefix);
          return 0;
        }
-      i.op[0] = i.op[1];
-      i.op[1] = i.op[2];
-      i.types[0] = i.types[1];
-      i.types[1] = i.types[2];
+
+      for (j = 1; j < i.operands; j++)
+       {
+         i.op[j - 1] = i.op[j];
+         i.types[j - 1] = i.types[j];
+
+         /* We need to adjust fields in i.tm since they are used by
+            build_modrm_byte.  */
+         i.tm.operand_types [j - 1] = i.tm.operand_types [j];
+       }
+
       i.operands--;
       i.reg_operands--;
-
-      /* We need to adjust fields in i.tm since they are used by
-        build_modrm_byte.  */
-      i.tm.operand_types [0] = i.tm.operand_types [1];
-      i.tm.operand_types [1] = i.tm.operand_types [2];
       i.tm.operands--;
     }
   else if (i.tm.opcode_modifier.regkludge)