Put the mode in the ExtMachInst.
--HG-- extra : convert_revision : 7fc6567ab3d35c06901e6c8a0435f7cab819e17e
This commit is contained in:
parent
640ab1d2e7
commit
cd3fee1b81
4 changed files with 29 additions and 2 deletions
|
@ -77,6 +77,7 @@ namespace X86ISA
|
||||||
|
|
||||||
emi.modRM = 0;
|
emi.modRM = 0;
|
||||||
emi.sib = 0;
|
emi.sib = 0;
|
||||||
|
emi.mode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Predecoder::process()
|
void Predecoder::process()
|
||||||
|
|
|
@ -176,7 +176,10 @@ namespace X86ISA
|
||||||
tc(_tc), basePC(0), origPC(0), offset(0),
|
tc(_tc), basePC(0), origPC(0), offset(0),
|
||||||
outOfBytes(true), emiIsReady(false),
|
outOfBytes(true), emiIsReady(false),
|
||||||
state(ResetState)
|
state(ResetState)
|
||||||
{}
|
{
|
||||||
|
emi.mode.mode = LongMode;
|
||||||
|
emi.mode.submode = SixtyFourBitMode;
|
||||||
|
}
|
||||||
|
|
||||||
ThreadContext * getTC()
|
ThreadContext * getTC()
|
||||||
{
|
{
|
||||||
|
|
|
@ -120,6 +120,24 @@ namespace X86ISA
|
||||||
Bitfield<2,0> bottom3;
|
Bitfield<2,0> bottom3;
|
||||||
EndBitUnion(Opcode)
|
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.
|
//The intermediate structure the x86 predecoder returns.
|
||||||
struct ExtMachInst
|
struct ExtMachInst
|
||||||
{
|
{
|
||||||
|
@ -151,6 +169,9 @@ namespace X86ISA
|
||||||
uint8_t opSize;
|
uint8_t opSize;
|
||||||
//The effective address size.
|
//The effective address size.
|
||||||
uint8_t addrSize;
|
uint8_t addrSize;
|
||||||
|
|
||||||
|
//Mode information
|
||||||
|
OperatingMode mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline static std::ostream &
|
inline static std::ostream &
|
||||||
|
@ -172,6 +193,8 @@ namespace X86ISA
|
||||||
inline static bool
|
inline static bool
|
||||||
operator == (const ExtMachInst &emi1, const ExtMachInst &emi2)
|
operator == (const ExtMachInst &emi1, const ExtMachInst &emi2)
|
||||||
{
|
{
|
||||||
|
if(emi1.mode != emi2.mode)
|
||||||
|
return false;
|
||||||
if(emi1.legacy != emi2.legacy)
|
if(emi1.legacy != emi2.legacy)
|
||||||
return false;
|
return false;
|
||||||
if(emi1.rex != emi2.rex)
|
if(emi1.rex != emi2.rex)
|
||||||
|
|
|
@ -79,7 +79,7 @@ namespace __hash_namespace {
|
||||||
((uint64_t)emi.opcode.prefixB << 8) |
|
((uint64_t)emi.opcode.prefixB << 8) |
|
||||||
((uint64_t)emi.opcode.op)) ^
|
((uint64_t)emi.opcode.op)) ^
|
||||||
emi.immediate ^ emi.displacement ^
|
emi.immediate ^ emi.displacement ^
|
||||||
emi.opSize;
|
emi.mode ^ emi.opSize;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue