gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
fetch.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2012, 2014 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2004-2006 The Regents of The University of Michigan
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions are
19  * met: redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer;
21  * redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution;
24  * neither the name of the copyright holders nor the names of its
25  * contributors may be used to endorse or promote products derived from
26  * this software without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *
40  * Authors: Kevin Lim
41  * Korey Sewell
42  */
43 
44 #ifndef __CPU_O3_FETCH_HH__
45 #define __CPU_O3_FETCH_HH__
46 
47 #include "arch/decoder.hh"
48 #include "arch/utility.hh"
49 #include "base/statistics.hh"
50 #include "config/the_isa.hh"
51 #include "cpu/pc_event.hh"
52 #include "cpu/pred/bpred_unit.hh"
53 #include "cpu/timebuf.hh"
54 #include "cpu/translation.hh"
55 #include "enums/FetchPolicy.hh"
56 #include "mem/packet.hh"
57 #include "mem/port.hh"
58 #include "sim/eventq.hh"
59 #include "sim/probe/probe.hh"
60 
61 struct DerivO3CPUParams;
62 template <class Impl>
63 class FullO3CPU;
64 
73 template <class Impl>
75 {
76  public:
78  typedef typename Impl::CPUPol CPUPol;
79  typedef typename Impl::DynInst DynInst;
80  typedef typename Impl::DynInstPtr DynInstPtr;
81  typedef typename Impl::O3CPU O3CPU;
82 
84  typedef typename CPUPol::FetchStruct FetchStruct;
85  typedef typename CPUPol::TimeStruct TimeStruct;
86 
89 
93  class IcachePort : public MasterPort
94  {
95  protected:
98 
99  public:
102  : MasterPort(_cpu->name() + ".icache_port", _cpu), fetch(_fetch)
103  { }
104 
105  protected:
106 
109  virtual bool recvTimingResp(PacketPtr pkt);
110 
112  virtual void recvReqRetry();
113  };
114 
116  {
117  protected:
119 
120  public:
122  : fetch(_fetch)
123  {}
124 
125  void
127  {}
128 
129  void
130  finish(const Fault &fault, const RequestPtr &req, ThreadContext *tc,
132  {
133  assert(mode == BaseTLB::Execute);
134  fetch->finishTranslation(fault, req);
135  delete this;
136  }
137  };
138 
139  private:
140  /* Event to delay delivery of a fetch translation result in case of
141  * a fault and the nop to carry the fault cannot be generated
142  * immediately */
144  {
145  private:
149 
150  public:
152  : fetch(_fetch), req(nullptr)
153  {}
154 
155  void setFault(Fault _fault)
156  {
157  fault = _fault;
158  }
159 
160  void setReq(const RequestPtr &_req)
161  {
162  req = _req;
163  }
164 
166  void process()
167  {
168  assert(fetch->numInst < fetch->fetchWidth);
169  fetch->finishTranslation(fault, req);
170  }
171 
172  const char *description() const
173  {
174  return "FullO3CPU FetchFinishTranslation";
175  }
176  };
177 
178  public:
182  enum FetchStatus {
185  };
186 
201  };
202 
203  private:
206 
208  ThreadStatus fetchStatus[Impl::MaxThreads];
209 
211  FetchPolicy fetchPolicy;
212 
215 
220 
221  public:
223  DefaultFetch(O3CPU *_cpu, DerivO3CPUParams *params);
224 
226  std::string name() const;
227 
229  void regStats();
230 
232  void regProbePoints();
233 
235  void setTimeBuffer(TimeBuffer<TimeStruct> *time_buffer);
236 
239 
242 
244  void startupStage();
245 
247  void clearStates(ThreadID tid);
248 
250  void recvReqRetry();
251 
254 
256  void drainResume();
257 
259  void drainSanityCheck() const;
260 
262  bool isDrained() const;
263 
265  void takeOverFrom();
266 
276  void drainStall(ThreadID tid);
277 
279  void wakeFromQuiesce();
280 
282  void deactivateThread(ThreadID tid);
283  private:
285  void resetStage();
286 
290  inline void switchToActive();
291 
295  inline void switchToInactive();
296 
306  bool lookupAndUpdateNextPC(const DynInstPtr &inst, TheISA::PCState &pc);
307 
319  bool fetchCacheLine(Addr vaddr, ThreadID tid, Addr pc);
320  void finishTranslation(const Fault &fault, const RequestPtr &mem_req);
321 
322 
325  bool
327  {
328  return (interruptPending && (THE_ISA != ALPHA_ISA || !(pc & 0x3)));
329  }
330 
332  inline void doSquash(const TheISA::PCState &newPC,
333  const DynInstPtr squashInst, ThreadID tid);
334 
338  void squashFromDecode(const TheISA::PCState &newPC,
339  const DynInstPtr squashInst,
340  const InstSeqNum seq_num, ThreadID tid);
341 
343  bool checkStall(ThreadID tid) const;
344 
348 
349  public:
354  void squash(const TheISA::PCState &newPC, const InstSeqNum seq_num,
355  DynInstPtr squashInst, ThreadID tid);
356 
360  void tick();
361 
366 
372  void fetch(bool &status_change);
373 
376  {
377  return (addr & ~(fetchBufferMask));
378  }
379 
381  TheISA::Decoder *decoder[Impl::MaxThreads];
382 
384 
385  private:
386  DynInstPtr buildInst(ThreadID tid, StaticInstPtr staticInst,
387  StaticInstPtr curMacroop, TheISA::PCState thisPC,
388  TheISA::PCState nextPC, bool trace);
389 
392 
395 
397  ThreadID iqCount();
398 
400  ThreadID lsqCount();
401 
405 
408 
410  void profileStall(ThreadID tid);
411 
412  private:
414  O3CPU *cpu;
415 
418 
421 
424 
427 
430 
431  //Might be annoying how this name is different than the queue.
434 
437 
438  TheISA::PCState pc[Impl::MaxThreads];
439 
440  Addr fetchOffset[Impl::MaxThreads];
441 
442  StaticInstPtr macroop[Impl::MaxThreads];
443 
445  bool delayedCommit[Impl::MaxThreads];
446 
448  RequestPtr memReq[Impl::MaxThreads];
449 
454 
456  int numInst;
457 
459  struct Stalls {
460  bool decode;
461  bool drain;
462  };
463 
465  Stalls stalls[Impl::MaxThreads];
466 
469 
472 
475 
478 
480  unsigned fetchWidth;
481 
483  unsigned decodeWidth;
484 
487 
490 
493 
495  unsigned int cacheBlkSize;
496 
500  unsigned fetchBufferSize;
501 
504 
506  uint8_t *fetchBuffer[Impl::MaxThreads];
507 
509  Addr fetchBufferPC[Impl::MaxThreads];
510 
512  unsigned fetchQueueSize;
513 
516 
518  bool fetchBufferValid[Impl::MaxThreads];
519 
521  int instSize;
522 
524  Counter lastIcacheStall[Impl::MaxThreads];
525 
528 
531 
534 
537 
542 
545 
547  bool issuePipelinedIfetch[Impl::MaxThreads];
548 
551 
552  // @todo: Consider making these vectors and tracking on a per thread basis.
603 };
604 
605 #endif //__CPU_O3_FETCH_HH__
A MasterPort is a specialisation of a BaseMasterPort, which implements the default protocol for the t...
Definition: port.hh:75
MasterPort & getInstPort()
Definition: fetch.hh:383
Impl::O3CPU O3CPU
Definition: fetch.hh:81
Stats::Formula fetchRate
Number of instruction fetched per cycle.
Definition: fetch.hh:602
Impl::DynInst DynInst
Definition: fetch.hh:79
Addr fetchBufferMask
Mask to align a fetch address to a fetch buffer boundary.
Definition: fetch.hh:503
unsigned fetchWidth
The width of fetch in instructions.
Definition: fetch.hh:480
virtual void recvReqRetry()
Handles doing a retry of a failed fetch.
Definition: fetch_impl.hh:1690
ThreadID iqCount()
Returns the appropriate thread to fetch using the IQ count policy.
Definition: fetch_impl.hh:1517
void profileStall(ThreadID tid)
Profile the reasons of fetch stall.
Definition: fetch_impl.hh:1628
TheISA::Decoder * decoder[Impl::MaxThreads]
The decoder.
Definition: fetch.hh:381
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:83
Stats::Formula idleRate
Rate of how often fetch was idle.
Definition: fetch.hh:598
void tick()
Ticks the fetch stage, processing all inputs signals and fetching as many instructions as possible...
Definition: fetch_impl.hh:897
void resetStage()
Reset this pipeline stage.
Definition: fetch_impl.hh:354
void squashFromDecode(const TheISA::PCState &newPC, const DynInstPtr squashInst, const InstSeqNum seq_num, ThreadID tid)
Squashes a specific thread and resets the PC.
Definition: fetch_impl.hh:813
TimeBuffer< TimeStruct >::wire fromRename
Wire to get rename&#39;s information from backwards time buffer.
Definition: fetch.hh:423
void pipelineIcacheAccesses(ThreadID tid)
Pipeline the next I-cache access to the current one.
Definition: fetch_impl.hh:1598
Addr fetchBufferPC[Impl::MaxThreads]
The PC of the first instruction loaded into the fetch buffer.
Definition: fetch.hh:509
bool checkInterrupt(Addr pc)
Check if an interrupt is pending and that we need to handle.
Definition: fetch.hh:326
std::shared_ptr< Request > RequestPtr
Definition: request.hh:83
FetchStatus _status
Fetch status.
Definition: fetch.hh:205
Impl::DynInstPtr DynInstPtr
Definition: fetch.hh:80
bool checkStall(ThreadID tid) const
Checks if a thread is stalled.
Definition: fetch_impl.hh:828
Stats::Scalar fetchPendingTrapStallCycles
Total number of stall cycles caused by pending traps.
Definition: fetch.hh:580
ip6_addr_t addr
Definition: inet.hh:335
TimeBuffer< FetchStruct >::wire toDecode
Wire used to write any information heading to decode.
Definition: fetch.hh:433
int numInst
Tracks how many instructions has been fetched this cycle.
Definition: fetch.hh:456
void processCacheCompletion(PacketPtr pkt)
Processes cache completion event.
Definition: fetch_impl.hh:389
Stats::Scalar fetchMiscStallCycles
Total number of cycles spent in any other state.
Definition: fetch.hh:574
Stats::Scalar fetchIdleCycles
Stat for total number of cycles spent blocked due to other stages in the pipeline.
Definition: fetch.hh:570
const char * description() const
Return a C string describing the event.
Definition: fetch.hh:172
FinishTranslationEvent(DefaultFetch< Impl > *_fetch)
Definition: fetch.hh:151
Stats::Formula branchRate
Number of branch fetches per cycle.
Definition: fetch.hh:600
unsigned fetchQueueSize
The size of the fetch queue in micro-ops.
Definition: fetch.hh:512
Stats::Scalar fetchTlbSquashes
Total number of outstanding tlb accesses that were dropped due to a squash.
Definition: fetch.hh:594
TimeBuffer< TimeStruct >::wire fromDecode
Wire to get decode&#39;s information from backwards time buffer.
Definition: fetch.hh:420
Stats::Scalar icacheStallCycles
Stat for total number of cycles stalled due to an icache miss.
Definition: fetch.hh:554
Bitfield< 4, 0 > mode
ThreadID getFetchingThread()
Returns the appropriate thread to fetch, given the fetch policy.
Definition: fetch_impl.hh:1451
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Declaration of Statistics objects.
bool issuePipelinedIfetch[Impl::MaxThreads]
Set to true if a pipelined I-cache request should be issued.
Definition: fetch.hh:547
ThreadID numThreads
Number of threads.
Definition: fetch.hh:530
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2508
CPUPol::TimeStruct TimeStruct
Definition: fetch.hh:85
DefaultFetch< Impl > * fetch
Definition: fetch.hh:146
Stats::Scalar fetchedInsts
Stat for total number of fetched instructions.
Definition: fetch.hh:556
Stats::Scalar fetchNoActiveThreadStallCycles
Total number of stall cycles caused by no active threads to run.
Definition: fetch.hh:578
uint32_t MachInst
Definition: types.hh:40
void drainSanityCheck() const
Perform sanity checks after a drain.
Definition: fetch_impl.hh:443
FetchStatus
Overall fetch status.
Definition: fetch.hh:182
Stats::Distribution fetchNisnDist
Distribution of number of instructions fetched each cycle.
Definition: fetch.hh:596
void deactivateThread(ThreadID tid)
For priority-based fetch policies, need to keep update priorityList.
Definition: fetch_impl.hh:547
Stats::Scalar fetchPendingDrainCycles
Total number of cycles spent in waiting for drains.
Definition: fetch.hh:576
TheISA::MachInst MachInst
Typedefs from ISA.
Definition: fetch.hh:88
PacketPtr retryPkt
The packet that is waiting to be retried.
Definition: fetch.hh:489
ThreadID numFetchingThreads
Number of threads that are actively fetching.
Definition: fetch.hh:533
Cycles iewToFetchDelay
IEW to fetch delay.
Definition: fetch.hh:474
void process()
Process the delayed finish translation.
Definition: fetch.hh:166
void drainStall(ThreadID tid)
Stall the fetch stage after reaching a safe drain point.
Definition: fetch_impl.hh:501
Stats::Scalar fetchCycles
Stat for total number of cycles spent fetching.
Definition: fetch.hh:562
ThreadID threadFetched
Thread ID being fetched.
Definition: fetch.hh:536
void finish(const Fault &fault, const RequestPtr &req, ThreadContext *tc, BaseTLB::Mode mode)
Definition: fetch.hh:130
void regStats()
Registers statistics.
Definition: fetch_impl.hh:171
void clearStates(ThreadID tid)
Clear all thread-specific states.
Definition: fetch_impl.hh:334
Addr fetchOffset[Impl::MaxThreads]
Definition: fetch.hh:440
ThreadID roundRobin()
Returns the appropriate thread to fetch using a round robin policy.
Definition: fetch_impl.hh:1487
void switchToActive()
Changes the status of this stage to active, and indicates this to the CPU.
Definition: fetch_impl.hh:521
DefaultFetch class handles both single threaded and SMT fetch.
Definition: fetch.hh:74
A simple distribution stat.
Definition: statistics.hh:2592
int instSize
Size of instructions.
Definition: fetch.hh:521
void finishTranslation(const Fault &fault, const RequestPtr &mem_req)
Definition: fetch_impl.hh:654
Stats::Scalar fetchTlbCycles
Stat for total number of cycles spent waiting for translation.
Definition: fetch.hh:566
RequestPtr memReq[Impl::MaxThreads]
Memory request used to access cache.
Definition: fetch.hh:448
IcachePort icachePort
Instruction port.
Definition: fetch.hh:544
bool fetchCacheLine(Addr vaddr, ThreadID tid, Addr pc)
Fetches the cache line that contains the fetch PC.
Definition: fetch_impl.hh:604
IcachePort(DefaultFetch< Impl > *_fetch, FullO3CPU< Impl > *_cpu)
Default constructor.
Definition: fetch.hh:101
DefaultFetch(O3CPU *_cpu, DerivO3CPUParams *params)
DefaultFetch constructor.
Definition: fetch_impl.hh:83
uint64_t InstSeqNum
Definition: inst_seq.hh:40
void setReq(const RequestPtr &_req)
Definition: fetch.hh:160
ThreadID retryTid
The thread that is waiting on the cache to tell fetch to retry.
Definition: fetch.hh:492
Port Object Declaration.
Stats::Scalar predictedBranches
Stat for total number of predicted branches.
Definition: fetch.hh:560
DefaultFetch< Impl > * fetch
Pointer to fetch.
Definition: fetch.hh:97
void setActiveThreads(std::list< ThreadID > *at_ptr)
Sets pointer to list of active threads.
Definition: fetch_impl.hh:307
std::list< ThreadID > * activeThreads
List of Active Threads.
Definition: fetch.hh:527
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
void regProbePoints()
Registers probes.
Definition: fetch_impl.hh:161
TimeBuffer< TimeStruct >::wire fromCommit
Wire to get commit&#39;s information from backwards time buffer.
Definition: fetch.hh:429
Stats::Scalar fetchIcacheWaitRetryStallCycles
Total number of stall cycles caused by I-cache wait retrys.
Definition: fetch.hh:584
int64_t Counter
Statistics counter type.
Definition: types.hh:58
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:255
uint8_t * fetchBuffer[Impl::MaxThreads]
The fetch data that is being fetched and buffered.
Definition: fetch.hh:506
std::deque< DynInstPtr > fetchQueue[Impl::MaxThreads]
Queue of fetched instructions.
Definition: fetch.hh:515
Impl::CPUPol CPUPol
Typedefs from Impl.
Definition: fetch.hh:78
Stats::Scalar fetchIcacheSquashes
Total number of outstanding icache accesses that were dropped due to a squash.
Definition: fetch.hh:590
bool interruptPending
Checks if there is an interrupt pending.
Definition: fetch.hh:541
ThreadID branchCount()
Returns the appropriate thread to fetch using the branch count policy.
Definition: fetch_impl.hh:1590
unsigned decodeWidth
The width of decode in instructions.
Definition: fetch.hh:483
TheISA::PCState pc[Impl::MaxThreads]
Definition: fetch.hh:438
Counter lastIcacheStall[Impl::MaxThreads]
Icache stall statistics.
Definition: fetch.hh:524
A formula for statistics that is calculated when printed.
Definition: statistics.hh:3012
Mode
Definition: tlb.hh:59
Basically a wrapper class to hold both the branch predictor and the BTB.
Definition: bpred_unit.hh:67
FinishTranslationEvent finishTranslationEvent
Event used to delay fault generation of translation faults.
Definition: fetch.hh:550
Stats::Scalar fetchPendingQuiesceStallCycles
Total number of stall cycles caused by pending quiesce instructions.
Definition: fetch.hh:582
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:227
void setTimeBuffer(TimeBuffer< TimeStruct > *time_buffer)
Sets the main backwards communication time buffer pointer.
Definition: fetch_impl.hh:294
void setFetchQueue(TimeBuffer< FetchStruct > *fq_ptr)
Sets pointer to time buffer used to communicate to the next stage.
Definition: fetch_impl.hh:314
Addr fetchBufferAlignPC(Addr addr)
Align a PC to the start of a fetch buffer block.
Definition: fetch.hh:375
ThreadStatus fetchStatus[Impl::MaxThreads]
Per-thread status.
Definition: fetch.hh:208
Declaration of the Packet class.
Stalls stalls[Impl::MaxThreads]
Tracks which stages are telling fetch to stall.
Definition: fetch.hh:465
O3CPU * cpu
Pointer to the O3CPU.
Definition: fetch.hh:414
bool cacheBlocked
Is the cache blocked? If so no threads can access it.
Definition: fetch.hh:486
Definition: eventq.hh:189
FetchTranslation(DefaultFetch< Impl > *_fetch)
Definition: fetch.hh:121
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
FetchStatus updateFetchStatus()
Updates overall fetch stage status; to be called at the end of each cycle.
Definition: fetch_impl.hh:843
void takeOverFrom(Port *old)
A utility function to make it easier to swap out ports.
Definition: port.hh:132
Cycles decodeToFetchDelay
Decode to fetch delay.
Definition: fetch.hh:468
Cycles commitToFetchDelay
Commit to fetch delay.
Definition: fetch.hh:477
void switchToInactive()
Changes the status of this stage to inactive, and indicates this to the CPU.
Definition: fetch_impl.hh:534
const std::string name() const
Return port name (for DPRINTF).
Definition: port.hh:106
void startupStage()
Initialize stage.
Definition: fetch_impl.hh:322
bool lookupAndUpdateNextPC(const DynInstPtr &inst, TheISA::PCState &pc)
Looks up in the branch predictor to see if the next PC should be either next PC+=MachInst or a branch...
Definition: fetch_impl.hh:558
ProbePointArg< RequestPtr > * ppFetchRequestSent
To probe when a fetch request is successfully sent.
Definition: fetch.hh:219
ProbePointArg< DynInstPtr > * ppFetch
Probe points.
Definition: fetch.hh:217
CPUPol::FetchStruct FetchStruct
Typedefs from the CPU policy.
Definition: fetch.hh:84
void setFault(Fault _fault)
Definition: fetch.hh:155
Stats::Scalar fetchSquashCycles
Stat for total number of cycles spent squashing.
Definition: fetch.hh:564
void squash(const TheISA::PCState &newPC, const InstSeqNum seq_num, DynInstPtr squashInst, ThreadID tid)
Squashes a specific thread and resets the PC.
Definition: fetch_impl.hh:883
unsigned fetchBufferSize
The size of the fetch buffer in bytes.
Definition: fetch.hh:500
ThreadID lsqCount()
Returns the appropriate thread to fetch using the LSQ count policy.
Definition: fetch_impl.hh:1554
FetchPolicy fetchPolicy
Fetch policy.
Definition: fetch.hh:211
Cycles renameToFetchDelay
Rename to fetch delay.
Definition: fetch.hh:471
virtual bool recvTimingResp(PacketPtr pkt)
Timing version of receive.
Definition: fetch_impl.hh:1677
bool isDrained() const
Has the stage drained?
Definition: fetch_impl.hh:461
Source of possible stalls.
Definition: fetch.hh:459
void wakeFromQuiesce()
Tells fetch to wake up from a quiesce instruction.
Definition: fetch_impl.hh:511
Stats::Scalar fetchBlockedCycles
Total number of cycles spent blocked.
Definition: fetch.hh:572
ThreadStatus
Individual thread status.
Definition: fetch.hh:188
Stats::Scalar fetchedCacheLines
Stat for total number of fetched cache lines.
Definition: fetch.hh:586
void drainResume()
Resume after a drain.
Definition: fetch_impl.hh:433
std::list< ThreadID > priorityList
List that has the threads organized by priority.
Definition: fetch.hh:214
bool checkSignalsAndUpdate(ThreadID tid)
Checks all input signals and updates the status as necessary.
Definition: fetch_impl.hh:999
StaticInstPtr macroop[Impl::MaxThreads]
Definition: fetch.hh:442
bool delayedCommit[Impl::MaxThreads]
Can the fetch stage redirect from an interrupt on this instruction?
Definition: fetch.hh:445
Stats::Scalar fetchedBranches
Total number of fetched branches.
Definition: fetch.hh:558
DynInstPtr buildInst(ThreadID tid, StaticInstPtr staticInst, StaticInstPtr curMacroop, TheISA::PCState thisPC, TheISA::PCState nextPC, bool trace)
Definition: fetch_impl.hh:1104
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
BPredUnit * branchPred
BPredUnit.
Definition: fetch.hh:436
TimeBuffer< TimeStruct > * timeBuffer
Time buffer interface.
Definition: fetch.hh:417
bool wroteToTimeBuffer
Variable that tracks if fetch has written to the time buffer this cycle.
Definition: fetch.hh:453
void doSquash(const TheISA::PCState &newPC, const DynInstPtr squashInst, ThreadID tid)
Squashes a specific thread and resets the PC.
Definition: fetch_impl.hh:761
DefaultFetch< Impl > * fetch
Definition: fetch.hh:118
unsigned int cacheBlkSize
Cache block size.
Definition: fetch.hh:495
bool fetchBufferValid[Impl::MaxThreads]
Whether or not the fetch buffer data is valid.
Definition: fetch.hh:518
IcachePort class for instruction fetch.
Definition: fetch.hh:93
FullO3CPU class, has each of the stages (fetch through commit) within it, as well as all of the time ...
Definition: cpu.hh:98
void markDelayed()
Signal that the translation has been delayed due to a hw page table walk.
Definition: fetch.hh:126
TimeBuffer< TimeStruct >::wire fromIEW
Wire to get iew&#39;s information from backwards time buffer.
Definition: fetch.hh:426

Generated on Fri Feb 28 2020 16:26:59 for gem5 by doxygen 1.8.13