Go to the documentation of this file.
42 #ifndef __CPU_SIMPLE_THREAD_HH__
43 #define __CPU_SIMPLE_THREAD_HH__
52 #include "arch/isa.hh"
53 #include "arch/vecregs.hh"
55 #include "config/the_isa.hh"
58 #include "debug/CCRegs.hh"
59 #include "debug/FloatRegs.hh"
60 #include "debug/IntRegs.hh"
61 #include "debug/VecPredRegs.hh"
62 #include "debug/VecRegs.hh"
233 void halt()
override;
269 int flatIndex =
isa->flattenIntIndex(reg_idx);
270 assert(flatIndex <
intRegs.size());
272 DPRINTF(IntRegs,
"Reading int reg %d (%d) as %#x.\n",
273 reg_idx, flatIndex, regVal);
280 int flatIndex =
isa->flattenFloatIndex(reg_idx);
283 DPRINTF(FloatRegs,
"Reading float reg %d (%d) bits as %#x.\n",
284 reg_idx, flatIndex, regVal);
291 int flatIndex =
isa->flattenVecIndex(
reg.index());
292 assert(flatIndex <
vecRegs.size());
294 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s.\n",
295 reg.index(), flatIndex, regVal);
302 int flatIndex =
isa->flattenVecIndex(
reg.index());
303 assert(flatIndex <
vecRegs.size());
305 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s for modify.\n",
306 reg.index(), flatIndex, regVal);
313 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
314 assert(flatIndex <
vecRegs.size());
316 DPRINTF(VecRegs,
"Reading element %d of vector reg %d (%d) as"
317 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex, regVal);
324 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
328 DPRINTF(VecPredRegs,
"Reading predicate reg %d (%d) as %s.\n",
329 reg.index(), flatIndex, regVal);
336 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
341 "Reading predicate reg %d (%d) as %s for modify.\n",
342 reg.index(), flatIndex, regVal);
349 int flatIndex =
isa->flattenCCIndex(reg_idx);
350 assert(0 <= flatIndex);
351 assert(flatIndex <
ccRegs.size());
353 DPRINTF(CCRegs,
"Reading CC reg %d (%d) as %#x.\n",
354 reg_idx, flatIndex, regVal);
361 int flatIndex =
isa->flattenIntIndex(reg_idx);
362 assert(flatIndex <
intRegs.size());
363 DPRINTF(IntRegs,
"Setting int reg %d (%d) to %#x.\n",
364 reg_idx, flatIndex,
val);
371 int flatIndex =
isa->flattenFloatIndex(reg_idx);
377 DPRINTF(FloatRegs,
"Setting float reg %d (%d) bits to %#x.\n",
378 reg_idx, flatIndex,
val);
384 int flatIndex =
isa->flattenVecIndex(
reg.index());
385 assert(flatIndex <
vecRegs.size());
387 DPRINTF(VecRegs,
"Setting vector reg %d (%d) to %s.\n",
388 reg.index(), flatIndex,
val);
394 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
395 assert(flatIndex <
vecRegs.size());
397 DPRINTF(VecRegs,
"Setting element %d of vector reg %d (%d) to"
398 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex,
val);
405 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
408 DPRINTF(VecPredRegs,
"Setting predicate reg %d (%d) to %s.\n",
409 reg.index(), flatIndex,
val);
415 int flatIndex =
isa->flattenCCIndex(reg_idx);
416 assert(flatIndex <
ccRegs.size());
417 DPRINTF(CCRegs,
"Setting CC reg %d (%d) to %#x.\n",
418 reg_idx, flatIndex,
val);
437 return isa->readMiscRegNoEffect(misc_reg);
443 return isa->readMiscReg(misc_reg);
449 return isa->setMiscRegNoEffect(misc_reg,
val);
455 return isa->setMiscReg(misc_reg,
val);
461 return isa->flattenRegId(regId);
565 #endif // __CPU_SIMPLE_THREAD_HH__
RegVal readMiscReg(RegIndex misc_reg) override
constexpr unsigned NumVecElemPerVecReg
RegVal readIntReg(RegIndex reg_idx) const override
std::unique_ptr< BaseHTMCheckpoint > BaseHTMCheckpointPtr
int64_t htmTransactionStops
void setIntReg(RegIndex reg_idx, RegVal val) override
VecPredReg::Container VecPredRegContainer
const TheISA::VecRegContainer & readVecReg(const RegId ®) const override
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, RegVal val) override
Process * getProcessPtr() override
CheckerCPU * getCheckerCpuPtr() override
Struct for holding general thread state that is needed across CPU models.
void copyArchRegs(ThreadContext *tc) override
Tick readLastSuspend() override
void setCCRegFlat(RegIndex idx, RegVal val) override
bool remove(PCEvent *event) override
void setMiscReg(RegIndex misc_reg, RegVal val) override
void setStCondFailures(unsigned sc_failures) override
TheISA::VecRegContainer & getWritableVecRegFlat(RegIndex reg) override
void unserialize(CheckpointIn &cp) override
Unserialize an object.
BaseMMU * getMMUPtr() override
bool schedule(PCEvent *event) override
void setVecReg(const RegId ®, const TheISA::VecRegContainer &val) override
std::vector< RegVal > vecElemRegs
bool remove(PCEvent *e) override
RegVal readCCReg(RegIndex reg_idx) const override
std::string csprintf(const char *format, const Args &...args)
void clearArchRegs() override
void setContextId(ContextID id) override
std::unique_ptr< BaseHTMCheckpoint > _htmCheckpoint
void activate() override
Set the status to Active.
void setVecPredRegFlat(RegIndex reg, const TheISA::VecPredRegContainer &val) override
TheISA::VecPredRegContainer & getWritableVecPredRegFlat(RegIndex reg) override
int64_t htmTransactionStarts
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
void setThreadId(int id) override
RegVal readCCRegFlat(RegIndex idx) const override
void setVecPredReg(const RegId ®, const TheISA::VecPredRegContainer &val) override
InstDecoder * getDecoderPtr() override
int cpuId() const override
unsigned readStCondFailures() const override
void setIntRegFlat(RegIndex idx, RegVal val) override
void htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
std::unique_ptr< PCStateBase > _pcState
bool readMemAccPredicate()
System * getSystemPtr() override
void copyState(ThreadContext *oldContext)
ThreadContext is the external interface to all thread state for anything outside of the CPU.
bool readPredicate() const
void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
void deschedule(Event *event)
Deschedule the specified event.
uint32_t socketId() const override
unsigned storeCondFailures
uint64_t Tick
Tick count type.
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
void setMemAccPredicate(bool val)
void setVecRegFlat(RegIndex reg, const TheISA::VecRegContainer &val) override
void setThreadId(ThreadID id)
Queue of events sorted in time order.
void demapPage(Addr vaddr, uint64_t asn)
int threadId() const override
BaseISA * getIsaPtr() override
void takeOverFrom(ThreadContext *oldContext) override
bool memAccPredicate
True if the memory access should be skipped for this instruction.
const TheISA::VecPredRegContainer & readVecPredRegFlat(RegIndex reg) const override
gem5::VecRegContainer< NumVecElemPerVecReg *sizeof(VecElem)> VecRegContainer
std::vector< RegVal > floatRegs
bool schedule(PCEvent *e) override
const PCStateBase & pcState() const override
ThreadID threadId() const
RegVal readVecElem(const RegId ®) const override
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void halt() override
Set the status to Halted.
void setFloatReg(RegIndex reg_idx, RegVal val) override
uint16_t ElemIndex
Logical vector register elem index type.
BaseHTMCheckpointPtr & getHtmCheckpointPtr() override
void setStatus(Status newStatus) override
Tick getCurTick() const
While curTick() is useful for any object assigned to this event queue, if an object that is assigned ...
RegVal readFloatReg(RegIndex reg_idx) const override
ContextID contextId() const
PCEventQueue pcEventQueue
ContextID contextId() const override
void setContextId(ContextID id)
Tick readLastActivate() override
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId ®) override
void scheduleInstCountEvent(Event *event, Tick count) override
std::vector< RegVal > ccRegs
TheISA::VecRegContainer & getWritableVecReg(const RegId ®) override
void setProcessPtr(Process *p) override
const TheISA::VecPredRegContainer & readVecPredReg(const RegId ®) const override
void setProcessPtr(Process *p)
void suspend() override
Set the status to Suspended.
ThreadContext::Status _status
void setVecElem(const RegId ®, RegVal val) override
void demapPage(Addr vaddr, uint64_t asn)
int ContextID
Globally unique thread context ID.
std::vector< TheISA::VecPredRegContainer > vecPredRegs
const TheISA::VecRegContainer & readVecRegFlat(RegIndex reg) const override
std::vector< TheISA::VecRegContainer > vecRegs
RegVal readFloatRegFlat(RegIndex idx) const override
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
void descheduleInstCountEvent(Event *event) override
std::ostream CheckpointOut
void pcStateNoRecord(const PCStateBase &val) override
Tick getCurrentInstCount() override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
uint32_t socketId() const
void pcState(const PCStateBase &val) override
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
ThreadContext::Status Status
std::vector< RegVal > intRegs
BaseCPU * getCpuPtr() override
Tick readLastActivate() const
Status status() const override
Tick readLastSuspend() const
SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system, BaseMMU *_mmu, BaseISA *_isa, InstDecoder *_decoder)
void setFloatRegFlat(RegIndex idx, RegVal val) override
EventQueue comInstEventQueue
An instruction-based event queue.
void setPredicate(bool val)
RegVal readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
void setCCReg(RegIndex reg_idx, RegVal val) override
void serialize(CheckpointOut &cp) const override
Serialize an object.
RegId flattenRegId(const RegId ®Id) const override
Register ID: describe an architectural register with its class and index.
bool predicate
Did this instruction execute or is it predicated false.
Process * getProcessPtr()
Generated on Wed May 4 2022 12:13:54 for gem5 by doxygen 1.8.17