X86: Fix special case with SIB index register and REX prefix.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 2 Aug 2007 22:09:12 +0000 (15:09 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 2 Aug 2007 22:09:12 +0000 (15:09 -0700)
--HG--
extra : convert_revision : b305708a722f2a08cb55c4548c5616fcbe6c5d68

src/arch/x86/emulenv.cc

index 3a54d73655410949932e0d53a0b87438bb273c3f..28282dc7a0f0ec8af622bddb7f7b8fd149164e16 100644 (file)
@@ -73,7 +73,7 @@ void EmulEnv::doModRM(const ExtMachInst & machInst)
         if (machInst.sib.base == INTREG_RBP && machInst.modRM.mod == 0)
             base = NUM_INTREGS;
         //In -this- special case, we don't use an index.
-        if (machInst.sib.index == INTREG_RSP)
+        if (index == INTREG_RSP)
             index = NUM_INTREGS;
     } else {
         if (machInst.addrSize == 2) {
@@ -82,11 +82,9 @@ void EmulEnv::doModRM(const ExtMachInst & machInst)
             scale = 0;
             base = machInst.modRM.rm | (machInst.rex.b << 3);
             if (machInst.modRM.mod == 0 && machInst.modRM.rm == 5) {
-                base = NUM_INTREGS;
                 //Since we need to use a different encoding of this
                 //instruction anyway, just ignore the base in those cases
-//                if (machInst.mode.submode == SixtyFourBitMode)
-//                    base = NUM_INTREGS+7;
+                base = NUM_INTREGS;
             }
         }
     }