gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
cpu.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2013, 2016-2020 ARM Limited
3  * Copyright (c) 2013 Advanced Micro Devices, Inc.
4  * All rights reserved
5  *
6  * The license below extends only to copyright in the software and shall
7  * not be construed as granting a license to any other intellectual
8  * property including but not limited to intellectual property relating
9  * to a hardware implementation of the functionality of the software
10  * licensed hereunder. You may use the software subject to the license
11  * terms below provided that you ensure that this notice is replicated
12  * unmodified and in its entirety in all distributions of the software,
13  * modified or unmodified, in source code or in binary form.
14  *
15  * Copyright (c) 2004-2005 The Regents of The University of Michigan
16  * Copyright (c) 2011 Regents of the University of California
17  * All rights reserved.
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions are
21  * met: redistributions of source code must retain the above copyright
22  * notice, this list of conditions and the following disclaimer;
23  * redistributions in binary form must reproduce the above copyright
24  * notice, this list of conditions and the following disclaimer in the
25  * documentation and/or other materials provided with the distribution;
26  * neither the name of the copyright holders nor the names of its
27  * contributors may be used to endorse or promote products derived from
28  * this software without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  */
42 
43 #ifndef __CPU_O3_CPU_HH__
44 #define __CPU_O3_CPU_HH__
45 
46 #include <iostream>
47 #include <list>
48 #include <queue>
49 #include <set>
50 #include <vector>
51 
52 #include "arch/generic/pcstate.hh"
53 #include "base/statistics.hh"
54 #include "cpu/o3/comm.hh"
55 #include "cpu/o3/commit.hh"
56 #include "cpu/o3/decode.hh"
57 #include "cpu/o3/dyn_inst_ptr.hh"
58 #include "cpu/o3/fetch.hh"
59 #include "cpu/o3/free_list.hh"
60 #include "cpu/o3/iew.hh"
61 #include "cpu/o3/limits.hh"
62 #include "cpu/o3/rename.hh"
63 #include "cpu/o3/rob.hh"
64 #include "cpu/o3/scoreboard.hh"
65 #include "cpu/o3/thread_state.hh"
66 #include "cpu/activity.hh"
67 #include "cpu/base.hh"
68 #include "cpu/simple_thread.hh"
69 #include "cpu/timebuf.hh"
70 #include "params/BaseO3CPU.hh"
71 #include "sim/process.hh"
72 
73 namespace gem5
74 {
75 
76 template <class>
77 class Checker;
78 class ThreadContext;
79 
80 class Checkpoint;
81 class Process;
82 
83 namespace o3
84 {
85 
86 class ThreadContext;
87 
93 class CPU : public BaseCPU
94 {
95  public:
97 
98  friend class ThreadContext;
99 
100  public:
101  enum Status
102  {
108  };
109 
112 
115 
116  private:
117 
120 
123 
125  void
127  {
128  if (tickEvent.squashed())
129  reschedule(tickEvent, clockEdge(delay));
130  else if (!tickEvent.scheduled())
131  schedule(tickEvent, clockEdge(delay));
132  }
133 
135  void
137  {
138  if (tickEvent.scheduled())
139  tickEvent.squash();
140  }
141 
153  bool tryDrain();
154 
164  void drainSanityCheck() const;
165 
167  bool isCpuDrained() const;
168 
169  public:
171  CPU(const BaseO3CPUParams &params);
172 
175 
177  void regProbePoints() override;
178 
179  void
180  demapPage(Addr vaddr, uint64_t asn)
181  {
182  mmu->demapPage(vaddr, asn);
183  }
184 
188  void tick();
189 
191  void init() override;
192 
193  void startup() override;
194 
196  int
198  {
199  return activeThreads.size();
200  }
201 
203  void activateThread(ThreadID tid);
204 
206  void deactivateThread(ThreadID tid);
207 
209  void insertThread(ThreadID tid);
210 
212  void removeThread(ThreadID tid);
213 
215  Counter totalInsts() const override;
216 
218  Counter totalOps() const override;
219 
221  void activateContext(ThreadID tid) override;
222 
224  void suspendContext(ThreadID tid) override;
225 
229  void haltContext(ThreadID tid) override;
230 
232  void updateThreadPriority();
233 
235  bool isDraining() const { return drainState() == DrainState::Draining; }
236 
237  void serializeThread(CheckpointOut &cp, ThreadID tid) const override;
238  void unserializeThread(CheckpointIn &cp, ThreadID tid) override;
239 
242 
244  bool isThreadExiting(ThreadID tid) const;
245 
251 
253  void exitThreads();
254 
255  public:
258  DrainState drain() override;
259 
261  void drainResume() override;
262 
270  void commitDrained(ThreadID tid);
271 
273  void switchOut() override;
274 
276  void takeOverFrom(BaseCPU *oldCPU) override;
277 
278  void verifyMemoryMode() const override;
279 
282 
284  void trap(const Fault &fault, ThreadID tid, const StaticInstPtr &inst);
285 
288 
290  void processInterrupts(const Fault &interrupt);
291 
293  void halt() { panic("Halt not implemented!\n"); }
294 
298  RegVal readMiscRegNoEffect(int misc_reg, ThreadID tid) const;
299 
303  RegVal readMiscReg(int misc_reg, ThreadID tid);
304 
306  void setMiscRegNoEffect(int misc_reg, RegVal val, ThreadID tid);
307 
311  void setMiscReg(int misc_reg, RegVal val, ThreadID tid);
312 
313  RegVal getReg(PhysRegIdPtr phys_reg, ThreadID tid);
314  void getReg(PhysRegIdPtr phys_reg, void *val, ThreadID tid);
315  void *getWritableReg(PhysRegIdPtr phys_reg, ThreadID tid);
316 
317  void setReg(PhysRegIdPtr phys_reg, RegVal val, ThreadID tid);
318  void setReg(PhysRegIdPtr phys_reg, const void *val, ThreadID tid);
319 
326  RegVal getArchReg(const RegId &reg, ThreadID tid);
327  void getArchReg(const RegId &reg, void *val, ThreadID tid);
328  void *getWritableArchReg(const RegId &reg, ThreadID tid);
329 
330  void setArchReg(const RegId &reg, RegVal val, ThreadID tid);
331  void setArchReg(const RegId &reg, const void *val, ThreadID tid);
332 
334  void pcState(const PCStateBase &new_pc_state, ThreadID tid);
335 
337  const PCStateBase &pcState(ThreadID tid);
338 
343  void squashFromTC(ThreadID tid);
344 
348  ListIt addInst(const DynInstPtr &inst);
349 
351  void instDone(ThreadID tid, const DynInstPtr &inst);
352 
356  void removeFrontInst(const DynInstPtr &inst);
357 
360  void removeInstsNotInROB(ThreadID tid);
361 
363  void removeInstsUntil(const InstSeqNum &seq_num, ThreadID tid);
364 
366  void squashInstIt(const ListIt &instIt, ThreadID tid);
367 
369  void cleanUpRemovedInsts();
370 
372  void dumpInsts();
373 
374  public:
375 #ifndef NDEBUG
376 
378 #endif
379 
382 
386  std::queue<ListIt> removeList;
387 
388 #ifdef GEM5_DEBUG
389 
392  std::set<InstSeqNum> snList;
393 #endif
394 
399 
400  protected:
403 
406 
409 
412 
415 
418 
421 
424 
427 
430 
433 
439  std::unordered_map<ThreadID, bool> exitingThreads;
440 
443 
445 
446  public:
451  enum StageIdx
452  {
459  };
460 
463 
466 
469 
472 
475 
476  private:
482 
483  public:
486 
488  void
490  {
492  }
493 
495  void
497  {
499  }
500 
502  void wakeCPU();
503 
504  virtual void wakeup(ThreadID tid) override;
505 
508 
509  public:
513  {
514  return thread[tid]->getTC();
515  }
516 
518  InstSeqNum globalSeqNum;//[MaxThreads];
519 
525 
528 
531 
534 
537 
540 
542  std::map<ThreadID, unsigned> threadMap;
543 
546 
548  Fault
549  pushRequest(const DynInstPtr& inst, bool isLoad, uint8_t *data,
550  unsigned int size, Addr addr, Request::Flags flags,
551  uint64_t *res, AtomicOpFunctorPtr amo_op = nullptr,
552  const std::vector<bool>& byte_enable=std::vector<bool>())
553 
554  {
555  return iew.ldstQueue.pushRequest(inst, isLoad, data, size, addr,
556  flags, res, std::move(amo_op), byte_enable);
557  }
558 
560  Port &
561  getInstPort() override
562  {
563  return fetch.getInstPort();
564  }
565 
567  Port &
568  getDataPort() override
569  {
570  return iew.ldstQueue.getDataPort();
571  }
572 
573  struct CPUStats : public statistics::Group
574  {
575  CPUStats(CPU *cpu);
576 
584  } cpuStats;
585 
586  public:
587  // hardware transactional memory
588  void htmSendAbortSignal(ThreadID tid, uint64_t htm_uid,
589  HtmFailureFaultCause cause) override;
590 };
591 
592 } // namespace o3
593 } // namespace gem5
594 
595 #endif // __CPU_O3_CPU_HH__
gem5::statistics::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1929
gem5::o3::CPU::DecodeIdx
@ DecodeIdx
Definition: cpu.hh:454
gem5::o3::CPU::addThreadToExitingList
void addThreadToExitingList(ThreadID tid)
Insert tid to the list of threads trying to exit.
Definition: cpu.cc:1360
gem5::o3::CPU::dumpInsts
void dumpInsts()
Debug function to print all instructions on the list.
Definition: cpu.cc:1271
gem5::o3::CPU::getWritableArchReg
void * getWritableArchReg(const RegId &reg, ThreadID tid)
Definition: cpu.cc:1072
gem5::o3::CPU::pushRequest
Fault pushRequest(const DynInstPtr &inst, bool isLoad, uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, AtomicOpFunctorPtr amo_op=nullptr, const std::vector< bool > &byte_enable=std::vector< bool >())
CPU pushRequest function, forwards request to LSQ.
Definition: cpu.hh:549
gem5::o3::CPU::ppDataAccessComplete
ProbePointArg< std::pair< DynInstPtr, PacketPtr > > * ppDataAccessComplete
Definition: cpu.hh:174
gem5::o3::CPU::isCpuDrained
bool isCpuDrained() const
Check if a system is in a drained state.
Definition: cpu.cc:797
gem5::o3::LSQ::LSQRequest
Memory operation metadata.
Definition: lsq.hh:189
gem5::o3::CPU::tids
std::vector< ThreadID > tids
Available thread ids in the cpu.
Definition: cpu.hh:545
gem5::o3::CPU::threadMap
std::map< ThreadID, unsigned > threadMap
Mapping for system thread id to cpu id.
Definition: cpu.hh:542
gem5::o3::CPU::removeList
std::queue< ListIt > removeList
List of all the instructions that will be removed at the end of this cycle.
Definition: cpu.hh:386
commit.hh
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::o3::CPU::removeInstsThisCycle
bool removeInstsThisCycle
Records if instructions need to be removed this cycle due to being retired or squashed.
Definition: cpu.hh:398
gem5::o3::CPU::ListIt
std::list< DynInstPtr >::iterator ListIt
Definition: cpu.hh:96
gem5::o3::CPU::cpuStats
gem5::o3::CPU::CPUStats cpuStats
gem5::o3::CPU::globalSeqNum
InstSeqNum globalSeqNum
The global sequence number counter.
Definition: cpu.hh:518
gem5::o3::CPU::removeInstsUntil
void removeInstsUntil(const InstSeqNum &seq_num, ThreadID tid)
Remove all instructions younger than the given sequence number.
Definition: cpu.cc:1199
gem5::o3::CPU::mmu
BaseMMU * mmu
Definition: cpu.hh:110
gem5::o3::CPU::getReg
RegVal getReg(PhysRegIdPtr phys_reg, ThreadID tid)
Definition: cpu.cc:936
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::HtmFailureFaultCause
HtmFailureFaultCause
Definition: htm.hh:47
gem5::o3::CPU::regFile
PhysRegFile regFile
The register file.
Definition: cpu.hh:417
gem5::Drainable::drainState
DrainState drainState() const
Return the current drain state of an object.
Definition: drain.hh:324
gem5::o3::Fetch::getInstPort
RequestPort & getInstPort()
Definition: fetch.hh:360
rename.hh
gem5::o3::CPU::decode
Decode decode
The decode stage.
Definition: cpu.hh:405
gem5::o3::CPU::activeThreads
std::list< ThreadID > activeThreads
Active Threads List.
Definition: cpu.hh:432
gem5::o3::CPU::freeList
UnifiedFreeList freeList
The free list.
Definition: cpu.hh:420
gem5::o3::CPU::processInterrupts
void processInterrupts(const Fault &interrupt)
Processes any an interrupt fault.
Definition: cpu.cc:674
gem5::o3::CPU::RenameIdx
@ RenameIdx
Definition: cpu.hh:455
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::o3::CPU::CPUStats::quiesceCycles
statistics::Scalar quiesceCycles
Stat for total number of cycles the CPU spends descheduled due to a quiesce operation or waiting for ...
Definition: cpu.hh:583
gem5::o3::CPU::getInterrupts
Fault getInterrupts()
Returns the Fault for any valid interrupt.
Definition: cpu.cc:667
gem5::o3::CPU::squashInstIt
void squashInstIt(const ListIt &instIt, ThreadID tid)
Removes the instruction pointed to by the iterator.
Definition: cpu.cc:1227
gem5::o3::CPU::htmSendAbortSignal
void htmSendAbortSignal(ThreadID tid, uint64_t htm_uid, HtmFailureFaultCause cause) override
This function is used to instruct the memory subsystem that a transaction should be aborted and the s...
Definition: cpu.cc:1428
gem5::o3::CPU::_status
Status _status
Overall CPU status.
Definition: cpu.hh:114
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:776
gem5::o3::CPU::timeBuffer
TimeBuffer< TimeStruct > timeBuffer
The main time buffer to do backwards communication.
Definition: cpu.hh:462
gem5::o3::CPU::getAndIncrementInstSeq
InstSeqNum getAndIncrementInstSeq()
Get the current instruction sequence number, and increment it.
Definition: cpu.hh:281
gem5::o3::CPU::cpuWaitList
std::list< int > cpuWaitList
Threads Scheduled to Enter CPU.
Definition: cpu.hh:533
gem5::o3::CPU::removeThread
void removeThread(ThreadID tid)
Remove all of a thread's context from CPU.
Definition: cpu.cc:615
gem5::o3::UnifiedFreeList
FreeList class that simply holds the list of free integer and floating point registers.
Definition: free_list.hh:124
gem5::o3::Scoreboard
Implements a simple scoreboard to track which registers are ready.
Definition: scoreboard.hh:54
gem5::EventManager::schedule
void schedule(Event &event, Tick when)
Definition: eventq.hh:1012
std::vector
STL vector class.
Definition: stl.hh:37
gem5::o3::CPU::setMiscReg
void setMiscReg(int misc_reg, RegVal val, ThreadID tid)
Sets a misc.
Definition: cpu.cc:929
gem5::o3::CPU::renameMap
UnifiedRenameMap renameMap[MaxThreads]
The rename map.
Definition: cpu.hh:423
gem5::o3::Fetch
Fetch class handles both single threaded and SMT fetch.
Definition: fetch.hh:78
gem5::o3::CPU::instList
std::list< DynInstPtr > instList
List of all the instructions in flight.
Definition: cpu.hh:381
gem5::o3::CPU::NumStages
@ NumStages
Definition: cpu.hh:458
gem5::o3::CPU::getDataPort
Port & getDataPort() override
Get the dcache port (used to find block size for translations).
Definition: cpu.hh:568
gem5::o3::CPU::verifyMemoryMode
void verifyMemoryMode() const override
Verify that the system is in a memory mode supported by the CPU.
Definition: cpu.cc:901
gem5::o3::CPU::deactivateThread
void deactivateThread(ThreadID tid)
Remove Thread from Active Threads List.
Definition: cpu.cc:449
iew.hh
gem5::o3::CPU::unserializeThread
void unserializeThread(CheckpointIn &cp, ThreadID tid) override
Unserialize one thread.
Definition: cpu.cc:703
gem5::o3::CPU::drainSanityCheck
void drainSanityCheck() const
Perform sanity checks after a drain.
Definition: cpu.cc:786
gem5::o3::CPU::serializeThread
void serializeThread(CheckpointOut &cp, ThreadID tid) const override
Serialize a single thread.
Definition: cpu.cc:697
gem5::o3::CPU::cleanUpRemovedInsts
void cleanUpRemovedInsts()
Cleans up all instructions on the remove list.
Definition: cpu.cc:1247
rob.hh
gem5::o3::CPU::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: cpu.hh:180
gem5::o3::CPU::iewQueue
TimeBuffer< IEWStruct > iewQueue
The IEW stage's instruction queue.
Definition: cpu.hh:474
gem5::o3::CPU::ppInstAccessComplete
ProbePointArg< PacketPtr > * ppInstAccessComplete
Definition: cpu.hh:173
gem5::RefCountingPtr< StaticInst >
gem5::BaseMMU
Definition: mmu.hh:53
gem5::TimeBuffer
Definition: timebuf.hh:40
gem5::o3::CPU::checker
gem5::Checker< DynInstPtr > * checker
Pointer to the checker, which can dynamically verify instruction results at run time.
Definition: cpu.hh:524
gem5::o3::CPU::unscheduleTickEvent
void unscheduleTickEvent()
Unschedule tick event, regardless of its current state.
Definition: cpu.hh:136
gem5::Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:78
gem5::o3::CPU::totalInsts
Counter totalInsts() const override
Count the Total Instructions Committed in the CPU.
Definition: cpu.cc:473
gem5::o3::CPU::deactivateStage
void deactivateStage(const StageIdx idx)
Changes a stage's status to inactive within the activity recorder.
Definition: cpu.hh:496
timebuf.hh
gem5::o3::ThreadContext
Derived ThreadContext class for use with the O3CPU.
Definition: thread_context.hh:67
gem5::o3::CPU::CPUStats::idleCycles
statistics::Scalar idleCycles
Stat for total number of cycles the CPU spends descheduled.
Definition: cpu.hh:580
gem5::o3::CPU::numActiveThreads
int numActiveThreads()
Returns the Number of Active Threads in the CPU.
Definition: cpu.hh:197
gem5::o3::CPU::decodeQueue
TimeBuffer< DecodeStruct > decodeQueue
The decode stage's instruction queue.
Definition: cpu.hh:468
gem5::o3::CPU::Blocked
@ Blocked
Definition: cpu.hh:106
comm.hh
gem5::Flags< FlagsType >
gem5::DrainState
DrainState
Object drain/handover states.
Definition: drain.hh:74
gem5::o3::CPU::IEWIdx
@ IEWIdx
Definition: cpu.hh:456
gem5::System
Definition: system.hh:74
gem5::o3::CPU::tryDrain
bool tryDrain()
Check if the pipeline has drained and signal drain done.
Definition: cpu.cc:771
gem5::o3::CPU::Status
Status
Definition: cpu.hh:101
gem5::o3::CPU::wakeup
virtual void wakeup(ThreadID tid) override
Definition: cpu.cc:1319
gem5::o3::CPU
O3CPU class, has each of the stages (fetch through commit) within it, as well as all of the time buff...
Definition: cpu.hh:93
gem5::o3::CPU::insertThread
void insertThread(ThreadID tid)
Setup CPU to insert a thread's context.
Definition: cpu.cc:577
gem5::o3::CPU::getInstPort
Port & getInstPort() override
Used by the fetch unit to get a hold of the instruction port.
Definition: cpu.hh:561
gem5::o3::Commit
Commit handles single threaded and SMT commit.
Definition: commit.hh:91
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
gem5::o3::CPU::scheduleTickEvent
void scheduleTickEvent(Cycles delay)
Schedule tick event, regardless of its current state.
Definition: cpu.hh:126
gem5::o3::CPU::totalOps
Counter totalOps() const override
Count the Total Ops (including micro ops) committed in the CPU.
Definition: cpu.cc:485
gem5::SimObject::params
const Params & params() const
Definition: sim_object.hh:176
gem5::o3::CPU::suspendContext
void suspendContext(ThreadID tid) override
Remove Thread from Active Threads List.
Definition: cpu.cc:535
gem5::o3::CPU::StageIdx
StageIdx
Enum to give each stage a specific index, so when calling activateStage() or deactivateStage(),...
Definition: cpu.hh:451
gem5::o3::CPU::fetch
Fetch fetch
The fetch stage.
Definition: cpu.hh:402
gem5::o3::CPU::halt
void halt()
Halts the CPU.
Definition: cpu.hh:293
gem5::o3::CPU::scheduleThreadExitEvent
void scheduleThreadExitEvent(ThreadID tid)
If a thread is trying to exit and its corresponding trap event has been completed,...
Definition: cpu.cc:1385
gem5::o3::CPU::CommitIdx
@ CommitIdx
Definition: cpu.hh:457
statistics.hh
gem5::o3::PhysRegFile
Simple physical register file class.
Definition: regfile.hh:65
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::o3::CPU::pcState
void pcState(const PCStateBase &new_pc_state, ThreadID tid)
Sets the commit PC state of a specific thread.
Definition: cpu.cc:1102
gem5::o3::IEW
IEW handles both single threaded and SMT IEW (issue/execute/writeback).
Definition: iew.hh:87
gem5::o3::CPU::FetchIdx
@ FetchIdx
Definition: cpu.hh:453
gem5::o3::CPU::squashFromTC
void squashFromTC(ThreadID tid)
Initiates a squash of all in-flight instructions for a given thread.
Definition: cpu.cc:1108
gem5::o3::CPU::activateStage
void activateStage(const StageIdx idx)
Changes a stage's status to active within the activity recorder.
Definition: cpu.hh:489
process.hh
gem5::o3::CPU::readMiscRegNoEffect
RegVal readMiscRegNoEffect(int misc_reg, ThreadID tid) const
Register accessors.
Definition: cpu.cc:910
gem5::o3::CPU::tcBase
gem5::ThreadContext * tcBase(ThreadID tid)
Returns a pointer to a thread context.
Definition: cpu.hh:512
gem5::o3::CPU::activateThread
void activateThread(ThreadID tid)
Add Thread to Active Threads List.
Definition: cpu.cc:433
activity.hh
gem5::o3::CPU::thread
std::vector< ThreadState * > thread
Pointers to all of the threads in the CPU.
Definition: cpu.hh:530
gem5::BaseMMU::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: mmu.cc:97
thread_state.hh
gem5::o3::CPU::CPUStats::timesIdled
statistics::Scalar timesIdled
Stat for total number of times the CPU is descheduled.
Definition: cpu.hh:578
gem5::o3::CPU::drain
DrainState drain() override
Starts draining the CPU's pipeline of all instructions in order to stop all memory accesses.
Definition: cpu.cc:709
gem5::o3::CPU::wakeCPU
void wakeCPU()
Wakes the CPU, rescheduling the CPU if it's not already active.
Definition: cpu.cc:1298
gem5::BaseCPU
Definition: base.hh:104
gem5::EventManager::reschedule
void reschedule(Event &event, Tick when, bool always=false)
Definition: eventq.hh:1030
gem5::o3::CPU::tickEvent
EventFunctionWrapper tickEvent
The tick event used for scheduling CPU ticks.
Definition: cpu.hh:119
gem5::o3::CPU::switchOut
void switchOut() override
Switches out this CPU.
Definition: cpu.cc:866
flags
uint8_t flags
Definition: helpers.cc:66
gem5::o3::CPU::CPU
CPU(const BaseO3CPUParams &params)
Constructs a CPU with the given parameters.
Definition: cpu.cc:72
gem5::o3::CPU::Idle
@ Idle
Definition: cpu.hh:104
gem5::o3::CPU::setMiscRegNoEffect
void setMiscRegNoEffect(int misc_reg, RegVal val, ThreadID tid)
Sets a miscellaneous register.
Definition: cpu.cc:923
gem5::o3::CPU::renameQueue
TimeBuffer< RenameStruct > renameQueue
The rename stage's instruction queue.
Definition: cpu.hh:471
fetch.hh
gem5::o3::CPU::rob
ROB rob
The re-order buffer.
Definition: cpu.hh:429
gem5::o3::CPU::CPUStats
Definition: cpu.hh:573
gem5::o3::CPU::Running
@ Running
Definition: cpu.hh:103
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
dyn_inst_ptr.hh
gem5::Clocked::clockEdge
Tick clockEdge(Cycles cycles=Cycles(0)) const
Determine the tick when a cycle begins, by default the current one, but the argument also enables the...
Definition: clocked_object.hh:177
gem5::ActivityRecorder::activity
void activity()
Records that there is activity this cycle.
Definition: activity.cc:55
gem5::ProbePointArg
ProbePointArg generates a point for the class of Arg.
Definition: thermal_domain.hh:54
gem5::X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:92
gem5::o3::CPU::regProbePoints
void regProbePoints() override
Register probe points.
Definition: cpu.cc:305
gem5::o3::CPU::system
System * system
Pointer to the system.
Definition: cpu.hh:527
gem5::EventFunctionWrapper
Definition: eventq.hh:1136
gem5::o3::CPU::instcount
int instcount
Count of total number of dynamic instructions in flight.
Definition: cpu.hh:377
pcstate.hh
gem5::o3::CPU::lastRunningCycle
Cycles lastRunningCycle
The cycle that the CPU was last running, used for statistics.
Definition: cpu.hh:536
gem5::o3::CPU::updateThreadPriority
void updateThreadPriority()
Update The Order In Which We Process Threads.
Definition: cpu.cc:1344
gem5::o3::MaxThreads
static constexpr int MaxThreads
Definition: limits.hh:38
gem5::o3::Rename
Rename handles both single threaded and SMT rename.
Definition: rename.hh:78
gem5::o3::CPU::getWritableReg
void * getWritableReg(PhysRegIdPtr phys_reg, ThreadID tid)
Definition: cpu.cc:988
gem5::o3::CPU::activityThisCycle
void activityThisCycle()
Records that there was time buffer activity this cycle.
Definition: cpu.hh:485
gem5::o3::CPU::rename
Rename rename
The dispatch stage.
Definition: cpu.hh:408
gem5::o3::CPU::fetchQueue
TimeBuffer< FetchStruct > fetchQueue
The fetch stage's instruction queue.
Definition: cpu.hh:465
simple_thread.hh
gem5::ActivityRecorder::activateStage
void activateStage(const int idx)
Marks a stage as active.
Definition: activity.cc:91
gem5::o3::CPU::takeOverFrom
void takeOverFrom(BaseCPU *oldCPU) override
Takes over from another CPU.
Definition: cpu.cc:880
gem5::o3::CPU::iew
IEW iew
The issue/execute/writeback stages.
Definition: cpu.hh:411
gem5::o3::CPU::removeInstsNotInROB
void removeInstsNotInROB(ThreadID tid)
Remove all instructions that are not currently in the ROB.
Definition: cpu.cc:1155
gem5::o3::CPU::exitThreads
void exitThreads()
Terminate all threads that are ready to exit.
Definition: cpu.cc:1405
gem5::o3::CPU::lastActivatedCycle
Tick lastActivatedCycle
The cycle that the CPU was last activated by a new thread.
Definition: cpu.hh:539
base.hh
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::o3::CPU::commitDrained
void commitDrained(ThreadID tid)
Commit has reached a safe point to drain a thread.
Definition: cpu.cc:834
gem5::o3::Decode
Decode class handles both single threaded and SMT decode.
Definition: decode.hh:69
gem5::o3::CPU::commitRenameMap
UnifiedRenameMap commitRenameMap[MaxThreads]
The commit rename map.
Definition: cpu.hh:426
gem5::o3::CPU::trap
void trap(const Fault &fault, ThreadID tid, const StaticInstPtr &inst)
Traps to handle given fault.
Definition: cpu.cc:690
gem5::Event::squashed
bool squashed() const
Check whether the event is squashed.
Definition: eventq.hh:472
gem5::o3::CPU::drainResume
void drainResume() override
Resumes execution after a drain.
Definition: cpu.cc:837
gem5::o3::CPU::getFreeTid
ThreadID getFreeTid()
Gets a free thread id.
Definition: cpu.cc:1331
gem5::o3::CPU::addInst
ListIt addInst(const DynInstPtr &inst)
Function to add instruction onto the head of the list of the instructions.
Definition: cpu.cc:1115
gem5::o3::CPU::setArchReg
void setArchReg(const RegId &reg, RegVal val, ThreadID tid)
Definition: cpu.cc:1080
gem5::o3::CPU::isThreadExiting
bool isThreadExiting(ThreadID tid) const
Is the thread trying to exit?
Definition: cpu.cc:1379
gem5::o3::CPU::threadExitEvent
EventFunctionWrapper threadExitEvent
The exit event used for terminating all ready-to-exit threads.
Definition: cpu.hh:122
gem5::statistics::Counter
double Counter
All counters are of 64-bit values.
Definition: types.hh:46
gem5::ActivityRecorder
ActivityRecorder helper class that informs the CPU if it can switch over to being idle or not.
Definition: activity.hh:53
gem5::o3::CPU::isDraining
bool isDraining() const
Is the CPU draining?
Definition: cpu.hh:235
free_list.hh
gem5::statistics::Group
Statistics container.
Definition: group.hh:92
gem5::o3::CPU::readMiscReg
RegVal readMiscReg(int misc_reg, ThreadID tid)
Reads a misc.
Definition: cpu.cc:916
gem5::InstSeqNum
uint64_t InstSeqNum
Definition: inst_seq.hh:40
gem5::PhysRegId
Physical register ID.
Definition: reg_class.hh:393
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::o3::CPU::SwitchedOut
@ SwitchedOut
Definition: cpu.hh:107
gem5::o3::CPU::exitingThreads
std::unordered_map< ThreadID, bool > exitingThreads
This is a list of threads that are trying to exit.
Definition: cpu.hh:439
gem5::o3::LSQ::pushRequest
Fault pushRequest(const DynInstPtr &inst, bool isLoad, uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, AtomicOpFunctorPtr amo_op, const std::vector< bool > &byte_enable)
Definition: lsq.cc:783
gem5::Event::squash
void squash()
Squash the current event.
Definition: eventq.hh:465
gem5::o3::LSQ::getDataPort
RequestPort & getDataPort()
Definition: lsq.hh:892
decode.hh
gem5::o3::CPU::scoreboard
Scoreboard scoreboard
Integer Register Scoreboard.
Definition: cpu.hh:442
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::PCStateBase
Definition: pcstate.hh:57
gem5::o3::IEW::ldstQueue
LSQ ldstQueue
Load / store queue.
Definition: iew.hh:358
gem5::o3::CPU::commit
Commit commit
The commit stage.
Definition: cpu.hh:414
std::list
STL list class.
Definition: stl.hh:51
gem5::o3::CPU::haltContext
void haltContext(ThreadID tid) override
Remove Thread from Active Threads List && Remove Thread Context from CPU.
Definition: cpu.cc:555
gem5::AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:269
gem5::o3::CPU::activityRec
ActivityRecorder activityRec
The activity recorder; used to tell if the CPU has any activity remaining or if it can go to idle and...
Definition: cpu.hh:481
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::ActivityRecorder::deactivateStage
void deactivateStage(const int idx)
Deactivates a stage.
Definition: activity.cc:108
gem5::o3::CPU::isa
std::vector< BaseISA * > isa
Definition: cpu.hh:444
limits.hh
gem5::o3::CPU::activateContext
void activateContext(ThreadID tid) override
Add Thread to Active Threads List.
Definition: cpu.cc:497
gem5::o3::CPU::tick
void tick()
Ticks CPU, calling tick() on each stage, and checking the overall activity to see if the CPU should d...
Definition: cpu.cc:345
gem5::o3::CPU::getArchReg
RegVal getArchReg(const RegId &reg, ThreadID tid)
Architectural register accessors.
Definition: cpu.cc:1056
gem5::o3::ROB
ROB class.
Definition: rob.hh:71
gem5::Checker
Templated Checker class.
Definition: cpu.hh:447
gem5::o3::CPU::startup
void startup() override
startup() is the final initialization call before simulation.
Definition: cpu.cc:421
scoreboard.hh
gem5::o3::CPU::setReg
void setReg(PhysRegIdPtr phys_reg, RegVal val, ThreadID tid)
Definition: cpu.cc:1004
gem5::o3::CPU::CPUStats::CPUStats
CPUStats(CPU *cpu)
Definition: cpu.cc:321
gem5::o3::CPU::Halted
@ Halted
Definition: cpu.hh:105
gem5::DrainState::Draining
@ Draining
Draining buffers pending serialization/handover.
gem5::o3::CPU::instDone
void instDone(ThreadID tid, const DynInstPtr &inst)
Function to tell the CPU that an instruction has completed.
Definition: cpu.cc:1123
gem5::Event::scheduled
bool scheduled() const
Determine if the current event is scheduled.
Definition: eventq.hh:458
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235
gem5::o3::CPU::init
void init() override
Initialize the CPU.
Definition: cpu.cc:403
gem5::RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:92
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::o3::UnifiedRenameMap
Unified register rename map for all classes of registers.
Definition: rename_map.hh:168
gem5::o3::CPU::removeFrontInst
void removeFrontInst(const DynInstPtr &inst)
Remove an instruction from the front end of the list.
Definition: cpu.cc:1142
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84

Generated on Sun Jul 30 2023 01:56:47 for gem5 by doxygen 1.8.17