49 #include "config/the_isa.hh" 52 #include "debug/Context.hh" 53 #include "debug/Quiesce.hh" 55 #include "params/BaseCPU.hh" 61 DPRINTF(Context,
"Comparing thread contexts\n");
68 panic(
"Int reg idx %d doesn't match, one: %#x, two: %#x",
77 panic(
"Float reg idx %d doesn't match, one: %#x, two: %#x",
87 panic(
"Vec reg idx %d doesn't match, one: %#x, two: %#x",
97 panic(
"Pred reg idx %d doesn't match, one: %#x, two: %#x",
105 panic(
"Misc reg idx %d doesn't match, one: %#x, two: %#x",
114 panic(
"CC reg idx %d doesn't match, one: %#x, two: %#x",
118 panic(
"PC state doesn't match.");
119 int id1 = one->
cpuId();
120 int id2 = two->
cpuId();
122 panic(
"CPU ids don't match, one: %d, two: %d", id1, id2);
127 panic(
"Context ids don't match, one: %d, two: %d", id1, id2);
151 if (!cpu->
params()->do_quiesce)
158 DPRINTF(Quiesce,
"%s: quiesceTick until %lu\n", cpu->
name(), resume);
243 pcState.unserialize(cp);
266 assert(oqe->tc == &otc);
272 assert(nqe->tc == &ntc);
274 if (oqe->scheduled()) {
275 ncpu->schedule(nqe, oqe->when());
276 ocpu->deschedule(oqe);
#define panic(...)
This implements a cprintf based panic() function.
virtual System * getSystemPtr()=0
const std::string & name()
virtual TheISA::PCState pcState() const =0
virtual RegVal readIntReg(RegIndex reg_idx) const =0
virtual ::Kernel::Statistics * getKernelStats()=0
virtual void setStatus(Status new_status)=0
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
virtual Process * getProcessPtr()=0
virtual const VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const =0
virtual BaseCPU * getCpuPtr()=0
virtual RegVal readCCReg(RegIndex reg_idx) const =0
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Event for timing out quiesce instruction.
virtual const VecRegContainer & readVecReg(const RegId ®) const =0
void quiesce()
Quiesce thread context.
virtual EndQuiesceEvent * getQuiesceEvent()=0
virtual void setContextId(ContextID id)=0
#define SERIALIZE_CONTAINER(member)
virtual const VecPredRegContainer & readVecPredReg(const RegId ®) const =0
virtual RegVal readFloatReg(RegIndex reg_idx) const =0
virtual int cpuId() const =0
::DummyVecPredRegContainer VecPredRegContainer
uint64_t Tick
Tick count type.
::DummyVecRegContainer VecRegContainer
virtual RegVal readCCRegFlat(RegIndex idx) const =0
#define SERIALIZE_ARRAY(member, size)
virtual void suspend()=0
Set the status to Suspended.
void serialize(const ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
virtual const VecRegContainer & readVecRegFlat(RegIndex idx) const =0
virtual void setFloatRegFlat(RegIndex idx, RegVal val)=0
virtual void setThreadId(int id)=0
#define UNSERIALIZE_CONTAINER(member)
void arrayParamOut(CheckpointOut &cp, const std::string &name, const CircleBuf< T > ¶m)
virtual const std::string name() const
virtual void setCCRegFlat(RegIndex idx, RegVal val)=0
#define UNSERIALIZE_ARRAY(member, size)
void reschedule(Event &event, Tick when, bool always=false)
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
std::ostream CheckpointOut
virtual void takeOverFrom(ThreadContext *old_context)=0
virtual void setVecPredRegFlat(RegIndex idx, const VecPredRegContainer &val)=0
static void compare(ThreadContext *one, ThreadContext *two)
function to compare two thread contexts (for debugging)
virtual void copyArchRegs(ThreadContext *tc)=0
GenericISA::SimplePCState< MachInst > PCState
virtual int threadId() const =0
virtual RegVal readIntRegFlat(RegIndex idx) const =0
Flat register interfaces.
virtual ContextID contextId() const =0
virtual Status status() const =0
void unserialize(ThreadContext &tc, CheckpointIn &cp)
void arrayParamIn(CheckpointIn &cp, const std::string &name, CircleBuf< T > ¶m)
virtual void setVecRegFlat(RegIndex idx, const VecRegContainer &val)=0
Register ID: describe an architectural register with its class and index.
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
virtual RegVal readFloatRegFlat(RegIndex idx) const =0
virtual void setIntRegFlat(RegIndex idx, RegVal val)=0
const Params * params() const
int ContextID
Globally unique thread context ID.