Go to the documentation of this file.
63 #include "debug/Decode.hh"
64 #include "debug/ExecFaulting.hh"
65 #include "debug/Fetch.hh"
66 #include "debug/HtmCpu.hh"
67 #include "debug/Quiesce.hh"
70 #include "params/BaseSimpleCPU.hh"
86 branchPred(
p.branchPred),
95 this,
i,
p.system,
p.mmu,
p.isa[
i],
p.decoder[
i]);
98 this,
i,
p.system,
p.workload[
i],
p.mmu,
p.isa[
i],
108 fatal(
"Checker currently does not support SMT");
131 }
while (oldpc !=
pc);
193 total_inst += t_info->numInst;
204 total_op += t_info->numOp;
256 DPRINTF(Quiesce,
"[tid:%d] Suspended Processor awoke\n", tid);
264 if (debug::ExecFaulting) {
285 assert(!std::dynamic_pointer_cast<GenericHtmFailureFault>(
288 DPRINTF(HtmCpu,
"Deferring pending interrupt - %s -"
289 "due to transactional state\n",
296 interrupt->invoke(tc);
314 DPRINTF(Fetch,
"Fetch: Inst PC:%08p, Fetch PC:%08p\n", instAddr, fetchPC);
356 decoder->moreBytes(pc_state, fetch_pc);
360 instPtr =
decoder->decode(pc_state);
397 const bool predict_taken(
Tick curTick()
The universal simulation clock.
#define fatal(...)
This implements a cprintf based fatal() function.
void update(const InstSeqNum &done_sn, ThreadID tid)
Tells the branch predictor to commit any updates until the given sequence number.
void serializeThread(CheckpointOut &cp, ThreadID tid) const override
Serialize a single thread.
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
bool predict(const StaticInstPtr &inst, const InstSeqNum &seqNum, PCStateBase &pc, ThreadID tid)
Predicts whether or not the instruction is a taken branch, and the target of the branch if it is take...
Counter totalOps() const override
constexpr decltype(nullptr) NoFault
std::vector< BaseInterrupts * > interrupts
std::vector< SimpleExecContext * > threadInfo
statistics::Scalar numMatAluAccesses
static void activate(const char *expr)
static bool isRomMicroPC(MicroPC upc)
statistics::Scalar numCallsReturns
void updateCycleCounters(CPUState state)
base method keeping track of cycle progression
virtual InstRecord * getInstRecord(Tick when, ThreadContext *tc, const StaticInstPtr staticInst, const PCStateBase &pc, const StaticInstPtr macroStaticInst=nullptr)=0
StaticInstPtr curStaticInst
Current instruction.
gem5::SimpleExecContext::ExecContextStats execContextStats
bool isDelayedCommit() const
std::vector< std::unique_ptr< CommitCPUStats > > commitStats
BaseSimpleCPU(const BaseSimpleCPUParams ¶ms)
void unserializeThread(CheckpointIn &cp, ThreadID tid) override
Unserialize one thread.
Derived ThreadContext class for use with the Checker.
virtual void resetStats()
Callback to reset stats.
void setFaulting(bool val)
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
statistics::Scalar numPredictedBranches
virtual void advancePC(PCStateBase &pc_state) const =0
void serviceEvents(Tick when)
process all events up to the given timestamp.
void setPredicate(bool val) override
void checkForInterrupts()
virtual StaticInstPtr fetchMicroop(MicroPC upc) const
Return the microop that goes with a particular micropc.
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
ThreadID numThreads
Number of threads we're actually simulating (<= SMT_MAX_THREADS).
virtual bool branching() const =0
Bitfield< 3, 0 > priority
const StaticInstPtr nullStaticInstPtr
Statically allocated null StaticInstPtr.
virtual void suspendContext(ThreadID thread_num)
Notify the CPU that the indicated context is now suspended.
gem5::BaseCPU::BaseCPUStats baseStats
ThreadContext is the external interface to all thread state for anything outside of the CPU.
std::shared_ptr< FaultBase > Fault
bool inHtmTransactionalState() const override
@ Suspended
Temporarily inactive.
statistics::Scalar numMatInsts
void setupFetchRequest(const RequestPtr &req)
std::unique_ptr< PCStateBase > preExecuteTempPC
RequestorID instRequestorId() const
Reads this CPU's unique instruction requestor ID.
std::shared_ptr< Request > RequestPtr
std::list< ThreadID > activeThreads
int threadId() const override
void traceFault()
Handler used when encountering a fault; its purpose is to tear down the InstRecord.
Counter numInst
PER-THREAD STATS.
void squash(const InstSeqNum &squashed_sn, ThreadID tid)
Squashes all outstanding updates until a given sequence number.
const PCStateBase & pcState() const override
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
virtual void probeInstCommit(const StaticInstPtr &inst, Addr pc)
Helper method to trigger PMU probes for a committed instruction.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
bool isLastMicroop() const
trace::InstRecord * traceData
std::vector< std::unique_ptr< ExecuteCPUStats > > executeStats
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
branch_prediction::BPredUnit * branchPred
std::vector< ThreadContext * > threadContexts
void resetStats() override
Callback to reset stats.
void setMemAccPredicate(bool val) override
void traceFunctions(Addr pc)
@ INST_FETCH
The request was an instruction fetch.
statistics::Scalar numInsts
bool checkInterrupts(ThreadID tid) const
double Counter
All counters are of 64-bit values.
void serviceInstCountEvents()
void wakeup(ThreadID tid) override
void advancePC(const Fault &fault)
std::ostream CheckpointOut
trace::InstTracer * tracer
std::vector< std::unique_ptr< FetchCPUStats > > fetchStats
void haltContext(ThreadID thread_num) override
Notify the CPU that the indicated context is now halted.
statistics::Scalar numBranchMispred
Number of misprediced branches.
void change_thread_state(ThreadID tid, int activate, int priority)
Changes the status and priority of the thread with the given number.
Counter totalInsts() const override
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::unique_ptr< PCStateBase > predPC
StaticInstPtr curMacroStaticInst
EventQueue comInstEventQueue
An instruction-based event queue.
int16_t ThreadID
Thread index/ID type.
void setSystem(System *system)
Generated on Sun Jul 30 2023 01:56:52 for gem5 by doxygen 1.8.17