gem5
v20.1.0.0
|
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate the state of the CPU model. More...
#include <exec_context.hh>
Public Types | |
typedef TheISA::PCState | PCState |
using | VecRegContainer = TheISA::VecRegContainer |
using | VecElem = TheISA::VecElem |
using | VecPredRegContainer = TheISA::VecPredRegContainer |
Public Member Functions | |
virtual ThreadContext * | tcBase () const =0 |
Returns a pointer to the ThreadContext. More... | |
Integer Register Interfaces | |
virtual RegVal | readIntRegOperand (const StaticInst *si, int idx)=0 |
Reads an integer register. More... | |
virtual void | setIntRegOperand (const StaticInst *si, int idx, RegVal val)=0 |
Sets an integer register to a value. More... | |
Floating Point Register Interfaces | |
virtual RegVal | readFloatRegOperandBits (const StaticInst *si, int idx)=0 |
Reads a floating point register in its binary format, instead of by value. More... | |
virtual void | setFloatRegOperandBits (const StaticInst *si, int idx, RegVal val)=0 |
Sets the bits of a floating point register of single width to a binary value. More... | |
virtual const VecRegContainer & | readVecRegOperand (const StaticInst *si, int idx) const =0 |
Vector Register Interfaces. More... | |
virtual VecRegContainer & | getWritableVecRegOperand (const StaticInst *si, int idx)=0 |
Gets destination vector register operand for modification. More... | |
virtual void | setVecRegOperand (const StaticInst *si, int idx, const VecRegContainer &val)=0 |
Sets a destination vector register operand to a value. More... | |
virtual ConstVecLane8 | readVec8BitLaneOperand (const StaticInst *si, int idx) const =0 |
Vector Register Lane Interfaces. More... | |
virtual ConstVecLane16 | readVec16BitLaneOperand (const StaticInst *si, int idx) const =0 |
Reads source vector 16bit operand. More... | |
virtual ConstVecLane32 | readVec32BitLaneOperand (const StaticInst *si, int idx) const =0 |
Reads source vector 32bit operand. More... | |
virtual ConstVecLane64 | readVec64BitLaneOperand (const StaticInst *si, int idx) const =0 |
Reads source vector 64bit operand. More... | |
virtual void | setVecLaneOperand (const StaticInst *si, int idx, const LaneData< LaneSize::Byte > &val)=0 |
Write a lane of the destination vector operand. More... | |
virtual void | setVecLaneOperand (const StaticInst *si, int idx, const LaneData< LaneSize::TwoByte > &val)=0 |
virtual void | setVecLaneOperand (const StaticInst *si, int idx, const LaneData< LaneSize::FourByte > &val)=0 |
virtual void | setVecLaneOperand (const StaticInst *si, int idx, const LaneData< LaneSize::EightByte > &val)=0 |
virtual VecElem | readVecElemOperand (const StaticInst *si, int idx) const =0 |
Vector Elem Interfaces. More... | |
virtual void | setVecElemOperand (const StaticInst *si, int idx, const VecElem val)=0 |
Sets a vector register to a value. More... | |
virtual const VecPredRegContainer & | readVecPredRegOperand (const StaticInst *si, int idx) const =0 |
Predicate registers interface. More... | |
virtual VecPredRegContainer & | getWritableVecPredRegOperand (const StaticInst *si, int idx)=0 |
Gets destination predicate register operand for modification. More... | |
virtual void | setVecPredRegOperand (const StaticInst *si, int idx, const VecPredRegContainer &val)=0 |
Sets a destination predicate register operand to a value. More... | |
Condition Code Registers | |
virtual RegVal | readCCRegOperand (const StaticInst *si, int idx)=0 |
virtual void | setCCRegOperand (const StaticInst *si, int idx, RegVal val)=0 |
Misc Register Interfaces | |
virtual RegVal | readMiscRegOperand (const StaticInst *si, int idx)=0 |
virtual void | setMiscRegOperand (const StaticInst *si, int idx, RegVal val)=0 |
virtual RegVal | readMiscReg (int misc_reg)=0 |
Reads a miscellaneous register, handling any architectural side effects due to reading that register. More... | |
virtual void | setMiscReg (int misc_reg, RegVal val)=0 |
Sets a miscellaneous register, handling any architectural side effects due to writing that register. More... | |
PC Control | |
virtual PCState | pcState () const =0 |
virtual void | pcState (const PCState &val)=0 |
Memory Interface | |
virtual Fault | readMem (Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) |
Perform an atomic memory read operation. More... | |
virtual Fault | initiateMemRead (Addr addr, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) |
Initiate a timing memory read operation. More... | |
virtual Fault | initiateHtmCmd (Request::Flags flags)=0 |
Initiate an HTM command, e.g. More... | |
virtual Fault | writeMem (uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >())=0 |
For atomic-mode contexts, perform an atomic memory write operation. More... | |
virtual Fault | amoMem (Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) |
For atomic-mode contexts, perform an atomic AMO (a.k.a., Atomic Read-Modify-Write Memory Operation) More... | |
virtual Fault | initiateMemAMO (Addr addr, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) |
For timing-mode contexts, initiate an atomic AMO (atomic read-modify-write memory operation) More... | |
virtual void | setStCondFailures (unsigned int sc_failures)=0 |
Sets the number of consecutive store conditional failures. More... | |
virtual unsigned int | readStCondFailures () const =0 |
Returns the number of consecutive store conditional failures. More... | |
SysCall Emulation Interfaces | |
virtual void | syscall ()=0 |
Executes a syscall. More... | |
ARM-Specific Interfaces | |
virtual bool | readPredicate () const =0 |
virtual void | setPredicate (bool val)=0 |
virtual bool | readMemAccPredicate () const =0 |
virtual void | setMemAccPredicate (bool val)=0 |
virtual uint64_t | newHtmTransactionUid () const =0 |
virtual uint64_t | getHtmTransactionUid () const =0 |
virtual bool | inHtmTransactionalState () const =0 |
virtual uint64_t | getHtmTransactionalDepth () const =0 |
X86-Specific Interfaces | |
virtual void | demapPage (Addr vaddr, uint64_t asn)=0 |
Invalidate a page in the DTLB and ITLB. More... | |
virtual void | armMonitor (Addr address)=0 |
virtual bool | mwait (PacketPtr pkt)=0 |
virtual void | mwaitAtomic (ThreadContext *tc)=0 |
virtual AddressMonitor * | getAddrMonitor ()=0 |
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate the state of the CPU model.
Register accessor methods in this class typically provide the index of the instruction's operand (e.g., 0 or 1), not the architectural register index, to simplify the implementation of register renaming. The architectural register index can be found by indexing into the instruction's own operand index table.
Definition at line 70 of file exec_context.hh.
typedef TheISA::PCState ExecContext::PCState |
Definition at line 72 of file exec_context.hh.
using ExecContext::VecElem = TheISA::VecElem |
Definition at line 75 of file exec_context.hh.
using ExecContext::VecPredRegContainer = TheISA::VecPredRegContainer |
Definition at line 76 of file exec_context.hh.
using ExecContext::VecRegContainer = TheISA::VecRegContainer |
Definition at line 74 of file exec_context.hh.
|
inlinevirtual |
For atomic-mode contexts, perform an atomic AMO (a.k.a., Atomic Read-Modify-Write Memory Operation)
Reimplemented in SimpleExecContext.
Definition at line 273 of file exec_context.hh.
References panic.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Invalidate a page in the DTLB and ITLB.
Implemented in SimpleExecContext, CheckerCPU, Minor::ExecContext, and BaseDynInst< Impl >.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Gets destination predicate register operand for modification.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Gets destination vector register operand for modification.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Initiate an HTM command, e.g.
tell Ruby we're starting/stopping a transaction
Implemented in SimpleExecContext, CheckerCPU, BaseDynInst< Impl >, and Minor::ExecContext.
|
inlinevirtual |
For timing-mode contexts, initiate an atomic AMO (atomic read-modify-write memory operation)
Reimplemented in SimpleExecContext, and Minor::ExecContext.
Definition at line 284 of file exec_context.hh.
References panic.
|
inlinevirtual |
Initiate a timing memory read operation.
Must be overridden for exec contexts that support timing memory mode. Not pure virtual since exec contexts that only support atomic memory mode need not override (though in that case this function should never be called).
Reimplemented in SimpleExecContext, and Minor::ExecContext.
Definition at line 248 of file exec_context.hh.
References panic.
Referenced by X86ISA::initiateMemRead().
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
Referenced by DecoderFaultInst::execute(), DebugStep::execute(), ArmISA::ArmStaticInst::readPC(), ArmISA::ArmStaticInst::setAIWNextPC(), ArmISA::ArmStaticInst::setIWNextPC(), and ArmISA::ArmStaticInst::setNextPC().
|
pure virtual |
Implemented in BaseDynInst< Impl >, CheckerCPU, Minor::ExecContext, and SimpleExecContext.
|
pure virtual |
Implemented in Minor::ExecContext, BaseO3DynInst< Impl >, SimpleExecContext, and CheckerCPU.
|
pure virtual |
Reads a floating point register in its binary format, instead of by value.
Implemented in BaseO3DynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
|
pure virtual |
Reads an integer register.
Implemented in BaseO3DynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
|
inlinevirtual |
Perform an atomic memory read operation.
Must be overridden for exec contexts that support atomic memory mode. Not pure virtual since exec contexts that only support timing memory mode need not override (though in that case this function should never be called).
Reimplemented in SimpleExecContext.
Definition at line 234 of file exec_context.hh.
References panic.
Referenced by X86ISA::readMemAtomic(), and X86ISA::readPackedMemAtomic().
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Reads a miscellaneous register, handling any architectural side effects due to reading that register.
Implemented in CheckerCPU, SimpleExecContext, Minor::ExecContext, and BaseO3DynInst< Impl >.
|
pure virtual |
Implemented in CheckerCPU, Minor::ExecContext, SimpleExecContext, and BaseO3DynInst< Impl >.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Returns the number of consecutive store conditional failures.
Implemented in BaseDynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
|
pure virtual |
Reads source vector 16bit operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Reads source vector 32bit operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Reads source vector 64bit operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Vector Register Lane Interfaces.
Reads source vector 8bit operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Vector Elem Interfaces.
Reads an element of a vector register.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Predicate registers interface.
Reads source predicate register operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Vector Register Interfaces.
Reads source vector register operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, Minor::ExecContext, BaseO3DynInst< Impl >, CheckerCPU, and SimpleExecContext.
|
pure virtual |
Sets the bits of a floating point register of single width to a binary value.
Implemented in BaseDynInst< Impl >, BaseO3DynInst< Impl >, CheckerCPU, Minor::ExecContext, and SimpleExecContext.
|
pure virtual |
Sets an integer register to a value.
Implemented in BaseDynInst< Impl >, BaseO3DynInst< Impl >, CheckerCPU, Minor::ExecContext, and SimpleExecContext.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Sets a miscellaneous register, handling any architectural side effects due to writing that register.
Implemented in CheckerCPU, SimpleExecContext, Minor::ExecContext, and BaseO3DynInst< Impl >.
|
pure virtual |
Implemented in CheckerCPU, Minor::ExecContext, SimpleExecContext, and BaseO3DynInst< Impl >.
|
pure virtual |
Implemented in BaseDynInst< Impl >, SimpleExecContext, CheckerCPU, and Minor::ExecContext.
|
pure virtual |
Sets the number of consecutive store conditional failures.
Implemented in Minor::ExecContext, BaseDynInst< Impl >, CheckerCPU, and SimpleExecContext.
|
pure virtual |
Sets a vector register to a value.
Implemented in BaseDynInst< Impl >, BaseO3DynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
|
pure virtual |
Write a lane of the destination vector operand.
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Implemented in BaseO3DynInst< Impl >, SimpleExecContext, Minor::ExecContext, and CheckerCPU.
|
pure virtual |
Sets a destination predicate register operand to a value.
Implemented in BaseDynInst< Impl >, BaseO3DynInst< Impl >, CheckerCPU, and SimpleExecContext.
|
pure virtual |
Sets a destination vector register operand to a value.
Implemented in BaseDynInst< Impl >, BaseO3DynInst< Impl >, CheckerCPU, and SimpleExecContext.
|
pure virtual |
Executes a syscall.
Implemented in CheckerCPU, SimpleExecContext, Minor::ExecContext, and BaseO3DynInst< Impl >.
|
pure virtual |
Returns a pointer to the ThreadContext.
Implemented in BaseDynInst< Impl >, CheckerCPU, SimpleExecContext, and Minor::ExecContext.
Referenced by DebugStep::execute(), MiscRegImplDefined64::execute(), McrMrcMiscInst::execute(), McrMrcImplDefined::execute(), MipsISA::readRegOtherThread(), MipsISA::setRegOtherThread(), and ArmISA::ArmStaticInst::softwareBreakpoint32().
|
pure virtual |
For atomic-mode contexts, perform an atomic memory write operation.
For timing-mode contexts, initiate a timing memory write operation.
Implemented in SimpleExecContext, and Minor::ExecContext.
Referenced by X86ISA::writeMemAtomic(), X86ISA::writeMemTiming(), and X86ISA::writePackedMem().