41 #ifndef __CPU_SIMPLE_EXEC_CONTEXT_HH__ 42 #define __CPU_SIMPLE_EXEC_CONTEXT_HH__ 44 #include "arch/registers.hh" 46 #include "config/the_isa.hh" 168 : cpu(_cpu), thread(_thread), fetchOffset(0), stayAtPC(false),
169 numInst(0), numOp(0), numLoad(0), lastIcacheStall(0), lastDcacheStall(0)
248 template <
typename VecElem>
261 {
return readVecLaneOperand<uint8_t>(
si, idx); }
267 {
return readVecLaneOperand<uint16_t>(
si, idx); }
273 {
return readVecLaneOperand<uint32_t>(
si, idx); }
279 {
return readVecLaneOperand<uint64_t>(
si, idx); }
282 template <
typename LD>
338 numVecPredRegReads++;
347 numVecPredRegWrites++;
357 numVecPredRegWrites++;
439 assert(byte_enable.empty() || byte_enable.size() == size);
440 return cpu->
readMem(addr, data, size, flags, byte_enable);
449 assert(byte_enable.empty() || byte_enable.size() == size);
459 assert(byte_enable.empty() || byte_enable.size() == size);
460 return cpu->
writeMem(data, size, addr, flags, res, byte_enable);
466 return cpu->
amoMem(addr, data, size, flags, std::move(amo_op));
568 #endif // __CPU_EXEC_CONTEXT_HH__ void setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
Sets the bits of a floating point register of single width to a binary value.
virtual Fault amoMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Stats::Scalar numFpAluAccesses
virtual ConstVecLane64 readVec64BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 64bit operand.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::EightByte > &val) override
Write a lane of the destination vector operand.
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
bool isMiscReg() const
true if it is a condition-code physical register.
Stats::Average notIdleFraction
VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
A stat that calculates the per tick average of a value.
Fault readMem(Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Perform an atomic memory read operation.
Stats::Scalar numVecPredRegReads
Vector Register Abstraction This generic class is the model in a particularization of MVC...
bool readPredicate() const
Stats::Scalar numLoadInsts
Stats::Scalar numIntAluAccesses
unsigned readStCondFailures() const override
virtual ConstVecLane16 readVec16BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 16bit operand.
RegVal readCCReg(RegIndex reg_idx) const override
Stats::Vector statExecutedInstType
VecElem readVecElemOperand(const StaticInst *si, int idx) const override
Reads an element of a vector register.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::FourByte > &val) override
Write a lane of the destination vector operand.
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Stats::Scalar numCCRegReads
TheISA::PCState pcState() const override
Stats::Scalar numFpRegWrites
Stats::Scalar numIntRegReads
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
A vector of scalar stats.
Stats::Formula numIdleCycles
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
void setMemAccPredicate(bool val)
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
void setVecElemOperand(const StaticInst *si, int idx, const VecElem val) override
Sets an element of a vector register to a value.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
VecPredRegContainer & getWritableVecPredReg(const RegId ®) override
RegVal readMiscReg(RegIndex misc_reg) override
This is a simple scalar statistic, like a counter.
PCState pcState() const override
const VecPredRegContainer & readVecPredRegOperand(const StaticInst *si, int idx) const override
Predicate registers interface.
VecRegContainer & getWritableVecReg(const RegId ®) override
void setVecPredRegOperand(const StaticInst *si, int idx, const VecPredRegContainer &val) override
Sets a destination predicate register operand to a value.
virtual Fault readMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >())
void armMonitor(ThreadID tid, Addr address)
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 >()) override
For atomic-mode contexts, perform an atomic memory write operation.
bool isCCReg() const
true if it is a condition-code physical register.
VecLaneT< T, true > readVecLane(const RegId ®) const
Vector Register Lane Interfaces.
void setVecElem(const RegId ®, const VecElem &val) override
bool isVecElem() const
true if it is a condition-code physical register.
void setIntReg(RegIndex reg_idx, RegVal val) override
Stats::Scalar icacheStallCycles
virtual ConstVecLane8 readVec8BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 8bit operand.
AddressMonitor * getAddrMonitor() override
void setPredicate(bool val) override
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
void setVecLaneOperandT(const StaticInst *si, int idx, const LD &val)
Write a lane of the destination vector operand.
Stats::Scalar numVecPredRegWrites
void mwaitAtomic(ThreadContext *tc) override
virtual Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
bool readMemAccPredicate()
void setCCReg(RegIndex reg_idx, RegVal val) override
virtual ConstVecLane32 readVec32BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 32bit operand.
RegVal readIntReg(RegIndex reg_idx) const override
void setFloatReg(RegIndex reg_idx, RegVal val) override
Stats::Scalar numPredictedBranches
Number of branches predicted as taken.
const VecRegContainer & readVecRegOperand(const StaticInst *si, int idx) const override
Reads a vector register.
void setMemAccPredicate(bool val) override
Stats::Scalar numVecRegReads
VecLaneT< VecElem, true > readVecLaneOperand(const StaticInst *si, int idx) const
Vector Register Lane Interfaces.
const VecPredRegContainer & readVecPredReg(const RegId ®) const override
Stats::Scalar dcacheStallCycles
Stats::Scalar numVecRegWrites
Stats::Scalar numIntRegWrites
Fault amoMem(Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
For atomic-mode contexts, perform an atomic AMO (a.k.a., Atomic Read-Modify-Write Memory Operation) ...
void setPredicate(bool val)
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseTLB *dtb)
void setMiscReg(RegIndex misc_reg, RegVal val) override
VecRegContainer & getWritableVecRegOperand(const StaticInst *si, int idx) override
Reads a vector register for modification.
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Stats::Scalar numIntInsts
void demapPage(Addr vaddr, uint64_t asn)
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
void setVecRegOperand(const StaticInst *si, int idx, const VecRegContainer &val) override
Sets a vector register to a value.
Stats::Formula numBusyCycles
int64_t Counter
Statistics counter type.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
void pcState(const PCState &val) override
Stats::Scalar numBranches
virtual Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >())
Fault initiateMemAMO(Addr addr, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
For timing-mode contexts, initiate an atomic AMO (atomic read-modify-write memory operation) ...
int threadId() const override
Counter numInst
PER-THREAD STATS.
bool isVecReg() const
true if it is a condition-code physical register.
bool readMemAccPredicate() const override
void setStCondFailures(unsigned sc_failures) override
bool mwait(ThreadID tid, PacketPtr pkt)
bool mwait(PacketPtr pkt) override
Stats::Scalar numCallsReturns
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets an integer register to a value.
Stats::Scalar numFpRegReads
void syscall(Fault *fault) override
Executes a syscall specified by the callnum.
VecReg::Container VecRegContainer
Fault initiateMemRead(Addr addr, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Initiate a timing memory read operation.
Trace::InstRecord * traceData
const VecElem & readVecElem(const RegId ®) const override
Generic predicate register container.
RegVal readFloatReg(RegIndex reg_idx) const override
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Base, ISA-independent static instruction class.
const RegIndex & index() const
Index accessors.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::TwoByte > &val) override
Write a lane of the destination vector operand.
Stats::Scalar numStoreInsts
void setVecPredReg(const RegId ®, const VecPredRegContainer &val) override
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
Stats::Scalar numVecAluAccesses
Stats::Scalar numCCRegWrites
Stats::Formula idleFraction
SimpleExecContext(BaseSimpleCPU *_cpu, SimpleThread *_thread)
Constructor.
Register ID: describe an architectural register with its class and index.
void setMiscReg(int misc_reg, RegVal val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register...
RegVal readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register...
Stats::Scalar numVecInsts
void armMonitor(Addr address) override
virtual Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >())
bool isVecPredReg() const
true if it is a predicate physical register.
void setVecReg(const RegId ®, const VecRegContainer &val) override
RegVal readCCRegOperand(const StaticInst *si, int idx) override
Vector Lane abstraction Another view of a container.
GenericISA::DelaySlotPCState< MachInst > PCState
bool readPredicate() const override
ThreadContext * tcBase() const override
Returns a pointer to the ThreadContext.
std::shared_ptr< FaultBase > Fault
const VecRegContainer & readVecReg(const RegId ®) const override
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
Stats::Scalar numBranchMispred
Number of misprediced branches.
RegVal readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector operand.
void syscall(Fault *fault) override
void setPredicate(bool val)
RegVal readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
Stats::Scalar numCondCtrlInsts