gem5  v21.1.0.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, 2016-2018, 2020-2021 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) 2006 The Regents of The University of Michigan
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 #ifndef __CPU_CHECKER_CPU_HH__
43 #define __CPU_CHECKER_CPU_HH__
44 
45 #include <list>
46 #include <map>
47 #include <queue>
48 
49 #include "arch/pcstate.hh"
50 #include "base/statistics.hh"
51 #include "cpu/base.hh"
52 #include "cpu/exec_context.hh"
53 #include "cpu/inst_res.hh"
54 #include "cpu/o3/dyn_inst.hh"
55 #include "cpu/pc_event.hh"
56 #include "cpu/simple_thread.hh"
57 #include "cpu/static_inst.hh"
58 #include "debug/Checker.hh"
59 #include "mem/request.hh"
60 #include "params/CheckerCPU.hh"
61 #include "sim/eventq.hh"
62 
63 namespace gem5
64 {
65 
66 class ThreadContext;
67 class Request;
68 
85 class CheckerCPU : public BaseCPU, public ExecContext
86 {
87  protected:
90 
92 
93  public:
94  void init() override;
95 
97  CheckerCPU(const Params &p);
98  virtual ~CheckerCPU();
99 
100  void setSystem(System *system);
101 
102  void setIcachePort(RequestPort *icache_port);
103 
104  void setDcachePort(RequestPort *dcache_port);
105 
106  Port &
107  getDataPort() override
108  {
109  // the checker does not have ports on its own so return the
110  // data port of the actual CPU core
111  assert(dcachePort);
112  return *dcachePort;
113  }
114 
115  Port &
116  getInstPort() override
117  {
118  // the checker does not have ports on its own so return the
119  // data port of the actual CPU core
120  assert(icachePort);
121  return *icachePort;
122  }
123 
124  protected:
125 
127 
129 
132 
134 
136 
137  // ISAs like ARM can have multiple destination registers to check,
138  // keep them all in a std::queue
139  std::queue<InstResult> result;
140 
143 
144  // number of simulated instructions
147 
148  std::queue<int> miscRegIdxs;
149 
150  public:
151 
152  // Primary thread being run.
154 
155  BaseMMU* getMMUPtr() { return mmu; }
156 
157  virtual Counter totalInsts() const override
158  {
159  return 0;
160  }
161 
162  virtual Counter totalOps() const override
163  {
164  return 0;
165  }
166 
167  // number of simulated loads
170 
171  void serialize(CheckpointOut &cp) const override;
172  void unserialize(CheckpointIn &cp) override;
173 
174  // The register accessor methods provide the index of the
175  // instruction's operand (e.g., 0 or 1), not the architectural
176  // register index, to simplify the implementation of register
177  // renaming. We find the architectural register index by indexing
178  // into the instruction's own operand index table. Note that a
179  // raw pointer to the StaticInst is provided instead of a
180  // ref-counted StaticInstPtr to redice overhead. This is fine as
181  // long as these methods don't copy the pointer into any long-term
182  // storage (which is pretty hard to imagine they would have reason
183  // to do).
184 
185  RegVal
186  readIntRegOperand(const StaticInst *si, int idx) override
187  {
188  const RegId& reg = si->srcRegIdx(idx);
189  assert(reg.is(IntRegClass));
190  return thread->readIntReg(reg.index());
191  }
192 
193  RegVal
194  readFloatRegOperandBits(const StaticInst *si, int idx) override
195  {
196  const RegId& reg = si->srcRegIdx(idx);
197  assert(reg.is(FloatRegClass));
198  return thread->readFloatReg(reg.index());
199  }
200 
205  readVecRegOperand(const StaticInst *si, int idx) const override
206  {
207  const RegId& reg = si->srcRegIdx(idx);
208  assert(reg.is(VecRegClass));
209  return thread->readVecReg(reg);
210  }
211 
216  getWritableVecRegOperand(const StaticInst *si, int idx) override
217  {
218  const RegId& reg = si->destRegIdx(idx);
219  assert(reg.is(VecRegClass));
220  return thread->getWritableVecReg(reg);
221  }
222 
224  readVecElemOperand(const StaticInst *si, int idx) const override
225  {
226  const RegId& reg = si->srcRegIdx(idx);
227  return thread->readVecElem(reg);
228  }
229 
231  readVecPredRegOperand(const StaticInst *si, int idx) const override
232  {
233  const RegId& reg = si->srcRegIdx(idx);
234  assert(reg.is(VecPredRegClass));
235  return thread->readVecPredReg(reg);
236  }
237 
239  getWritableVecPredRegOperand(const StaticInst *si, int idx) override
240  {
241  const RegId& reg = si->destRegIdx(idx);
242  assert(reg.is(VecPredRegClass));
244  }
245 
246  RegVal
247  readCCRegOperand(const StaticInst *si, int idx) override
248  {
249  const RegId& reg = si->srcRegIdx(idx);
250  assert(reg.is(CCRegClass));
251  return thread->readCCReg(reg.index());
252  }
253 
254  template<typename T>
255  void
257  {
258  result.push(InstResult(std::forward<T>(t),
260  }
261 
262  template<typename T>
263  void
265  {
266  result.push(InstResult(std::forward<T>(t),
268  }
269 
270  template<typename T>
271  void
273  {
274  result.push(InstResult(std::forward<T>(t),
276  }
277 
278  template<typename T>
279  void
281  {
282  result.push(InstResult(std::forward<T>(t),
284  }
285 
286  void
287  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
288  {
289  const RegId& reg = si->destRegIdx(idx);
290  assert(reg.is(IntRegClass));
291  thread->setIntReg(reg.index(), val);
293  }
294 
295  void
296  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
297  {
298  const RegId& reg = si->destRegIdx(idx);
299  assert(reg.is(FloatRegClass));
300  thread->setFloatReg(reg.index(), val);
302  }
303 
304  void
305  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
306  {
307  const RegId& reg = si->destRegIdx(idx);
308  assert(reg.is(CCRegClass));
309  thread->setCCReg(reg.index(), val);
310  setScalarResult((uint64_t)val);
311  }
312 
313  void
314  setVecRegOperand(const StaticInst *si, int idx,
315  const TheISA::VecRegContainer& val) override
316  {
317  const RegId& reg = si->destRegIdx(idx);
318  assert(reg.is(VecRegClass));
319  thread->setVecReg(reg, val);
320  setVecResult(val);
321  }
322 
323  void
324  setVecElemOperand(const StaticInst *si, int idx,
325  const TheISA::VecElem val) override
326  {
327  const RegId& reg = si->destRegIdx(idx);
328  assert(reg.is(VecElemClass));
331  }
332 
333  void setVecPredRegOperand(const StaticInst *si, int idx,
334  const TheISA::VecPredRegContainer& val) override
335  {
336  const RegId& reg = si->destRegIdx(idx);
337  assert(reg.is(VecPredRegClass));
340  }
341 
342  bool readPredicate() const override { return thread->readPredicate(); }
343 
344  void
345  setPredicate(bool val) override
346  {
348  }
349 
350  bool
351  readMemAccPredicate() const override
352  {
353  return thread->readMemAccPredicate();
354  }
355 
356  void
357  setMemAccPredicate(bool val) override
358  {
360  }
361 
362  uint64_t
363  getHtmTransactionUid() const override
364  {
365  panic("not yet supported!");
366  return 0;
367  };
368 
369  uint64_t
370  newHtmTransactionUid() const override
371  {
372  panic("not yet supported!");
373  return 0;
374  };
375 
376  Fault
378  {
379  panic("not yet supported!");
380  return NoFault;
381  }
382 
383  bool
384  inHtmTransactionalState() const override
385  {
386  return (getHtmTransactionalDepth() > 0);
387  }
388 
389  uint64_t
390  getHtmTransactionalDepth() const override
391  {
394  }
395 
396  TheISA::PCState pcState() const override { return thread->pcState(); }
397  void
398  pcState(const TheISA::PCState &val) override
399  {
400  DPRINTF(Checker, "Changing PC to %s, old PC %s.\n",
401  val, thread->pcState());
402  thread->pcState(val);
403  }
404  Addr instAddr() { return thread->instAddr(); }
406  MicroPC microPC() { return thread->microPC(); }
408 
409  RegVal
410  readMiscRegNoEffect(int misc_reg) const
411  {
412  return thread->readMiscRegNoEffect(misc_reg);
413  }
414 
415  RegVal
416  readMiscReg(int misc_reg) override
417  {
418  return thread->readMiscReg(misc_reg);
419  }
420 
421  void
423  {
424  DPRINTF(Checker, "Setting misc reg %d with no effect to check later\n",
425  misc_reg);
426  miscRegIdxs.push(misc_reg);
427  return thread->setMiscRegNoEffect(misc_reg, val);
428  }
429 
430  void
431  setMiscReg(int misc_reg, RegVal val) override
432  {
433  DPRINTF(Checker, "Setting misc reg %d with effect to check later\n",
434  misc_reg);
435  miscRegIdxs.push(misc_reg);
436  return thread->setMiscReg(misc_reg, val);
437  }
438 
439  RegVal
440  readMiscRegOperand(const StaticInst *si, int idx) override
441  {
442  const RegId& reg = si->srcRegIdx(idx);
443  assert(reg.is(MiscRegClass));
444  return thread->readMiscReg(reg.index());
445  }
446 
447  void
448  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
449  {
450  const RegId& reg = si->destRegIdx(idx);
451  assert(reg.is(MiscRegClass));
452  return this->setMiscReg(reg.index(), val);
453  }
454 
456 
457  void
459  {
460  changedPC = true;
461  newPCState = val;
462  }
463 
464  void
465  demapPage(Addr vaddr, uint64_t asn) override
466  {
467  mmu->demapPage(vaddr, asn);
468  }
469 
470  // monitor/mwait funtions
471  void armMonitor(Addr address) override { BaseCPU::armMonitor(0, address); }
472  bool mwait(PacketPtr pkt) override { return BaseCPU::mwait(0, pkt); }
473 
474  void
476  {
477  return BaseCPU::mwaitAtomic(0, tc, thread->mmu);
478  }
479 
481  { return BaseCPU::getCpuAddrMonitor(0); }
482 
499  RequestPtr genMemFragmentRequest(Addr frag_addr, int size,
500  Request::Flags flags,
501  const std::vector<bool>& byte_enable,
502  int& frag_size, int& size_left) const;
503 
504  Fault readMem(Addr addr, uint8_t *data, unsigned size,
505  Request::Flags flags,
506  const std::vector<bool>& byte_enable)
507  override;
508 
509  Fault writeMem(uint8_t *data, unsigned size, Addr addr,
510  Request::Flags flags, uint64_t *res,
511  const std::vector<bool>& byte_enable)
512  override;
513 
514  Fault amoMem(Addr addr, uint8_t* data, unsigned size,
515  Request::Flags flags, AtomicOpFunctorPtr amo_op) override
516  {
517  panic("AMO is not supported yet in CPU checker\n");
518  }
519 
520  unsigned int
521  readStCondFailures() const override {
522  return thread->readStCondFailures();
523  }
524 
525  void setStCondFailures(unsigned int sc_failures) override {}
527 
528  void wakeup(ThreadID tid) override { }
529 
530  void
532  {
533  if (exitOnError)
534  dumpAndExit();
535  }
536 
537  bool checkFlags(const RequestPtr &unverified_req, Addr vAddr,
538  Addr pAddr, int flags);
539 
540  void dumpAndExit();
541 
542  ThreadContext *tcBase() const override { return tc; }
544 
548 
549  bool changedPC;
555 
557 };
558 
565 template <class DynInstPtr>
566 class Checker : public CheckerCPU
567 {
568  public:
569  Checker(const Params &p)
570  : CheckerCPU(p), updateThisCycle(false), unverifiedInst(NULL)
571  { }
572 
573  void switchOut();
574  void takeOverFrom(BaseCPU *oldCPU);
575 
576  void advancePC(const Fault &fault);
577 
578  void verify(const DynInstPtr &inst);
579 
580  void validateInst(const DynInstPtr &inst);
581  void validateExecution(const DynInstPtr &inst);
582  void validateState();
583 
584  void copyResult(const DynInstPtr &inst, const InstResult& mismatch_val,
585  int start_idx);
586  void handlePendingInt();
587 
588  private:
589  void handleError(const DynInstPtr &inst)
590  {
591  if (exitOnError) {
592  dumpAndExit(inst);
593  } else if (updateOnError) {
594  updateThisCycle = true;
595  }
596  }
597 
598  void dumpAndExit(const DynInstPtr &inst);
599 
601 
603 
606  void dumpInsts();
607 };
608 
609 } // namespace gem5
610 
611 #endif // __CPU_CHECKER_CPU_HH__
gem5::SimpleThread::readMiscReg
RegVal readMiscReg(RegIndex misc_reg) override
Definition: simple_thread.hh:452
gem5::CheckerCPU::CheckerCPU
CheckerCPU(const Params &p)
Definition: cpu.cc:65
gem5::SimpleThread::readIntReg
RegVal readIntReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:274
gem5::VecElemClass
@ VecElemClass
Vector Register Native Elem lane.
Definition: reg_class.hh:62
gem5::SimpleThread::readVecElem
const TheISA::VecElem & readVecElem(const RegId &reg) const override
Definition: simple_thread.hh:318
gem5::CCRegClass
@ CCRegClass
Condition-code register.
Definition: reg_class.hh:64
gem5::BaseCPU::armMonitor
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:205
gem5::NoFault
constexpr decltype(nullptr) NoFault
Definition: types.hh:260
gem5::Checker::validateInst
void validateInst(const DynInstPtr &inst)
Definition: cpu_impl.hh:446
gem5::CheckerCPU::numInst
Counter numInst
Definition: cpu.hh:145
gem5::CheckerCPU::amoMem
Fault amoMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
Definition: cpu.hh:514
gem5::CheckerCPU::setVecResult
void setVecResult(T &&t)
Definition: cpu.hh:264
gem5::CheckerCPU::totalInsts
virtual Counter totalInsts() const override
Definition: cpu.hh:157
gem5::Checker::verify
void verify(const DynInstPtr &inst)
Definition: cpu_impl.hh:122
gem5::SimpleThread::htmTransactionStops
int64_t htmTransactionStops
Definition: simple_thread.hh:140
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::CheckerCPU::readCCRegOperand
RegVal readCCRegOperand(const StaticInst *si, int idx) override
Definition: cpu.hh:247
gem5::SimpleThread::setIntReg
void setIntReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:367
gem5::BaseCPU::mwaitAtomic
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseMMU *mmu)
Definition: base.cc:240
gem5::ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: vec.hh:68
gem5::SimpleThread::readVecReg
const TheISA::VecRegContainer & readVecReg(const RegId &reg) const override
Definition: simple_thread.hh:296
gem5::CheckerCPU::serialize
void serialize(CheckpointOut &cp) const override
Serialize this object to the given output stream.
Definition: cpu.cc:130
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::Checker::updateThisCycle
bool updateThisCycle
Definition: cpu.hh:600
gem5::CheckerCPU::pcState
void pcState(const TheISA::PCState &val) override
Definition: cpu.hh:398
gem5::CheckerCPU::pcState
TheISA::PCState pcState() const override
Definition: cpu.hh:396
gem5::CheckerCPU::getMMUPtr
BaseMMU * getMMUPtr()
Definition: cpu.hh:155
gem5::CheckerCPU::readPredicate
bool readPredicate() const override
Definition: cpu.hh:342
gem5::CheckerCPU::readFloatRegOperandBits
RegVal readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
Definition: cpu.hh:194
gem5::CheckerCPU::~CheckerCPU
virtual ~CheckerCPU()
Definition: cpu.cc:92
gem5::Checker::advancePC
void advancePC(const Fault &fault)
Definition: cpu_impl.hh:67
gem5::InstResult::ResultType::Scalar
@ Scalar
gem5::CheckerCPU::readMiscRegNoEffect
RegVal readMiscRegNoEffect(int misc_reg) const
Definition: cpu.hh:410
gem5::CheckerCPU::setStCondFailures
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: cpu.hh:525
gem5::CheckerCPU::initiateHtmCmd
Fault initiateHtmCmd(Request::Flags flags) override
Initiate an HTM command, e.g.
Definition: cpu.hh:377
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::SimpleThread::instAddr
Addr instAddr() const override
Definition: simple_thread.hh:439
gem5::CheckerCPU::unverifiedReq
RequestPtr unverifiedReq
Definition: cpu.hh:546
gem5::CheckerCPU::readStCondFailures
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: cpu.hh:521
gem5::CheckerCPU::setVecElemOperand
void setVecElemOperand(const StaticInst *si, int idx, const TheISA::VecElem val) override
Sets a vector register to a value.
Definition: cpu.hh:324
gem5::o3::DynInstPtr
RefCountingPtr< DynInst > DynInstPtr
Definition: dyn_inst_ptr.hh:55
gem5::FloatRegClass
@ FloatRegClass
Floating-point register.
Definition: reg_class.hh:58
gem5::CheckerCPU::genMemFragmentRequest
RequestPtr genMemFragmentRequest(Addr frag_addr, int size, Request::Flags flags, const std::vector< bool > &byte_enable, int &frag_size, int &size_left) const
Helper function used to generate the request for a single fragment of a memory access.
Definition: cpu.cc:140
gem5::CheckerCPU::workload
std::vector< Process * > workload
Definition: cpu.hh:126
gem5::Checker::instList
std::list< DynInstPtr > instList
Definition: cpu.hh:604
gem5::CheckerCPU::microPC
MicroPC microPC()
Definition: cpu.hh:406
gem5::CheckerCPU::armMonitor
void armMonitor(Addr address) override
Definition: cpu.hh:471
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:775
gem5::SimpleThread::setMiscReg
void setMiscReg(RegIndex misc_reg, RegVal val) override
Definition: simple_thread.hh:464
gem5::MiscRegClass
@ MiscRegClass
Control (misc) register.
Definition: reg_class.hh:65
gem5::Checker::handleError
void handleError(const DynInstPtr &inst)
Definition: cpu.hh:589
gem5::CheckerCPU::setCCRegOperand
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
Definition: cpu.hh:305
gem5::VecPredRegClass
@ VecPredRegClass
Definition: reg_class.hh:63
gem5::BaseCPU::system
System * system
Definition: base.hh:376
gem5::CheckerCPU::thread
SimpleThread * thread
Definition: cpu.hh:153
gem5::SimpleThread::setVecReg
void setVecReg(const RegId &reg, const TheISA::VecRegContainer &val) override
Definition: simple_thread.hh:390
gem5::CheckerCPU::getWritableVecRegOperand
TheISA::VecRegContainer & getWritableVecRegOperand(const StaticInst *si, int idx) override
Read destination vector register operand for modification.
Definition: cpu.hh:216
std::vector
STL vector class.
Definition: stl.hh:37
gem5::CheckerCPU::readVecRegOperand
const TheISA::VecRegContainer & readVecRegOperand(const StaticInst *si, int idx) const override
Read source vector register operand.
Definition: cpu.hh:205
gem5::SimpleThread::readCCReg
RegVal readCCReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:355
dyn_inst.hh
gem5::CheckerCPU::readMemAccPredicate
bool readMemAccPredicate() const override
Definition: cpu.hh:351
gem5::CheckerCPU::readMiscRegOperand
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
Definition: cpu.hh:440
gem5::CheckerCPU::miscRegIdxs
std::queue< int > miscRegIdxs
Definition: cpu.hh:148
gem5::CheckerCPU::willChangePC
bool willChangePC
Definition: cpu.hh:550
gem5::CheckerCPU::nextInstAddr
Addr nextInstAddr()
Definition: cpu.hh:405
gem5::SimpleThread::htmTransactionStarts
int64_t htmTransactionStarts
Definition: simple_thread.hh:139
inst_res.hh
gem5::Checker::copyResult
void copyResult(const DynInstPtr &inst, const InstResult &mismatch_val, int start_idx)
Definition: cpu_impl.hh:585
gem5::SimpleThread
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
Definition: simple_thread.hh:94
gem5::RegId::index
RegIndex index() const
Index accessors.
Definition: reg_class.hh:154
gem5::CheckerCPU::writeMem
Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable) override
Definition: cpu.cc:251
request.hh
gem5::SimpleThread::setVecElem
void setVecElem(const RegId &reg, const TheISA::VecElem &val) override
Definition: simple_thread.hh:400
gem5::SimpleThread::setVecPredReg
void setVecPredReg(const RegId &reg, const TheISA::VecPredRegContainer &val) override
Definition: simple_thread.hh:410
gem5::CheckerCPU::getHtmTransactionUid
uint64_t getHtmTransactionUid() const override
Definition: cpu.hh:363
gem5::CheckerCPU::wakeup
void wakeup(ThreadID tid) override
Definition: cpu.hh:528
gem5::Checker::handlePendingInt
void handlePendingInt()
Definition: cpu_impl.hh:88
gem5::RefCountingPtr< StaticInst >
gem5::BaseMMU
Definition: mmu.hh:50
gem5::CheckerCPU::setVecPredRegOperand
void setVecPredRegOperand(const StaticInst *si, int idx, const TheISA::VecPredRegContainer &val) override
Sets a destination predicate register operand to a value.
Definition: cpu.hh:333
gem5::AddressMonitor
Definition: base.hh:73
gem5::CheckerCPU::youngestSN
InstSeqNum youngestSN
Definition: cpu.hh:556
gem5::CheckerCPU::getWritableVecPredRegOperand
TheISA::VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
Definition: cpu.hh:239
gem5::RequestPort
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition: port.hh:77
gem5::CheckerCPU::recordPCChange
void recordPCChange(const TheISA::PCState &val)
Definition: cpu.hh:458
gem5::Checker::Checker
Checker(const Params &p)
Definition: cpu.hh:569
gem5::SimpleThread::microPC
MicroPC microPC() const override
Definition: simple_thread.hh:441
gem5::CheckerCPU::dumpAndExit
void dumpAndExit()
Definition: cpu.cc:373
gem5::Checker::unverifiedInst
DynInstPtr unverifiedInst
Definition: cpu.hh:602
gem5::SimpleThread::readStCondFailures
unsigned readStCondFailures() const override
Definition: simple_thread.hh:475
gem5::SimpleThread::mmu
BaseMMU * mmu
Definition: simple_thread.hh:134
gem5::CheckerCPU::setMiscReg
void setMiscReg(int misc_reg, RegVal val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register.
Definition: cpu.hh:431
gem5::MicroPC
uint16_t MicroPC
Definition: types.hh:149
gem5::CheckerCPU::tc
ThreadContext * tc
Definition: cpu.hh:133
gem5::SimpleThread::readMemAccPredicate
bool readMemAccPredicate()
Definition: simple_thread.hh:478
gem5::Flags< FlagsType >
gem5::CheckerCPU::readVecPredRegOperand
const TheISA::VecPredRegContainer & readVecPredRegOperand(const StaticInst *si, int idx) const override
Predicate registers interface.
Definition: cpu.hh:231
gem5::CheckerCPU::setMemAccPredicate
void setMemAccPredicate(bool val) override
Definition: cpu.hh:357
gem5::System
Definition: system.hh:77
gem5::StaticInst
Base, ISA-independent static instruction class.
Definition: static_inst.hh:88
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:93
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:255
gem5::SimpleThread::readPredicate
bool readPredicate() const
Definition: simple_thread.hh:442
gem5::CheckerCPU::dcachePort
RequestPort * dcachePort
Definition: cpu.hh:131
gem5::CheckerCPU::readVecElemOperand
TheISA::VecElem readVecElemOperand(const StaticInst *si, int idx) const override
Vector Elem Interfaces.
Definition: cpu.hh:224
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:186
gem5::SimpleThread::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
Definition: simple_thread.hh:446
gem5::CheckerCPU::demapPage
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: cpu.hh:465
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:283
gem5::CheckerCPU::setVecPredResult
void setVecPredResult(T &&t)
Definition: cpu.hh:280
gem5::CheckerCPU::newHtmTransactionUid
uint64_t newHtmTransactionUid() const override
Definition: cpu.hh:370
gem5::CheckerCPU::zeroReg
const RegIndex zeroReg
Definition: cpu.hh:91
gem5::MipsISA::PCState
GenericISA::DelaySlotPCState< 4 > PCState
Definition: pcstate.hh:40
gem5::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
statistics.hh
gem5::CheckerCPU
CheckerCPU class.
Definition: cpu.hh:85
gem5::SimpleThread::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex misc_reg, RegVal val) override
Definition: simple_thread.hh:458
gem5::SimpleThread::setMemAccPredicate
void setMemAccPredicate(bool val)
Definition: simple_thread.hh:484
gem5::RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:92
gem5::BaseMMU::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: mmu.cc:58
gem5::BaseCPU
Definition: base.hh:107
gem5::CheckerCPU::icachePort
RequestPort * icachePort
Definition: cpu.hh:130
gem5::CheckerCPU::mwaitAtomic
void mwaitAtomic(ThreadContext *tc) override
Definition: cpu.hh:475
gem5::ArmISA::VecRegContainer
gem5::VecRegContainer< NumVecElemPerVecReg *sizeof(VecElem)> VecRegContainer
Definition: vec.hh:62
gem5::CheckerCPU::systemPtr
System * systemPtr
Definition: cpu.hh:128
static_inst.hh
gem5::CheckerCPU::tcBase
ThreadContext * tcBase() const override
Returns a pointer to the ThreadContext.
Definition: cpu.hh:542
gem5::SimpleThread::pcState
TheISA::PCState pcState() const override
Definition: simple_thread.hh:430
gem5::Checker::validateExecution
void validateExecution(const DynInstPtr &inst)
Definition: cpu_impl.hh:467
gem5::CheckerCPU::result
std::queue< InstResult > result
Definition: cpu.hh:139
gem5::CheckerCPU::numLoad
Counter numLoad
Definition: cpu.hh:168
gem5::CheckerCPU::startNumInst
Counter startNumInst
Definition: cpu.hh:146
gem5::ArmISA::t
Bitfield< 5 > t
Definition: misc_types.hh:70
gem5::CheckerCPU::requestorId
RequestorID requestorId
id attached to all issued requests
Definition: cpu.hh:89
gem5::CheckerCPU::changedPC
bool changedPC
Definition: cpu.hh:549
gem5::InstResult::ResultType::VecReg
@ VecReg
gem5::ArmISA::si
Bitfield< 6 > si
Definition: misc_types.hh:772
gem5::BaseCPU::getCpuAddrMonitor
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:609
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::InstResult::ResultType::VecPredReg
@ VecPredReg
gem5::SimpleThread::setFloatReg
void setFloatReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:377
gem5::CheckerCPU::setMiscRegOperand
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Definition: cpu.hh:448
gem5::CheckerCPU::mmu
BaseMMU * mmu
Definition: cpu.hh:135
gem5::CheckerCPU::readMem
Fault readMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable) override
Definition: cpu.cc:167
gem5::SimpleThread::readFloatReg
RegVal readFloatReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:285
gem5::CheckerCPU::exitOnError
bool exitOnError
Definition: cpu.hh:552
gem5::CheckerCPU::checkFlags
bool checkFlags(const RequestPtr &unverified_req, Addr vAddr, Addr pAddr, int flags)
Checks if the flags set by the Checker and Checkee match.
Definition: cpu.cc:356
gem5::CheckerCPU::setVecRegOperand
void setVecRegOperand(const StaticInst *si, int idx, const TheISA::VecRegContainer &val) override
Sets a destination vector register operand to a value.
Definition: cpu.hh:314
gem5::CheckerCPU::getDataPort
Port & getDataPort() override
Purely virtual method that returns a reference to the data port.
Definition: cpu.hh:107
gem5::X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:92
gem5::InstResult::ResultType::VecElem
@ VecElem
gem5::SimpleThread::getWritableVecPredReg
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
Definition: simple_thread.hh:342
gem5::CheckerCPU::readMiscReg
RegVal readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register.
Definition: cpu.hh:416
gem5::SimpleThread::nextInstAddr
Addr nextInstAddr() const override
Definition: simple_thread.hh:440
gem5::CheckerCPU::init
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: cpu.cc:59
gem5::CheckerCPU::newPCState
TheISA::PCState newPCState
Definition: cpu.hh:551
gem5::CheckerCPU::threadBase
SimpleThread * threadBase()
Definition: cpu.hh:543
gem5::VecRegClass
@ VecRegClass
Vector Register.
Definition: reg_class.hh:60
gem5::SimpleThread::getWritableVecReg
TheISA::VecRegContainer & getWritableVecReg(const RegId &reg) override
Definition: simple_thread.hh:307
gem5::CheckerCPU::getInstPort
Port & getInstPort() override
Purely virtual method that returns a reference to the instruction port.
Definition: cpu.hh:116
gem5::CheckerCPU::unserialize
void unserialize(CheckpointIn &cp) override
Reconstruct the state of this object from a checkpoint.
Definition: cpu.cc:135
gem5::CheckerCPU::handleError
void handleError()
Definition: cpu.hh:531
simple_thread.hh
gem5::SimpleThread::readVecPredReg
const TheISA::VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Definition: simple_thread.hh:330
gem5::Checker::takeOverFrom
void takeOverFrom(BaseCPU *oldCPU)
Load the state of a CPU from the previous CPU object, invoked on all new CPUs that are about to be sw...
Definition: cpu_impl.hh:442
gem5::CheckerCPU::curStaticInst
StaticInstPtr curStaticInst
Definition: cpu.hh:141
gem5::CheckerCPU::setDcachePort
void setDcachePort(RequestPort *dcache_port)
Definition: cpu.cc:124
gem5::CheckerCPU::setPredicate
void setPredicate(bool val) override
Definition: cpu.hh:345
base.hh
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::CheckerCPU::setVecElemResult
void setVecElemResult(T &&t)
Definition: cpu.hh:272
pc_event.hh
gem5::ArmISA::VecElem
uint32_t VecElem
Definition: vec.hh:60
gem5::Checker::InstListIt
std::list< DynInstPtr >::iterator InstListIt
Definition: cpu.hh:605
gem5::CheckerCPU::PARAMS
PARAMS(CheckerCPU)
gem5::CheckerCPU::mwait
bool mwait(PacketPtr pkt) override
Definition: cpu.hh:472
exec_context.hh
gem5::CheckerCPU::readIntRegOperand
RegVal readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
Definition: cpu.hh:186
gem5::statistics::Counter
double Counter
All counters are of 64-bit values.
Definition: types.hh:47
gem5::Checker::switchOut
void switchOut()
Prepare for another CPU to take over execution.
Definition: cpu_impl.hh:436
gem5::CheckerCPU::warnOnlyOnLoadError
bool warnOnlyOnLoadError
Definition: cpu.hh:554
gem5::CheckerCPU::setMiscRegNoEffect
void setMiscRegNoEffect(int misc_reg, RegVal val)
Definition: cpu.hh:422
gem5::CheckerCPU::getHtmTransactionalDepth
uint64_t getHtmTransactionalDepth() const override
Definition: cpu.hh:390
gem5::CheckerCPU::inHtmTransactionalState
bool inHtmTransactionalState() const override
Definition: cpu.hh:384
gem5::ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:73
gem5::CheckerCPU::startNumLoad
Counter startNumLoad
Definition: cpu.hh:169
gem5::InstSeqNum
uint64_t InstSeqNum
Definition: inst_seq.hh:40
gem5::CheckerCPU::setScalarResult
void setScalarResult(T &&t)
Definition: cpu.hh:256
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::Checker::validateState
void validateState()
Definition: cpu_impl.hh:560
gem5::RequestorID
uint16_t RequestorID
Definition: request.hh:95
gem5::ClockedObject::Params
ClockedObjectParams Params
Parameters of ClockedObject.
Definition: clocked_object.hh:240
gem5::CheckerCPU::getAddrMonitor
AddressMonitor * getAddrMonitor() override
Definition: cpu.hh:480
gem5::BaseCPU::mwait
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:217
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::CheckerCPU::setIcachePort
void setIcachePort(RequestPort *icache_port)
Definition: cpu.cc:118
gem5::RegIndex
uint16_t RegIndex
Definition: types.hh:176
std::list< DynInstPtr >
gem5::AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:242
gem5::IntRegClass
@ IntRegClass
Integer register.
Definition: reg_class.hh:57
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: decoder.cc:40
gem5::CheckerCPU::setIntRegOperand
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets an integer register to a value.
Definition: cpu.hh:287
gem5::CheckerCPU::curMacroStaticInst
StaticInstPtr curMacroStaticInst
Definition: cpu.hh:142
gem5::Checker
Templated Checker class.
Definition: cpu.hh:566
gem5::CheckerCPU::updateOnError
bool updateOnError
Definition: cpu.hh:553
gem5::CheckerCPU::setFloatRegOperandBits
void setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
Sets the bits of a floating point register of single width to a binary value.
Definition: cpu.hh:296
gem5::CheckerCPU::totalOps
virtual Counter totalOps() const override
Definition: cpu.hh:162
gem5::SimpleThread::setPredicate
void setPredicate(bool val)
Definition: simple_thread.hh:443
gem5::Checker::dumpInsts
void dumpInsts()
Definition: cpu_impl.hh:678
gem5::InstResult
Definition: inst_res.hh:49
gem5::CheckerCPU::unverifiedMemData
uint8_t * unverifiedMemData
Definition: cpu.hh:547
gem5::SimpleThread::setCCReg
void setCCReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:421
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:242
gem5::CheckerCPU::unverifiedResult
InstResult unverifiedResult
Definition: cpu.hh:545
gem5::RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:88
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:177
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::CheckerCPU::setSystem
void setSystem(System *system)
Definition: cpu.cc:97
gem5::CheckerCPU::instAddr
Addr instAddr()
Definition: cpu.hh:404
eventq.hh

Generated on Wed Jul 28 2021 12:10:19 for gem5 by doxygen 1.8.17