44 #ifndef __CPU_CHECKER_THREAD_CONTEXT_HH__ 45 #define __CPU_CHECKER_THREAD_CONTEXT_HH__ 47 #include "arch/types.hh" 48 #include "config/the_isa.hh" 52 #include "debug/Checker.hh" 76 : actualTC(actual_tc), checkerTC(checker_cpu->thread),
77 checkerCPU(checker_cpu)
93 bool remove(
PCEvent *
e)
override {
return actualTC->remove(
e); }
98 actualTC->scheduleInstCountEvent(event, count);
103 actualTC->descheduleInstCountEvent(event);
108 return actualTC->getCurrentInstCount();
113 uint32_t
socketId()
const override {
return actualTC->socketId(); }
115 int cpuId()
const override {
return actualTC->cpuId(); }
122 actualTC->setContextId(
id);
127 int threadId()
const override {
return actualTC->threadId(); }
132 actualTC->setThreadId(
id);
150 return actualTC->getDecoderPtr();
158 return actualTC->getKernelStats();
170 return actualTC->getVirtProxy();
176 actualTC->initMemProxies(tc);
182 actualTC->connectMemPorts(tc);
189 return actualTC->syscall(fault);
197 actualTC->setStatus(new_status);
205 void suspend()
override { actualTC->suspend(); }
208 void halt()
override { actualTC->halt(); }
215 actualTC->takeOverFrom(oldContext);
222 actualTC->regStats(name);
229 return actualTC->getQuiesceEvent();
242 actualTC->copyArchRegs(tc);
249 actualTC->clearArchRegs();
259 return actualTC->readIntReg(reg_idx);
265 return actualTC->readFloatReg(reg_idx);
271 return actualTC->readVecReg(reg);
280 return actualTC->getWritableVecReg(reg);
289 return actualTC->readVec8BitLaneReg(reg);
296 return actualTC->readVec16BitLaneReg(reg);
303 return actualTC->readVec32BitLaneReg(reg);
310 return actualTC->readVec64BitLaneReg(reg);
318 return actualTC->setVecLane(reg, val);
324 return actualTC->setVecLane(reg, val);
330 return actualTC->setVecLane(reg, val);
336 return actualTC->setVecLane(reg, val);
343 return actualTC->readVecElem(reg);
349 return actualTC->readVecPredReg(reg);
355 return actualTC->getWritableVecPredReg(reg);
361 return actualTC->readCCReg(reg_idx);
367 actualTC->setIntReg(reg_idx, val);
374 actualTC->setFloatReg(reg_idx, val);
381 actualTC->setVecReg(reg, val);
388 actualTC->setVecElem(reg, val);
395 actualTC->setVecPredReg(reg, val);
402 actualTC->setCCReg(reg_idx, val);
417 return actualTC->pcState(val);
424 actualTC->setNPC(val);
430 return actualTC->pcState(val);
445 return actualTC->readMiscRegNoEffect(misc_reg);
451 return actualTC->readMiscReg(misc_reg);
457 DPRINTF(
Checker,
"Setting misc reg with no effect: %d to both Checker" 458 " and O3..\n", misc_reg);
460 actualTC->setMiscRegNoEffect(misc_reg, val);
466 DPRINTF(
Checker,
"Setting misc reg with effect: %d to both Checker" 467 " and O3..\n", misc_reg);
469 actualTC->setMiscReg(misc_reg, val);
475 return actualTC->flattenRegId(regId);
481 return actualTC->readStCondFailures();
487 actualTC->setStCondFailures(sc_failures);
493 return actualTC->readFuncExeInst();
499 return actualTC->readIntRegFlat(idx);
505 actualTC->setIntRegFlat(idx, val);
511 return actualTC->readFloatRegFlat(idx);
517 actualTC->setFloatRegFlat(idx, val);
523 return actualTC->readVecRegFlat(idx);
532 return actualTC->getWritableVecRegFlat(idx);
538 actualTC->setVecRegFlat(idx, val);
544 return actualTC->readVecElemFlat(idx, elem_idx);
551 actualTC->setVecElemFlat(idx, elem_idx, val);
557 return actualTC->readVecPredRegFlat(idx);
563 return actualTC->getWritableVecPredRegFlat(idx);
569 actualTC->setVecPredRegFlat(idx, val);
575 return actualTC->readCCRegFlat(idx);
581 actualTC->setCCRegFlat(idx, val);
585 #endif // __CPU_CHECKER_EXEC_CONTEXT_HH__
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::EightByte > &val) override
CheckerCPU * checkerCPU
Pointer to the checker CPU.
void setCCRegFlat(RegIndex idx, RegVal val) override
::Kernel::Statistics * getKernelStats() override
RegVal readCCRegFlat(RegIndex idx) const override
void setIntRegFlat(RegIndex idx, RegVal val) override
const std::string & name()
Tick readLastSuspend() override
void pcState(const TheISA::PCState &val) override
Sets this thread's PC state.
Vector Register Abstraction This generic class is the model in a particularization of MVC...
uint32_t socketId() const override
const VecRegContainer & readVecRegFlat(RegIndex idx) const override
RegVal readFloatReg(RegIndex reg_idx) const override
ContextID contextId() const override
void setThreadId(int id) override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::TwoByte > &val) override
Addr instAddr() const override
Reads this thread's PC.
void setMiscReg(RegIndex misc_reg, RegVal val) override
RegVal readIntReg(RegIndex reg_idx) const override
void setStCondFailures(unsigned sc_failures) override
void clearArchRegs() override
TheISA::PCState pcState() const override
void setProcessPtr(Process *p) override
TheISA::Decoder * getDecoderPtr() override
bool schedule(PCEvent *e) override
void takeOverFrom(ThreadContext *oldContext) override
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
void setStatus(Status newStatus) override
EndQuiesceEvent * getQuiesceEvent() override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
void setContextId(ContextID id) override
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Event for timing out quiesce instruction.
TC * actualTC
The main CPU's ThreadContext, or class that implements the ThreadContext interface.
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
void suspend() override
Set the status to Suspended.
const VecRegContainer & readVecReg(const RegId ®) const override
void setVecElem(const RegId ®, const VecElem &val) override
void setCCReg(RegIndex reg_idx, RegVal val) override
Derived ThreadContext class for use with the Checker.
void setIntReg(RegIndex reg_idx, RegVal val) override
void setVecPredReg(const RegId ®, const VecPredRegContainer &val) override
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
BaseCPU * getCpuPtr() override
VecRegContainer & getWritableVecReg(const RegId ®) override
Read vector register for modification, hierarchical indexing.
BaseTLB * getDTBPtr() override
Tick readLastActivate() override
void setCCReg(RegIndex reg_idx, RegVal val) override
void descheduleInstCountEvent(Event *event) override
System * getSystemPtr() override
void setIntReg(RegIndex reg_idx, RegVal val) override
void setFloatReg(RegIndex reg_idx, RegVal val) override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::FourByte > &val) override
void syscall(Fault *fault) override
Executes a syscall in SE mode.
uint64_t Tick
Tick count type.
PortProxy & getPhysProxy() override
MicroPC microPC() const override
Reads this thread's next PC.
PortProxy & getVirtProxy() override
void setFloatReg(RegIndex reg_idx, RegVal val) override
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
VecPredRegContainer & getWritableVecPredReg(const RegId ®) override
void copyArchRegs(ThreadContext *tc) override
void profileClear() override
void setMiscReg(RegIndex misc_reg, RegVal val) override
void regStats(const std::string &name) override
RegId flattenRegId(const RegId ®Id) const override
VecPredRegContainer & getWritableVecPredRegFlat(RegIndex idx) override
CheckerCPU * getCheckerCpuPtr() override
void clearArchRegs() override
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void dumpFuncProfile() override
RegVal readFloatRegFlat(RegIndex idx) const override
int64_t Counter
Statistics counter type.
int cpuId() const override
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
ConstVecLane32 readVec32BitLaneReg(const RegId ®) const override
Reads source vector 32bit operand.
CheckerThreadContext(TC *actual_tc, CheckerCPU *checker_cpu)
const VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const override
This object is a proxy for a port or other object which implements the functional response protocol...
void setThreadId(int id) override
void setStatus(Status new_status) override
void setVecRegFlat(RegIndex idx, const VecRegContainer &val) override
void setVecReg(const RegId ®, const VecRegContainer &val) override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
void setContextId(ContextID id) override
unsigned readStCondFailures() const override
RegVal readCCReg(RegIndex reg_idx) const override
TheISA::PCState pcState() const override
Reads this thread's PC state.
uint16_t ElemIndex
Logical vector register elem index type.
void setFloatRegFlat(RegIndex idx, RegVal val) override
void copyState(ThreadContext *oldContext)
GenericISA::SimplePCState< MachInst > PCState
int threadId() const override
Returns this thread's ID number.
void regStats(const std::string &name) override
Generic predicate register container.
void scheduleInstCountEvent(Event *event, Tick count) override
void copyArchRegs(ThreadContext *tc) override
VecRegContainer & getWritableVecRegFlat(RegIndex idx) override
Read vector register for modification, flat indexing.
void setVecPredReg(const RegId ®, const VecPredRegContainer &val) override
Register ID: describe an architectural register with its class and index.
void pcStateNoRecord(const TheISA::PCState &val) override
Tick getCurrentInstCount() override
SimpleThread * checkerTC
The checker's own SimpleThread.
void recordPCChange(const TheISA::PCState &val)
void profileSample() override
void activate() override
Set the status to Active.
void setVecPredRegFlat(RegIndex idx, const VecPredRegContainer &val) override
BaseISA * getIsaPtr() override
void setVecElemFlat(RegIndex idx, const ElemIndex &elem_idx, const VecElem &val) override
ConstVecLane16 readVec16BitLaneReg(const RegId ®) const override
Reads source vector 16bit operand.
RegVal readMiscReg(RegIndex misc_reg) override
void setVecReg(const RegId ®, const VecRegContainer &val) override
void initMemProxies(ThreadContext *tc) override
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
Vector Lane abstraction Another view of a container.
ConstVecLane64 readVec64BitLaneReg(const RegId ®) const override
Reads source vector 64bit operand.
Process * getProcessPtr() override
const VecElem & readVecElemFlat(RegIndex idx, const ElemIndex &elem_idx) const override
Status status() const override
void halt() override
Set the status to Halted.
std::shared_ptr< FaultBase > Fault
ConstVecLane8 readVec8BitLaneReg(const RegId ®) const override
Vector Register Lane Interfaces.
int ContextID
Globally unique thread context ID.
Counter readFuncExeInst() const override
BaseTLB * getITBPtr() override
Addr nextInstAddr() const override
Reads this thread's next PC.
void setVecElem(const RegId ®, const VecElem &val) override
const VecElem & readVecElem(const RegId ®) const override
const VecPredRegContainer & readVecPredReg(const RegId ®) const override
void connectMemPorts(ThreadContext *tc)