gem5
v21.1.0.2
|
#include <decoder.hh>
Classes | |
struct | InstBytes |
Public Member Functions | |
Decoder (ISA *isa=nullptr) | |
void | setM5Reg (HandyM5Reg m5Reg) |
void | takeOverFrom (Decoder *old) |
void | reset () |
void | process () |
void | moreBytes (const PCState &pc, Addr fetchPC) |
bool | needMoreBytes () |
bool | instReady () |
void | updateNPC (X86ISA::PCState &nextPC) |
StaticInstPtr | decode (X86ISA::PCState &nextPC) |
StaticInstPtr | fetchRomMicroop (MicroPC micropc, StaticInstPtr curMacroop) override |
![]() | |
template<typename MoreBytesType > | |
InstDecoder (MoreBytesType *mb_buf) | |
void * | moreBytesPtr () const |
size_t | moreBytesSize () const |
Addr | pcMask () const |
Protected Types | |
enum | State { ResetState, FromCacheState, PrefixState, Vex2Of2State, Vex2Of3State, Vex3Of3State, VexOpcodeState, OneByteOpcodeState, TwoByteOpcodeState, ThreeByte0F38OpcodeState, ThreeByte0F3AOpcodeState, ModRMState, SIBState, DisplacementState, ImmediateState, ErrorState } |
using | MachInst = uint64_t |
typedef RegVal | CacheKey |
Caching for decoded instruction objects. More... | |
typedef decode_cache::AddrMap< Decoder::InstBytes > | DecodePages |
typedef std::unordered_map< CacheKey, DecodePages * > | AddrCacheMap |
typedef std::unordered_map< CacheKey, decode_cache::InstMap< ExtMachInst > * > | InstCacheMap |
Protected Member Functions | |
uint8_t | getNextByte () |
void | getImmediate (int &collected, uint64_t ¤t, int size) |
void | updateOffsetState () |
void | consumeByte () |
void | consumeBytes (int numBytes) |
State | doResetState () |
State | doFromCacheState () |
State | doPrefixState (uint8_t) |
State | doVex2Of2State (uint8_t) |
State | doVex2Of3State (uint8_t) |
State | doVex3Of3State (uint8_t) |
State | doVexOpcodeState (uint8_t) |
State | doOneByteOpcodeState (uint8_t) |
State | doTwoByteOpcodeState (uint8_t) |
State | doThreeByte0F38OpcodeState (uint8_t) |
State | doThreeByte0F3AOpcodeState (uint8_t) |
State | doModRMState (uint8_t) |
State | doSIBState (uint8_t) |
State | doDisplacementState () |
State | doImmediateState () |
State | processOpcode (ByteTable &immTable, ByteTable &modrmTable, bool addrSizedImm=false) |
State | processExtendedOpcode (ByteTable &immTable) |
StaticInstPtr | decodeInst (ExtMachInst mach_inst) |
StaticInstPtr | decode (ExtMachInst mach_inst, Addr addr) |
Decode a machine instruction. More... | |
Protected Attributes | |
MachInst | fetchChunk |
InstBytes * | instBytes = &dummy |
int | chunkIdx |
Addr | basePC = 0 |
Addr | origPC = 0 |
int | offset = 0 |
ExtMachInst | emi |
X86Mode | mode = LongMode |
X86SubMode | submode = SixtyFourBitMode |
uint8_t | altOp = 0 |
uint8_t | defOp = 0 |
uint8_t | altAddr = 0 |
uint8_t | defAddr = 0 |
uint8_t | stack = 0 |
bool | outOfBytes = true |
bool | instDone = false |
int | displacementSize |
int | immediateSize |
int | immediateCollected |
State | state = ResetState |
DecodePages * | decodePages = nullptr |
AddrCacheMap | addrCacheMap |
decode_cache::InstMap< ExtMachInst > * | instMap = nullptr |
![]() | |
void * | _moreBytesPtr |
size_t | _moreBytesSize |
Addr | _pcMask |
Static Protected Attributes | |
static InstBytes | dummy |
static InstCacheMap | instCacheMap |
Private Attributes | |
const typedef uint8_t | ByteTable [256] |
Static Private Attributes | |
static const uint8_t | SizeTypeToSize [3][10] |
static ByteTable | Prefixes |
static ByteTable | UsesModRMOneByte |
static ByteTable | UsesModRMTwoByte |
static ByteTable | UsesModRMThreeByte0F38 |
static ByteTable | UsesModRMThreeByte0F3A |
static ByteTable | ImmediateTypeOneByte |
static ByteTable | ImmediateTypeTwoByte |
static ByteTable | ImmediateTypeThreeByte0F38 |
static ByteTable | ImmediateTypeThreeByte0F3A |
static ByteTable | ImmediateTypeVex [10] |
static X86ISAInst::MicrocodeRom | microcodeRom |
Definition at line 55 of file decoder.hh.
|
protected |
Definition at line 242 of file decoder.hh.
|
protected |
Caching for decoded instruction objects.
Definition at line 238 of file decoder.hh.
|
protected |
Definition at line 240 of file decoder.hh.
|
protected |
Definition at line 247 of file decoder.hh.
|
protected |
Definition at line 77 of file decoder.hh.
|
protected |
Definition at line 189 of file decoder.hh.
|
inline |
Definition at line 258 of file decoder.hh.
References emi, mode, gem5::X86ISA::ExtMachInst::mode, gem5::X86ISA::ExtMachInst::reset(), and submode.
|
inlineprotected |
Definition at line 162 of file decoder.hh.
References offset, and updateOffsetState().
Referenced by doModRMState(), doOneByteOpcodeState(), doPrefixState(), doSIBState(), doThreeByte0F38OpcodeState(), doThreeByte0F3AOpcodeState(), doTwoByteOpcodeState(), doVex2Of2State(), doVex2Of3State(), doVex3Of3State(), and doVexOpcodeState().
|
inlineprotected |
Definition at line 169 of file decoder.hh.
References offset, and updateOffsetState().
Referenced by getImmediate().
|
protected |
Decode a machine instruction.
mach_inst | The binary instruction to decode. |
A | pointer to the corresponding StaticInst object. |
Definition at line 679 of file decoder.cc.
References decodeInst(), DPRINTF, instMap, and gem5::X86ISA::si.
Referenced by decode().
StaticInstPtr gem5::X86ISA::Decoder::decode | ( | X86ISA::PCState & | nextPC | ) |
Definition at line 697 of file decoder.cc.
References basePC, gem5::X86ISA::Decoder::InstBytes::chunks, decode(), emi, instBytes, instDone, gem5::X86ISA::Decoder::InstBytes::lastOffset, gem5::X86ISA::mask, gem5::X86ISA::Decoder::InstBytes::masks, offset, origPC, gem5::X86ISA::Decoder::InstBytes::si, gem5::X86ISA::si, and updateNPC().
|
protected |
Referenced by decode().
|
protected |
Definition at line 589 of file decoder.cc.
References gem5::X86ISA::ExtMachInst::displacement, displacementSize, DisplacementState, gem5::X86ISA::ExtMachInst::dispSize, DPRINTF, emi, ErrorState, getImmediate(), immediateCollected, immediateSize, ImmediateState, instDone, panic, and ResetState.
Referenced by process().
|
protected |
Definition at line 148 of file decoder.cc.
References basePC, chunkIdx, gem5::X86ISA::Decoder::InstBytes::chunks, DPRINTF, fetchChunk, FromCacheState, instBytes, instDone, gem5::X86ISA::Decoder::InstBytes::lastOffset, gem5::X86ISA::Decoder::InstBytes::masks, offset, origPC, outOfBytes, PrefixState, ResetState, and gem5::X86ISA::Decoder::InstBytes::si.
Referenced by process().
|
protected |
Definition at line 636 of file decoder.cc.
References DPRINTF, emi, ErrorState, getImmediate(), gem5::X86ISA::ExtMachInst::immediate, immediateCollected, immediateSize, ImmediateState, instDone, and ResetState.
Referenced by process().
|
protected |
Definition at line 513 of file decoder.cc.
References consumeByte(), defOp, displacementSize, DisplacementState, DPRINTF, emi, ErrorState, immediateSize, ImmediateState, instDone, gem5::X86ISA::ExtMachInst::modRM, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, gem5::X86ISA::ExtMachInst::opSize, ResetState, SIBState, and gem5::X86ISA::ExtMachInst::type.
Referenced by process().
|
protected |
Definition at line 380 of file decoder.cc.
References consumeByte(), DPRINTF, emi, ErrorState, ImmediateTypeOneByte, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), TwoByteOpcodeState, gem5::X86ISA::ExtMachInst::type, and UsesModRMOneByte.
Referenced by process().
|
protected |
Definition at line 182 of file decoder.cc.
References gem5::X86ISA::AddressSizeOverride, consumeByte(), gem5::X86ISA::CSOverride, DPRINTF, gem5::X86ISA::DSOverride, emi, gem5::X86ISA::ESOverride, gem5::X86ISA::FSOverride, gem5::X86ISA::GSOverride, gem5::X86ISA::ExtMachInst::legacy, gem5::X86ISA::Lock, gem5::X86ISA::ExtMachInst::mode, OneByteOpcodeState, gem5::X86ISA::OperandSizeOverride, panic, PrefixState, gem5::X86ISA::Rep, gem5::X86ISA::Repne, gem5::X86ISA::ExtMachInst::rex, gem5::X86ISA::RexPrefix, gem5::X86ISA::SixtyFourBitMode, gem5::X86ISA::SSOverride, gem5::X86ISA::ExtMachInst::vex, Vex2Of2State, Vex2Of3State, gem5::X86ISA::Vex2Prefix, and gem5::X86ISA::Vex3Prefix.
Referenced by process().
|
protected |
Definition at line 47 of file decoder.cc.
References basePC, chunkIdx, gem5::X86ISA::Decoder::InstBytes::chunks, decodePages, gem5::X86ISA::ExtMachInst::displacement, gem5::X86ISA::ExtMachInst::dispSize, DPRINTF, emi, FromCacheState, gem5::X86ISA::ExtMachInst::immediate, immediateCollected, instBytes, gem5::X86ISA::ExtMachInst::legacy, gem5::decode_cache::AddrMap< Value, CacheChunkShift >::lookup(), gem5::X86ISA::ExtMachInst::modRM, offset, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, origPC, PrefixState, gem5::X86ISA::ExtMachInst::rex, gem5::X86ISA::Decoder::InstBytes::si, gem5::X86ISA::ExtMachInst::sib, gem5::X86ISA::ExtMachInst::type, and gem5::X86ISA::ExtMachInst::vex.
Referenced by process().
|
protected |
Definition at line 568 of file decoder.cc.
References consumeByte(), displacementSize, DisplacementState, DPRINTF, emi, ErrorState, immediateSize, ImmediateState, instDone, gem5::X86ISA::ExtMachInst::modRM, ResetState, and gem5::X86ISA::ExtMachInst::sib.
Referenced by process().
|
protected |
Definition at line 425 of file decoder.cc.
References consumeByte(), DPRINTF, emi, ImmediateTypeThreeByte0F38, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), gem5::X86ISA::ExtMachInst::type, and UsesModRMThreeByte0F38.
Referenced by process().
|
protected |
Definition at line 439 of file decoder.cc.
References consumeByte(), DPRINTF, emi, ImmediateTypeThreeByte0F3A, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), gem5::X86ISA::ExtMachInst::type, and UsesModRMThreeByte0F3A.
Referenced by process().
|
protected |
Definition at line 402 of file decoder.cc.
References consumeByte(), DPRINTF, emi, ErrorState, ImmediateTypeTwoByte, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), ThreeByte0F38OpcodeState, ThreeByte0F3AOpcodeState, gem5::X86ISA::ExtMachInst::type, and UsesModRMTwoByte.
Referenced by process().
|
protected |
Definition at line 248 of file decoder.cc.
References consumeByte(), emi, gem5::X86ISA::ExtMachInst::legacy, gem5::X86ISA::ExtMachInst::opcode, gem5::X86ISA::ExtMachInst::rex, gem5::X86ISA::ExtMachInst::type, gem5::X86ISA::ExtMachInst::vex, and VexOpcodeState.
Referenced by process().
|
protected |
Definition at line 278 of file decoder.cc.
References gem5::bits(), consumeByte(), emi, ImmediateTypeOneByte, instDone, gem5::X86ISA::ExtMachInst::mode, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), ResetState, gem5::X86ISA::ExtMachInst::rex, gem5::X86ISA::SixtyFourBitMode, gem5::X86ISA::ExtMachInst::type, UsesModRMOneByte, gem5::X86ISA::ExtMachInst::vex, and Vex3Of3State.
Referenced by process().
|
protected |
Definition at line 319 of file decoder.cc.
References gem5::bits(), consumeByte(), emi, ImmediateTypeOneByte, gem5::X86ISA::ExtMachInst::legacy, gem5::X86ISA::ExtMachInst::mode, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, processOpcode(), gem5::X86ISA::ExtMachInst::rex, gem5::X86ISA::SixtyFourBitMode, gem5::X86ISA::ExtMachInst::type, UsesModRMOneByte, gem5::X86ISA::ExtMachInst::vex, and VexOpcodeState.
Referenced by process().
|
protected |
Definition at line 356 of file decoder.cc.
References consumeByte(), DPRINTF, emi, ImmediateTypeThreeByte0F38, ImmediateTypeThreeByte0F3A, ImmediateTypeTwoByte, gem5::X86ISA::ExtMachInst::op, gem5::X86ISA::ExtMachInst::opcode, panic, processOpcode(), gem5::X86ISA::ExtMachInst::type, UsesModRMThreeByte0F38, UsesModRMThreeByte0F3A, and UsesModRMTwoByte.
Referenced by process().
|
overridevirtual |
Reimplemented from gem5::InstDecoder.
Definition at line 741 of file decoder.cc.
References gem5::X86ISAInst::MicrocodeRom::fetchMicroop(), and microcodeRom.
|
inlineprotected |
Definition at line 120 of file decoder.hh.
References consumeBytes(), fetchChunk, immediateCollected, gem5::X86ISA::mask, and offset.
Referenced by doDisplacementState(), and doImmediateState().
|
inlineprotected |
Definition at line 114 of file decoder.hh.
References fetchChunk, and offset.
Referenced by process().
|
inline |
Definition at line 327 of file decoder.hh.
References instDone.
Definition at line 316 of file decoder.hh.
References basePC, DPRINTF, fetchChunk, gem5::letoh(), offset, outOfBytes, gem5::X86ISA::pc, and process().
|
inline |
Definition at line 326 of file decoder.hh.
References outOfBytes.
void gem5::X86ISA::Decoder::process | ( | ) |
Definition at line 78 of file decoder.cc.
References gem5::X86ISA::Decoder::InstBytes::chunks, DisplacementState, doDisplacementState(), doFromCacheState(), doImmediateState(), doModRMState(), doOneByteOpcodeState(), doPrefixState(), doResetState(), doSIBState(), doThreeByte0F38OpcodeState(), doThreeByte0F3AOpcodeState(), doTwoByteOpcodeState(), doVex2Of2State(), doVex2Of3State(), doVex3Of3State(), doVexOpcodeState(), ErrorState, fetchChunk, FromCacheState, getNextByte(), ImmediateState, instBytes, instDone, ModRMState, OneByteOpcodeState, outOfBytes, panic, PrefixState, ResetState, SIBState, state, ThreeByte0F38OpcodeState, ThreeByte0F3AOpcodeState, TwoByteOpcodeState, Vex2Of2State, Vex2Of3State, Vex3Of3State, and VexOpcodeState.
Referenced by moreBytes().
|
protected |
Definition at line 453 of file decoder.cc.
References gem5::X86ISA::ExtMachInst::addrSize, altAddr, altOp, defAddr, defOp, emi, ErrorState, immediateSize, ImmediateState, instDone, gem5::X86ISA::ExtMachInst::legacy, ModRMState, gem5::X86ISA::ExtMachInst::op, gem5::ArmISA::opcode, gem5::X86ISA::ExtMachInst::opcode, gem5::X86ISA::ExtMachInst::opSize, ResetState, gem5::X86ISA::ExtMachInst::rex, SizeTypeToSize, stack, and gem5::X86ISA::ExtMachInst::stackSize.
Referenced by doOneByteOpcodeState(), doThreeByte0F38OpcodeState(), doThreeByte0F3AOpcodeState(), doTwoByteOpcodeState(), doVex2Of3State(), doVex3Of3State(), and doVexOpcodeState().
|
inline |
Definition at line 309 of file decoder.hh.
References ResetState, and state.
|
inline |
Definition at line 266 of file decoder.hh.
References addrCacheMap, altAddr, altOp, decodePages, defAddr, defOp, emi, instCacheMap, instMap, mode, gem5::X86ISA::ExtMachInst::mode, stack, and submode.
|
inline |
|
inline |
Definition at line 330 of file decoder.hh.
References basePC, DPRINTF, gem5::GenericISA::SimplePCState< InstWidth >::npc(), offset, origPC, gem5::GenericISA::SimplePCState< InstWidth >::pc(), and gem5::X86ISA::PCState::size().
Referenced by decode().
|
inlineprotected |
Definition at line 144 of file decoder.hh.
References basePC, chunkIdx, gem5::X86ISA::Decoder::InstBytes::chunks, DPRINTF, fetchChunk, instBytes, offset, and outOfBytes.
Referenced by consumeByte(), and consumeBytes().
|
protected |
Definition at line 243 of file decoder.hh.
Referenced by setM5Reg().
|
protected |
Definition at line 109 of file decoder.hh.
Referenced by processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 107 of file decoder.hh.
Referenced by processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 97 of file decoder.hh.
Referenced by decode(), doFromCacheState(), doResetState(), moreBytes(), updateNPC(), and updateOffsetState().
|
private |
Definition at line 60 of file decoder.hh.
|
protected |
Definition at line 95 of file decoder.hh.
Referenced by doFromCacheState(), doResetState(), and updateOffsetState().
|
protected |
Definition at line 241 of file decoder.hh.
Referenced by doResetState(), and setM5Reg().
|
protected |
Definition at line 110 of file decoder.hh.
Referenced by processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 108 of file decoder.hh.
Referenced by doModRMState(), processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 182 of file decoder.hh.
Referenced by doDisplacementState(), doModRMState(), and doSIBState().
|
staticprotected |
Definition at line 90 of file decoder.hh.
|
protected |
Definition at line 103 of file decoder.hh.
Referenced by decode(), Decoder(), doDisplacementState(), doImmediateState(), doModRMState(), doOneByteOpcodeState(), doPrefixState(), doResetState(), doSIBState(), doThreeByte0F38OpcodeState(), doThreeByte0F3AOpcodeState(), doTwoByteOpcodeState(), doVex2Of2State(), doVex2Of3State(), doVex3Of3State(), doVexOpcodeState(), processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 93 of file decoder.hh.
Referenced by doFromCacheState(), getImmediate(), getNextByte(), moreBytes(), process(), and updateOffsetState().
|
protected |
Definition at line 187 of file decoder.hh.
Referenced by doDisplacementState(), doImmediateState(), doResetState(), and getImmediate().
|
protected |
Definition at line 184 of file decoder.hh.
Referenced by doDisplacementState(), doImmediateState(), doModRMState(), doSIBState(), and processOpcode().
|
staticprivate |
Definition at line 68 of file decoder.hh.
Referenced by doOneByteOpcodeState(), doVex2Of3State(), and doVex3Of3State().
|
staticprivate |
Definition at line 70 of file decoder.hh.
Referenced by doThreeByte0F38OpcodeState(), and doVexOpcodeState().
|
staticprivate |
Definition at line 71 of file decoder.hh.
Referenced by doThreeByte0F3AOpcodeState(), and doVexOpcodeState().
|
staticprivate |
Definition at line 69 of file decoder.hh.
Referenced by doTwoByteOpcodeState(), and doVexOpcodeState().
|
staticprivate |
Definition at line 72 of file decoder.hh.
Definition at line 94 of file decoder.hh.
Referenced by decode(), doFromCacheState(), doResetState(), process(), and updateOffsetState().
|
staticprotected |
Definition at line 248 of file decoder.hh.
Referenced by setM5Reg().
|
protected |
Definition at line 180 of file decoder.hh.
Referenced by decode(), doDisplacementState(), doFromCacheState(), doImmediateState(), doModRMState(), doSIBState(), doVex2Of3State(), instReady(), process(), and processOpcode().
|
protected |
Definition at line 245 of file decoder.hh.
Referenced by decode(), and setM5Reg().
|
staticprivate |
Definition at line 74 of file decoder.hh.
Referenced by fetchRomMicroop().
|
protected |
Definition at line 105 of file decoder.hh.
Referenced by Decoder(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 101 of file decoder.hh.
Referenced by consumeByte(), consumeBytes(), decode(), doFromCacheState(), doResetState(), getImmediate(), getNextByte(), moreBytes(), updateNPC(), and updateOffsetState().
|
protected |
Definition at line 99 of file decoder.hh.
Referenced by decode(), doFromCacheState(), doResetState(), and updateNPC().
|
protected |
Definition at line 178 of file decoder.hh.
Referenced by doFromCacheState(), moreBytes(), needMoreBytes(), process(), and updateOffsetState().
|
staticprivate |
Definition at line 61 of file decoder.hh.
|
staticprivate |
Definition at line 59 of file decoder.hh.
Referenced by processOpcode().
|
protected |
Definition at line 111 of file decoder.hh.
Referenced by processOpcode(), setM5Reg(), and takeOverFrom().
|
protected |
Definition at line 210 of file decoder.hh.
|
protected |
Definition at line 106 of file decoder.hh.
Referenced by Decoder(), setM5Reg(), and takeOverFrom().
|
staticprivate |
Definition at line 63 of file decoder.hh.
Referenced by doOneByteOpcodeState(), doVex2Of3State(), and doVex3Of3State().
|
staticprivate |
Definition at line 65 of file decoder.hh.
Referenced by doThreeByte0F38OpcodeState(), and doVexOpcodeState().
|
staticprivate |
Definition at line 66 of file decoder.hh.
Referenced by doThreeByte0F3AOpcodeState(), and doVexOpcodeState().
|
staticprivate |
Definition at line 64 of file decoder.hh.
Referenced by doTwoByteOpcodeState(), and doVexOpcodeState().