diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-04-03 15:01:36 +0000 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-04-03 15:01:36 +0000 |
commit | 93d4c624c56e04a20c13429c9a41e055fb4c27c6 (patch) | |
tree | 938c8421c4140b5381f4693293aa42694c983998 /src/arch/x86/predecoder.cc | |
parent | ec09e5ad6f7c0af6ebb10ee85b326155e2f26cd5 (diff) | |
parent | 61c56ffeaf3288e2a67c479a742cde5ab2d9377a (diff) | |
download | gem5-93d4c624c56e04a20c13429c9a41e055fb4c27c6.tar.xz |
Merge zizzer.eecs.umich.edu:/bk/newmem
into ahchoo.blinky.homelinux.org:/home/gblack/m5/newmem-x86
--HG--
extra : convert_revision : 7be8ebe55a7b11552d78701520f93aa86db1e501
Diffstat (limited to 'src/arch/x86/predecoder.cc')
-rw-r--r-- | src/arch/x86/predecoder.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/arch/x86/predecoder.cc b/src/arch/x86/predecoder.cc index fbed4fe41..80971e7cf 100644 --- a/src/arch/x86/predecoder.cc +++ b/src/arch/x86/predecoder.cc @@ -212,11 +212,16 @@ namespace X86ISA //Determine what to expect next if (UsesModRM[emi.opcode.num - 1][nextByte]) { nextState = ModRMState; - } else if(immediateSize) { - nextState = ImmediateState; } else { - emiIsReady = true; - nextState = PrefixState; + //If there's no modRM byte, set it to 0 so we can detect + //that later. + emi.modRM = 0; + if(immediateSize) { + nextState = ImmediateState; + } else { + emiIsReady = true; + nextState = PrefixState; + } } } return nextState; @@ -241,11 +246,11 @@ namespace X86ISA displacementSize = 0; } else { //figure out 32/64 bit displacement size - if(nextByte & 0xC7 == 0x05 || + if(nextByte & 0xC6 == 0x04 || nextByte & 0xC0 == 0x80) displacementSize = 4; else if(nextByte & 0xC0 == 0x40) - displacementSize = 2; + displacementSize = 1; else displacementSize = 0; } |