Go to the documentation of this file.
47 #include "config/the_isa.hh"
49 #include "debug/Context.hh"
50 #include "debug/Quiesce.hh"
52 #include "params/BaseCPU.hh"
61 const auto ®Classes =
one->getIsaPtr()->regClasses();
63 DPRINTF(Context,
"Comparing thread contexts\n");
70 panic(
"Int reg idx %d doesn't match, one: %#x, two: %#x",
79 panic(
"Float reg idx %d doesn't match, one: %#x, two: %#x",
89 panic(
"Vec reg idx %d doesn't match, one: %#x, two: %#x",
99 panic(
"Pred reg idx %d doesn't match, one: %#x, two: %#x",
107 panic(
"Misc reg idx %d doesn't match, one: %#x, two: %#x",
116 panic(
"CC reg idx %d doesn't match, one: %#x, two: %#x",
120 panic(
"PC state doesn't match.");
121 int id1 =
one->cpuId();
122 int id2 = two->
cpuId();
124 panic(
"CPU ids don't match, one: %d, two: %d", id1, id2);
129 panic(
"Context ids don't match, one: %d, two: %d", id1, id2);
140 port->sendFunctional(pkt);
164 const size_t numFloats = regClasses.at(
FloatRegClass).size();
165 RegVal floatRegs[numFloats];
166 for (
int i = 0;
i < numFloats; ++
i)
172 const size_t numVecs = regClasses.at(
VecRegClass).size();
174 for (
int i = 0;
i < numVecs; ++
i) {
181 for (
int i = 0;
i < numPreds; ++
i) {
186 const size_t numInts = regClasses.at(
IntRegClass).size();
188 for (
int i = 0;
i < numInts; ++
i)
192 const size_t numCcs = regClasses.at(
CCRegClass).size();
195 for (
int i = 0;
i < numCcs; ++
i)
210 const size_t numFloats = regClasses.at(
FloatRegClass).size();
211 RegVal floatRegs[numFloats];
215 for (
int i = 0;
i < numFloats; ++
i)
218 const size_t numVecs = regClasses.at(
VecRegClass).size();
221 for (
int i = 0;
i < numVecs; ++
i) {
228 for (
int i = 0;
i < numPreds; ++
i) {
232 const size_t numInts = regClasses.at(
IntRegClass).size();
235 for (
int i = 0;
i < numInts; ++
i)
238 const size_t numCcs = regClasses.at(
CCRegClass).size();
242 for (
int i = 0;
i < numCcs; ++
i)
246 std::unique_ptr<PCStateBase> pc_state(tc.
pcState().
clone());
247 pc_state->unserialize(cp);
void unserialize(ThreadContext &tc, CheckpointIn &cp)
static void compare(ThreadContext *one, ThreadContext *two)
function to compare two thread contexts (for debugging)
virtual System * getSystemPtr()=0
VecPredReg::Container VecPredRegContainer
@ Halted
Permanently shut down.
virtual const TheISA::VecPredRegContainer & readVecPredReg(const RegId ®) const =0
virtual RegVal readFloatReg(RegIndex reg_idx) const =0
#define UNSERIALIZE_CONTAINER(member)
@ CCRegClass
Condition-code register.
void quiesce(ContextID id)
virtual const PCStateBase & pcState() const =0
virtual void setStatus(Status new_status)=0
virtual RegVal readCCRegFlat(RegIndex idx) const =0
virtual ContextID contextId() const =0
virtual const TheISA::VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const =0
virtual RegVal readIntRegFlat(RegIndex idx) const =0
Flat register interfaces.
virtual int cpuId() const =0
virtual RegVal readCCReg(RegIndex reg_idx) const =0
void takeOverFrom(ThreadContext &ntc, ThreadContext &otc)
Copy state between thread contexts in preparation for CPU handover.
virtual Status status() const =0
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
void quiesceTick(ContextID id, Tick when)
virtual void setThreadId(int id)=0
@ FloatRegClass
Floating-point register.
virtual const TheISA::VecRegContainer & readVecReg(const RegId ®) const =0
virtual void copyArchRegs(ThreadContext *tc)=0
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
virtual BaseISA * getIsaPtr()=0
ThreadContext is the external interface to all thread state for anything outside of the CPU.
void quiesce()
Quiesce thread context.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
uint64_t Tick
Tick count type.
virtual void setIntRegFlat(RegIndex idx, RegVal val)=0
virtual void setCCRegFlat(RegIndex idx, RegVal val)=0
virtual void setFloatRegFlat(RegIndex idx, RegVal val)=0
const RegClasses & regClasses() const
gem5::VecRegContainer< NumVecElemPerVecReg *sizeof(VecElem)> VecRegContainer
#define SERIALIZE_ARRAY(member, size)
void serialize(const ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
virtual void sendFunctional(PacketPtr pkt)
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
virtual void setContextId(ContextID id)=0
virtual RegVal readIntReg(RegIndex reg_idx) const =0
decltype(std::begin(std::declval< const T & >()), std::end(std::declval< const T & >()), void()) arrayParamOut(CheckpointOut &os, const std::string &name, const T ¶m)
void serialize(CheckpointOut &cp) const override
Serialize an object.
virtual Process * getProcessPtr()=0
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
@ IntRegClass
Integer register.
@ MiscRegClass
Control (misc) register.
#define UNSERIALIZE_ARRAY(member, size)
#define SERIALIZE_CONTAINER(member)
int ContextID
Globally unique thread context ID.
std::ostream CheckpointOut
virtual BaseCPU * getCpuPtr()=0
virtual int threadId() const =0
@ VecRegClass
Vector Register.
virtual void setVecRegFlat(RegIndex idx, const TheISA::VecRegContainer &val)=0
void arrayParamIn(CheckpointIn &cp, const std::string &name, CircleBuf< T > ¶m)
virtual RegVal readFloatRegFlat(RegIndex idx) const =0
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
virtual void setVecPredRegFlat(RegIndex idx, const TheISA::VecPredRegContainer &val)=0
virtual const TheISA::VecRegContainer & readVecRegFlat(RegIndex idx) const =0
virtual PCStateBase * clone() const =0
Register ID: describe an architectural register with its class and index.
#define panic(...)
This implements a cprintf based panic() function.
Generated on Tue Feb 8 2022 11:46:55 for gem5 by doxygen 1.8.17