From 85b661e35d82cea3c5edd27f111cffbd4ee47f4b Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 2 Aug 2007 15:09:12 -0700 Subject: X86: Fix special case with SIB index register and REX prefix. --HG-- extra : convert_revision : b305708a722f2a08cb55c4548c5616fcbe6c5d68 --- src/arch/x86/emulenv.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/arch/x86') diff --git a/src/arch/x86/emulenv.cc b/src/arch/x86/emulenv.cc index 3a54d7365..28282dc7a 100644 --- a/src/arch/x86/emulenv.cc +++ b/src/arch/x86/emulenv.cc @@ -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; } } } -- cgit v1.2.3