Go to the documentation of this file.
42 #ifndef __CPU_SIMPLE_THREAD_HH__
43 #define __CPU_SIMPLE_THREAD_HH__
48 #include "arch/decoder.hh"
52 #include "arch/isa.hh"
53 #include "arch/pcstate.hh"
54 #include "arch/vecregs.hh"
56 #include "config/the_isa.hh"
59 #include "debug/CCRegs.hh"
60 #include "debug/FloatRegs.hh"
61 #include "debug/IntRegs.hh"
62 #include "debug/VecPredRegs.hh"
63 #include "debug/VecRegs.hh"
241 void halt()
override;
276 int flatIndex =
isa->flattenIntIndex(reg_idx);
277 assert(flatIndex <
intRegs.size());
279 DPRINTF(IntRegs,
"Reading int reg %d (%d) as %#x.\n",
280 reg_idx, flatIndex, regVal);
287 int flatIndex =
isa->flattenFloatIndex(reg_idx);
290 DPRINTF(FloatRegs,
"Reading float reg %d (%d) bits as %#x.\n",
291 reg_idx, flatIndex, regVal);
298 int flatIndex =
isa->flattenVecIndex(
reg.index());
299 assert(flatIndex <
vecRegs.size());
301 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s.\n",
302 reg.index(), flatIndex, regVal);
309 int flatIndex =
isa->flattenVecIndex(
reg.index());
310 assert(flatIndex <
vecRegs.size());
312 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s for modify.\n",
313 reg.index(), flatIndex, regVal);
320 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
321 assert(flatIndex <
vecRegs.size());
324 DPRINTF(VecRegs,
"Reading element %d of vector reg %d (%d) as"
325 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex, regVal);
332 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
336 DPRINTF(VecPredRegs,
"Reading predicate reg %d (%d) as %s.\n",
337 reg.index(), flatIndex, regVal);
344 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
349 "Reading predicate reg %d (%d) as %s for modify.\n",
350 reg.index(), flatIndex, regVal);
357 int flatIndex =
isa->flattenCCIndex(reg_idx);
358 assert(0 <= flatIndex);
359 assert(flatIndex <
ccRegs.size());
361 DPRINTF(CCRegs,
"Reading CC reg %d (%d) as %#x.\n",
362 reg_idx, flatIndex, regVal);
369 int flatIndex =
isa->flattenIntIndex(reg_idx);
370 assert(flatIndex <
intRegs.size());
371 DPRINTF(IntRegs,
"Setting int reg %d (%d) to %#x.\n",
372 reg_idx, flatIndex,
val);
379 int flatIndex =
isa->flattenFloatIndex(reg_idx);
385 DPRINTF(FloatRegs,
"Setting float reg %d (%d) bits to %#x.\n",
386 reg_idx, flatIndex,
val);
392 int flatIndex =
isa->flattenVecIndex(
reg.index());
393 assert(flatIndex <
vecRegs.size());
395 DPRINTF(VecRegs,
"Setting vector reg %d (%d) to %s.\n",
396 reg.index(), flatIndex,
val);
402 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
403 assert(flatIndex <
vecRegs.size());
405 DPRINTF(VecRegs,
"Setting element %d of vector reg %d (%d) to"
406 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex,
val);
413 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
416 DPRINTF(VecPredRegs,
"Setting predicate reg %d (%d) to %s.\n",
417 reg.index(), flatIndex,
val);
423 int flatIndex =
isa->flattenCCIndex(reg_idx);
424 assert(flatIndex <
ccRegs.size());
425 DPRINTF(CCRegs,
"Setting CC reg %d (%d) to %#x.\n",
426 reg_idx, flatIndex,
val);
448 return isa->readMiscRegNoEffect(misc_reg);
454 return isa->readMiscReg(misc_reg);
460 return isa->setMiscRegNoEffect(misc_reg,
val);
466 return isa->setMiscReg(misc_reg,
val);
472 return isa->flattenRegId(regId);
576 #endif // __CPU_SIMPLE_THREAD_HH__
RegVal readMiscReg(RegIndex misc_reg) override
RegVal readIntReg(RegIndex reg_idx) const override
const TheISA::VecElem & readVecElem(const RegId ®) const override
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
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
Process * getProcessPtr() override
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, const TheISA::VecElem &val) 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
Addr instAddr() const 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
SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system, BaseMMU *_mmu, BaseISA *_isa)
bool remove(PCEvent *e) override
RegVal readCCReg(RegIndex reg_idx) const override
void pcStateNoRecord(const TheISA::PCState &val) 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...
PortProxy & getVirtProxy() override
void setThreadId(int id) override
RegVal readCCRegFlat(RegIndex idx) const override
void setVecElem(const RegId ®, const TheISA::VecElem &val) override
void setVecPredReg(const RegId ®, const TheISA::VecPredRegContainer &val) override
PortProxy & getVirtProxy()
MicroPC microPC() const 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
bool readMemAccPredicate()
System * getSystemPtr() override
void copyState(ThreadContext *oldContext)
void pcState(const TheISA::PCState &val) override
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual std::string name() const
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
GenericISA::DelaySlotPCState< 4 > PCState
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
This object is a proxy for a port or other object which implements the functional response protocol,...
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
TheISA::PCState pcState() const override
bool schedule(PCEvent *e) override
void initMemProxies(ThreadContext *tc) override
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
ThreadID threadId() const
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
Addr nextInstAddr() const override
TheISA::VecRegContainer & getWritableVecReg(const RegId ®) override
void setProcessPtr(Process *p) override
const TheISA::VecPredRegContainer & readVecPredReg(const RegId ®) const override
void setProcessPtr(Process *p)
TheISA::Decoder * getDecoderPtr() override
void suspend() override
Set the status to Suspended.
ThreadContext::Status _status
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
Tick getCurrentInstCount() override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
uint32_t socketId() const
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const TheISA::VecElem & readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
ThreadContext::Status Status
std::vector< RegVal > intRegs
BaseCPU * getCpuPtr() override
Tick readLastActivate() const
Status status() const override
Tick readLastSuspend() const
void setFloatRegFlat(RegIndex idx, RegVal val) override
EventQueue comInstEventQueue
An instruction-based event queue.
void setPredicate(bool val)
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 Tue Sep 7 2021 14:53:45 for gem5 by doxygen 1.8.17