Put the mode in the ExtMachInst.

--HG--
extra : convert_revision : 7fc6567ab3d35c06901e6c8a0435f7cab819e17e
This commit is contained in:
Gabe Black 2007-06-14 13:50:58 +00:00
parent 640ab1d2e7
commit cd3fee1b81
4 changed files with 29 additions and 2 deletions

View file

@ -77,6 +77,7 @@ namespace X86ISA
emi.modRM = 0;
emi.sib = 0;
emi.mode = 0;
}
void Predecoder::process()

View file

@ -176,7 +176,10 @@ namespace X86ISA
tc(_tc), basePC(0), origPC(0), offset(0),
outOfBytes(true), emiIsReady(false),
state(ResetState)
{}
{
emi.mode.mode = LongMode;
emi.mode.submode = SixtyFourBitMode;
}
ThreadContext * getTC()
{

View file

@ -120,6 +120,24 @@ namespace X86ISA
Bitfield<2,0> bottom3;
EndBitUnion(Opcode)
BitUnion8(OperatingMode)
Bitfield<3> mode;
Bitfield<2,0> submode;
EndBitUnion(OperatingMode)
enum X86Mode {
LongMode,
LegacyMode
};
enum X86SubMode {
SixtyFourBitMode,
CompatabilityMode,
ProtectedMode,
Virtual8086Mode,
RealMode
};
//The intermediate structure the x86 predecoder returns.
struct ExtMachInst
{
@ -151,6 +169,9 @@ namespace X86ISA
uint8_t opSize;
//The effective address size.
uint8_t addrSize;
//Mode information
OperatingMode mode;
};
inline static std::ostream &
@ -172,6 +193,8 @@ namespace X86ISA
inline static bool
operator == (const ExtMachInst &emi1, const ExtMachInst &emi2)
{
if(emi1.mode != emi2.mode)
return false;
if(emi1.legacy != emi2.legacy)
return false;
if(emi1.rex != emi2.rex)

View file

@ -79,7 +79,7 @@ namespace __hash_namespace {
((uint64_t)emi.opcode.prefixB << 8) |
((uint64_t)emi.opcode.op)) ^
emi.immediate ^ emi.displacement ^
emi.opSize;
emi.mode ^ emi.opSize;
};
};
}