2007-01-13 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 13 Jan 2007 16:48:00 +0000 (16:48 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 13 Jan 2007 16:48:00 +0000 (16:48 +0000)
* config/tc-i386.c (build_modrm_byte): Check number of operands
when procssing memory/register operand.

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

index 09b11b0065729f411fb46f1f0382307796d85104..ea5596c2f676c3b4fdd25938743d2e43da8ce28e 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (build_modrm_byte): Check number of operands
+       when procssing memory/register operand.
+
 2007-01-12  Nick Clifton  <nickc@redhat.com>
 
        PR gas/3856
index 889bfc3767240c9846ac4e977595abaadb1930a0..2f50bcfeaf867804edd3fbc19ffe9104231464b3 100644 (file)
@@ -3443,9 +3443,12 @@ build_modrm_byte (void)
       if (i.mem_operands)
        {
          unsigned int fake_zero_displacement = 0;
-         unsigned int op = ((i.types[0] & AnyMem)
-                            ? 0
-                            : (i.types[1] & AnyMem) ? 1 : 2);
+         unsigned int op;
+         
+         for (op = 0; op < i.operands; op++)
+           if ((i.types[op] & AnyMem))
+             break;
+         assert (op < i.operands);
 
          default_seg = &ds;
 
@@ -3616,18 +3619,15 @@ build_modrm_byte (void)
         registers are coded into the i.rm.reg field.  */
       if (i.reg_operands)
        {
-         unsigned int op =
-           ((i.types[0]
-             & (Reg | RegMMX | RegXMM
-                | SReg2 | SReg3
-                | Control | Debug | Test))
-            ? 0
-            : ((i.types[1]
-                & (Reg | RegMMX | RegXMM
-                   | SReg2 | SReg3
-                   | Control | Debug | Test))
-               ? 1
-               : 2));
+         unsigned int op;
+
+         for (op = 0; op < i.operands; op++)
+           if ((i.types[op] & (Reg | RegMMX | RegXMM
+                               | SReg2 | SReg3
+                               | Control | Debug | Test)))
+             break;
+         assert (op < i.operands);
+
          /* 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)