Go to the documentation of this file.
42 #ifndef __CPU_SIMPLE_THREAD_HH__
43 #define __CPU_SIMPLE_THREAD_HH__
47 #include "arch/decoder.hh"
51 #include "arch/isa.hh"
52 #include "arch/registers.hh"
53 #include "arch/types.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"
97 std::array<RegVal, TheISA::NumIntRegs>
intRegs;
98 std::array<TheISA::VecRegContainer, TheISA::NumVecRegs>
vecRegs;
99 std::array<TheISA::VecPredRegContainer, TheISA::NumVecPredRegs>
101 std::array<RegVal, TheISA::NumCCRegs>
ccRegs;
237 void halt()
override;
272 int flatIndex =
isa->flattenIntIndex(reg_idx);
275 DPRINTF(IntRegs,
"Reading int reg %d (%d) as %#x.\n",
276 reg_idx, flatIndex, regVal);
283 int flatIndex =
isa->flattenFloatIndex(reg_idx);
286 DPRINTF(FloatRegs,
"Reading float reg %d (%d) bits as %#x.\n",
287 reg_idx, flatIndex, regVal);
294 int flatIndex =
isa->flattenVecIndex(
reg.index());
297 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s.\n",
298 reg.index(), flatIndex, regVal.print());
305 int flatIndex =
isa->flattenVecIndex(
reg.index());
308 DPRINTF(VecRegs,
"Reading vector reg %d (%d) as %s for modify.\n",
309 reg.index(), flatIndex, regVal.print());
316 template <
typename T>
320 int flatIndex =
isa->flattenVecIndex(
reg.index());
322 auto regVal = readVecLaneFlat<T>(flatIndex,
reg.elemIndex());
323 DPRINTF(VecRegs,
"Reading vector lane %d (%d)[%d] as %lx.\n",
324 reg.index(), flatIndex,
reg.elemIndex(), regVal);
332 return readVecLane<uint8_t>(
reg);
339 return readVecLane<uint16_t>(
reg);
346 return readVecLane<uint32_t>(
reg);
353 return readVecLane<uint64_t>(
reg);
357 template <
typename LD>
361 int flatIndex =
isa->flattenVecIndex(
reg.index());
364 DPRINTF(VecRegs,
"Reading vector lane %d (%d)[%d] to %lx.\n",
365 reg.index(), flatIndex,
reg.elemIndex(),
val);
395 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
399 DPRINTF(VecRegs,
"Reading element %d of vector reg %d (%d) as"
400 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex, regVal);
407 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
411 DPRINTF(VecPredRegs,
"Reading predicate reg %d (%d) as %s.\n",
412 reg.index(), flatIndex, regVal.print());
419 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
424 "Reading predicate reg %d (%d) as %s for modify.\n",
425 reg.index(), flatIndex, regVal.print());
432 int flatIndex =
isa->flattenCCIndex(reg_idx);
433 assert(0 <= flatIndex);
436 DPRINTF(CCRegs,
"Reading CC reg %d (%d) as %#x.\n",
437 reg_idx, flatIndex, regVal);
444 int flatIndex =
isa->flattenIntIndex(reg_idx);
446 DPRINTF(IntRegs,
"Setting int reg %d (%d) to %#x.\n",
447 reg_idx, flatIndex,
val);
454 int flatIndex =
isa->flattenFloatIndex(reg_idx);
460 DPRINTF(FloatRegs,
"Setting float reg %d (%d) bits to %#x.\n",
461 reg_idx, flatIndex,
val);
467 int flatIndex =
isa->flattenVecIndex(
reg.index());
470 DPRINTF(VecRegs,
"Setting vector reg %d (%d) to %s.\n",
471 reg.index(), flatIndex,
val.print());
477 int flatIndex =
isa->flattenVecElemIndex(
reg.index());
480 DPRINTF(VecRegs,
"Setting element %d of vector reg %d (%d) to"
481 " %#x.\n",
reg.elemIndex(),
reg.index(), flatIndex,
val);
488 int flatIndex =
isa->flattenVecPredIndex(
reg.index());
491 DPRINTF(VecPredRegs,
"Setting predicate reg %d (%d) to %s.\n",
492 reg.index(), flatIndex,
val.print());
498 int flatIndex =
isa->flattenCCIndex(reg_idx);
500 DPRINTF(CCRegs,
"Setting CC reg %d (%d) to %#x.\n",
501 reg_idx, flatIndex,
val);
523 return isa->readMiscRegNoEffect(misc_reg);
529 return isa->readMiscReg(misc_reg);
535 return isa->setMiscRegNoEffect(misc_reg,
val);
541 return isa->setMiscReg(misc_reg,
val);
547 return isa->flattenRegId(regId);
612 template <
typename T>
619 template <
typename LD>
623 vecRegs[
reg].laneView<
typename LD::UnderlyingType>(lId) =
val;
670 #endif // __CPU_CPU_EXEC_CONTEXT_HH__
void clearArchRegs() override
void setThreadId(int id) override
void serialize(CheckpointOut &cp) const override
Serialize an object.
void setVecReg(const RegId ®, const TheISA::VecRegContainer &val) override
void htmAbortTransaction(uint64_t htm_uid, HtmFailureFaultCause cause) override
void setProcessPtr(Process *p)
ContextID contextId() const override
ThreadContext::Status Status
int cpuId() const override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::TwoByte > &val) override
Process * getProcessPtr()
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId ®) override
void setVecLaneFlat(RegIndex reg, int lId, const LD &val)
TheISA::PCState pcState() const override
BaseHTMCheckpointPtr & getHtmCheckpointPtr() override
void setMemAccPredicate(bool val)
Tick readLastSuspend() override
BaseMMU * getMMUPtr() override
VecReg::Container VecRegContainer
RegVal readFloatRegFlat(RegIndex idx) const override
VecLaneT< T, true > readVecLaneFlat(RegIndex reg, int lId) const
virtual ConstVecLane8 readVec8BitLaneReg(const RegId ®) const override
Reads source vector 8bit operand.
void setProcessPtr(Process *p) override
TheISA::Decoder * getDecoderPtr() override
void setFloatRegFlat(RegIndex idx, RegVal val) override
Tick readLastActivate() override
int ContextID
Globally unique thread context ID.
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
uint32_t socketId() const
void setPredicate(bool val)
virtual ConstVecLane16 readVec16BitLaneReg(const RegId ®) const override
Reads source vector 16bit operand.
uint64_t Tick
Tick count type.
VecPredReg::Container VecPredRegContainer
void setIntReg(RegIndex reg_idx, RegVal val) override
void suspend() override
Set the status to Suspended.
void setCCReg(RegIndex reg_idx, RegVal val) override
PCEventQueue pcEventQueue
void unserialize(CheckpointIn &cp) override
Unserialize an object.
virtual ConstVecLane64 readVec64BitLaneReg(const RegId ®) const override
Reads source vector 64bit operand.
void pcStateNoRecord(const TheISA::PCState &val) override
void setHtmCheckpointPtr(BaseHTMCheckpointPtr new_cpt) override
void setThreadId(ThreadID id)
const TheISA::VecPredRegContainer & readVecPredReg(const RegId ®) const override
Status status() const override
RegVal readCCReg(RegIndex reg_idx) const override
void scheduleInstCountEvent(Event *event, Tick count) override
unsigned readStCondFailures() const override
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
Register ID: describe an architectural register with its class and index.
TheISA::VecRegContainer & getWritableVecReg(const RegId ®) override
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
Tick getCurTick() const
While curTick() is useful for any object assigned to this event queue, if an object that is assigned ...
void setMiscReg(RegIndex misc_reg, RegVal val) override
void demapPage(Addr vaddr, uint64_t asn)
std::unique_ptr< BaseHTMCheckpoint > _htmCheckpoint
Struct for holding general thread state that is needed across CPU models.
ThreadContext::Status _status
int64_t Counter
Statistics counter type.
TheISA::VecPredRegContainer & getWritableVecPredRegFlat(RegIndex reg) override
void pcState(const TheISA::PCState &val) override
std::array< RegVal, TheISA::NumFloatRegs > floatRegs
SimpleThread(BaseCPU *_cpu, int _thread_num, System *_system, BaseMMU *_mmu, BaseISA *_isa)
System * getSystemPtr() override
int64_t htmTransactionStops
Addr instAddr() const override
ThreadContext is the external interface to all thread state for anything outside of the CPU.
void takeOverFrom(ThreadContext *oldContext) override
void setStatus(Status newStatus) override
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
Vector Lane abstraction Another view of a container.
void descheduleInstCountEvent(Event *event) override
bool predicate
Did this instruction execute or is it predicated false.
void setVecElemFlat(RegIndex reg, const ElemIndex &elemIndex, const TheISA::VecElem &val) override
void setIntRegFlat(RegIndex idx, RegVal val) override
void setStCondFailures(unsigned sc_failures) override
void setVecRegFlat(RegIndex reg, const TheISA::VecRegContainer &val) override
BaseCPU * getCpuPtr() override
std::array< TheISA::VecRegContainer, TheISA::NumVecRegs > vecRegs
void setVecElem(const RegId ®, const TheISA::VecElem &val) override
PortProxy & getPhysProxy()
bool memAccPredicate
True if the memory access should be skipped for this instruction.
PortProxy & getPhysProxy() override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::EightByte > &val) override
void setCCRegFlat(RegIndex idx, RegVal val) override
RegVal readMiscReg(RegIndex misc_reg) override
virtual ConstVecLane32 readVec32BitLaneReg(const RegId ®) const override
Reads source vector 32bit operand.
void copyState(ThreadContext *oldContext)
bool schedule(PCEvent *event) override
void setVecPredReg(const RegId ®, const TheISA::VecPredRegContainer &val) override
VecLaneT< T, true > readVecLane(const RegId ®) const
Vector Register Lane Interfaces.
PortProxy & getVirtProxy() override
void copyArchRegs(ThreadContext *tc) override
const TheISA::VecRegContainer & readVecRegFlat(RegIndex reg) const override
bool readMemAccPredicate()
bool remove(PCEvent *e) override
RegVal readIntReg(RegIndex reg_idx) const override
void setContextId(ContextID id)
Counter readFuncExeInst() const override
Addr nextInstAddr() const override
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
RegVal readFloatReg(RegIndex reg_idx) const override
std::unique_ptr< BaseHTMCheckpoint > BaseHTMCheckpointPtr
MicroPC microPC() const override
void setFloatReg(RegIndex reg_idx, RegVal val) override
const TheISA::VecPredRegContainer & readVecPredRegFlat(RegIndex reg) const override
void activate() override
Set the status to Active.
std::array< RegVal, TheISA::NumCCRegs > ccRegs
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
virtual const std::string name() const
void initMemProxies(ThreadContext *tc) override
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
EventQueue comInstEventQueue
An instruction-based event queue.
std::array< TheISA::VecPredRegContainer, TheISA::NumVecPredRegs > vecPredRegs
This object is a proxy for a port or other object which implements the functional response protocol,...
void initMemProxies(ThreadContext *tc)
Initialise the physical and virtual port proxies and tie them to the data port of the CPU.
int64_t htmTransactionStarts
void demapPage(Addr vaddr, uint64_t asn)
GenericISA::DelaySlotPCState< MachInst > PCState
const TheISA::VecRegContainer & readVecReg(const RegId ®) const override
bool remove(PCEvent *event) override
PortProxy & getVirtProxy()
unsigned storeCondFailures
RegVal readCCRegFlat(RegIndex idx) const override
void deschedule(Event *event)
Deschedule the specified event.
uint16_t ElemIndex
Logical vector register elem index type.
int threadId() const override
Tick readLastSuspend() const
std::ostream CheckpointOut
Tick getCurrentInstCount() override
BaseISA * getIsaPtr() override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
void setVecPredRegFlat(RegIndex reg, const TheISA::VecPredRegContainer &val) override
void setVecLaneT(const RegId ®, const LD &val)
Write a lane of the destination vector register.
void halt() override
Set the status to Halted.
uint32_t socketId() const override
Queue of events sorted in time order.
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
ThreadID threadId() const
Process * getProcessPtr() override
Tick readLastActivate() const
bool schedule(PCEvent *e) override
const TheISA::VecElem & readVecElem(const RegId ®) const override
virtual void setVecLane(const RegId ®, const LaneData< LaneSize::FourByte > &val) override
TheISA::VecRegContainer & getWritableVecRegFlat(RegIndex reg) override
RegId flattenRegId(const RegId ®Id) const override
std::array< RegVal, TheISA::NumIntRegs > intRegs
void setContextId(ContextID id) override
std::string csprintf(const char *format, const Args &...args)
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
ContextID contextId() const
bool readPredicate() const
const TheISA::VecElem & readVecElemFlat(RegIndex reg, const ElemIndex &elemIndex) const override
CheckerCPU * getCheckerCpuPtr() override
Counter readFuncExeInst() const
Reads the number of instructions functionally executed and committed.
Generated on Tue Mar 23 2021 19:41:25 for gem5 by doxygen 1.8.17