44 #ifndef __CPU_THREAD_CONTEXT_HH__
45 #define __CPU_THREAD_CONTEXT_HH__
50 #include "arch/registers.hh"
51 #include "arch/types.hh"
53 #include "config/the_isa.hh"
124 virtual int cpuId()
const = 0;
126 virtual uint32_t
socketId()
const = 0;
177 virtual void halt() = 0;
232 pc_state.setNPC(val);
277 virtual void syscall(int64_t callnum,
Fault *fault) = 0;
282 virtual int exit() {
return 1; };
361 {
return actualTC->getKernelStats(); }
397 {
actualTC->takeOverFrom(oldContext); }
418 {
return actualTC->readIntReg(reg_idx); }
421 {
return actualTC->readFloatReg(reg_idx); }
424 {
return actualTC->readFloatRegBits(reg_idx); }
427 {
return actualTC->readCCReg(reg_idx); }
430 {
actualTC->setIntReg(reg_idx, val); }
433 {
actualTC->setFloatReg(reg_idx, val); }
436 {
actualTC->setFloatRegBits(reg_idx, val); }
439 {
actualTC->setCCReg(reg_idx, val); }
457 {
return actualTC->readMiscRegNoEffect(misc_reg); }
460 {
return actualTC->readMiscReg(misc_reg); }
463 {
return actualTC->setMiscRegNoEffect(misc_reg, val); }
466 {
return actualTC->setMiscReg(misc_reg, val); }
469 {
return actualTC->flattenIntIndex(reg); }
472 {
return actualTC->flattenFloatIndex(reg); }
475 {
return actualTC->flattenCCIndex(reg); }
478 {
return actualTC->flattenMiscIndex(reg); }
481 {
return actualTC->readStCondFailures(); }
484 {
actualTC->setStCondFailures(sc_failures); }
487 {
actualTC->syscall(callnum, fault); }
492 {
return actualTC->readIntRegFlat(idx); }
495 {
actualTC->setIntRegFlat(idx, val); }
498 {
return actualTC->readFloatRegFlat(idx); }
501 {
actualTC->setFloatRegFlat(idx, val); }
504 {
return actualTC->readFloatRegBitsFlat(idx); }
507 {
actualTC->setFloatRegBitsFlat(idx, val); }
510 {
return actualTC->readCCRegFlat(idx); }
513 {
actualTC->setCCRegFlat(idx, val); }
A TranslatingPortProxy in FS mode translates a virtual address to a physical address and then calls t...
virtual void syscall(int64_t callnum, Fault *fault)=0
virtual void halt()=0
Set the status to Halted.
virtual System * getSystemPtr()=0
virtual Addr instAddr()=0
void setCCRegFlat(int idx, CCReg val)
virtual TheISA::Decoder * getDecoderPtr()=0
const std::string & name()
void copyArchRegs(ThreadContext *tc)
void setFloatRegFlat(int idx, FloatReg val)
virtual void profileClear()=0
virtual CCReg readCCReg(int reg_idx)=0
virtual void setFloatRegFlat(int idx, FloatReg val)=0
virtual void setFloatRegBitsFlat(int idx, FloatRegBits val)=0
ProxyThreadContext class that provides a way to implement a ThreadContext without having to derive fr...
TheISA::TLB * getDTBPtr()
virtual void setStatus(Status new_status)=0
int flattenMiscIndex(int reg)
uint64_t readIntReg(int reg_idx)
int flattenIntIndex(int reg)
TheISA::PCState pcState()
virtual void setRegOtherThread(int misc_reg, const MiscReg &val, ThreadID tid)
virtual uint64_t readIntRegFlat(int idx)=0
Flat register interfaces.
void setFloatReg(int reg_idx, FloatReg val)
virtual MiscReg readMiscRegNoEffect(int misc_reg) const =0
virtual Counter readFuncExeInst()=0
void setIntReg(int reg_idx, uint64_t val)
void setProcessPtr(Process *p)
virtual FloatRegBits readFloatRegBitsFlat(int idx)=0
virtual void setMiscReg(int misc_reg, const MiscReg &val)=0
virtual Process * getProcessPtr()=0
virtual void setIntRegFlat(int idx, uint64_t val)=0
virtual void setIntReg(int reg_idx, uint64_t val)=0
void regStats(const std::string &name)
virtual BaseCPU * getCpuPtr()=0
void setStatus(Status new_status)
virtual FloatRegBits readFloatRegBits(int reg_idx)=0
virtual TheISA::PCState pcState()=0
virtual void regStats(const std::string &name)=0
TheISA::Kernel::Statistics * getKernelStats()
virtual Tick readLastSuspend()=0
ThreadContext is the external interface to all thread state for anything outside of the CPU...
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
virtual int flattenFloatIndex(int reg)=0
Event for timing out quiesce instruction.
unsigned readStCondFailures()
void setPredicate(bool val)
void quiesce()
Quiesce thread context.
virtual CCReg readCCRegFlat(int idx)=0
void setContextId(int id)
virtual void setFloatRegBits(int reg_idx, FloatRegBits val)=0
virtual EndQuiesceEvent * getQuiesceEvent()=0
CCReg readCCReg(int reg_idx)
virtual void setCCReg(int reg_idx, CCReg val)=0
ProxyThreadContext(TC *actual_tc)
virtual PortProxy & getPhysProxy()=0
virtual int flattenMiscIndex(int reg)=0
void setFloatRegBits(int reg_idx, FloatRegBits val)
virtual uint64_t readIntReg(int reg_idx)=0
void quiesce()
Quiesce thread context.
virtual int cpuId() const =0
virtual void setProcessPtr(Process *p)=0
FloatReg readFloatRegFlat(int idx)
virtual void pcStateNoRecord(const TheISA::PCState &val)=0
uint64_t Tick
Tick count type.
TheISA::FloatRegBits FloatRegBits
virtual TheISA::TLB * getDTBPtr()=0
Counter readFuncExeInst()
virtual unsigned readStCondFailures()=0
void setFloatRegBitsFlat(int idx, FloatRegBits val)
int flattenCCIndex(int reg)
CCReg readCCRegFlat(int idx)
virtual Addr nextInstAddr()=0
void syscall(int64_t callnum, Fault *fault)
PortProxy & getPhysProxy()
virtual void suspend()=0
Set the status to Suspended.
EndQuiesceEvent * getQuiesceEvent()
void suspend()
Set the status to Suspended.
virtual void setThreadId(int id)=0
virtual SETranslatingPortProxy & getMemProxy()=0
virtual MicroPC microPC()=0
virtual int flattenIntIndex(int reg)=0
TheISA::FloatReg FloatReg
virtual void activate()=0
Set the status to Active.
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
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.
uint64_t readIntRegFlat(int idx)
Flat register interfaces.
int64_t Counter
Statistics counter type.
FloatReg readFloatReg(int reg_idx)
virtual void setCCRegFlat(int idx, CCReg val)=0
CheckerCPU * getCheckerCpuPtr()
virtual int flattenCCIndex(int reg)=0
uint32_t socketId() const
Process * getProcessPtr()
virtual void profileSample()=0
virtual MiscReg readMiscReg(int misc_reg)=0
void serialize(ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
This object is a proxy for a structural port, to be used for debug accesses.
int16_t ThreadID
Thread index/ID type.
virtual FSTranslatingPortProxy & getVirtProxy()=0
void halt()
Set the status to Halted.
virtual CheckerCPU * getCheckerCpuPtr()=0
virtual FloatReg readFloatRegFlat(int idx)=0
virtual FloatReg readFloatReg(int reg_idx)=0
void setStCondFailures(unsigned sc_failures)
virtual void setContextId(int id)=0
std::ostream CheckpointOut
void pcStateNoRecord(const TheISA::PCState &val)
virtual void takeOverFrom(ThreadContext *old_context)=0
FSTranslatingPortProxy & getVirtProxy()
MiscReg readMiscReg(int misc_reg)
static void compare(ThreadContext *one, ThreadContext *two)
function to compare two thread contexts (for debugging)
virtual void copyArchRegs(ThreadContext *tc)=0
void takeOverFrom(ThreadContext &new_tc, ThreadContext &old_tc)
Copy state between thread contexts in preparation for CPU handover.
GenericISA::SimplePCState< MachInst > PCState
FloatRegBits readFloatRegBitsFlat(int idx)
virtual int threadId() const =0
virtual int contextId() const =0
virtual Tick readLastActivate()=0
virtual uint32_t socketId() const =0
TheISA::Decoder * getDecoderPtr()
virtual Status status() const =0
void setIntRegFlat(int idx, uint64_t val)
virtual void setFloatReg(int reg_idx, FloatReg val)=0
virtual void clearArchRegs()=0
TheISA::TLB * getITBPtr()
virtual void setStCondFailures(unsigned sc_failures)=0
void pcState(const TheISA::PCState &val)
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
MiscReg readMiscRegNoEffect(int misc_reg) const
SETranslatingPortProxy & getMemProxy()
void setMiscReg(int misc_reg, const MiscReg &val)
virtual void setMiscRegNoEffect(int misc_reg, const MiscReg &val)=0
TheISA::MachInst MachInst
virtual void initMemProxies(ThreadContext *tc)=0
Initialise the physical and virtual port proxies and tie them to the data port of the CPU...
void setCCReg(int reg_idx, CCReg val)
std::shared_ptr< FaultBase > Fault
void setMiscRegNoEffect(int misc_reg, const MiscReg &val)
FloatRegBits readFloatRegBits(int reg_idx)
virtual uint64_t readRegOtherThread(int misc_reg, ThreadID tid)
void unserialize(ThreadContext &tc, CheckpointIn &cp)
virtual void dumpFuncProfile()=0
virtual TheISA::TLB * getITBPtr()=0
void takeOverFrom(ThreadContext *oldContext)
int flattenFloatIndex(int reg)
void activate()
Set the status to Active.
virtual TheISA::Kernel::Statistics * getKernelStats()=0