gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cpu.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 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  * Authors: Kevin Lim
42  */
43 
44 #ifndef __CPU_CHECKER_CPU_HH__
45 #define __CPU_CHECKER_CPU_HH__
46 
47 #include <list>
48 #include <map>
49 #include <queue>
50 
51 #include "arch/types.hh"
52 #include "base/statistics.hh"
53 #include "cpu/base.hh"
54 #include "cpu/base_dyn_inst.hh"
55 #include "cpu/exec_context.hh"
56 #include "cpu/pc_event.hh"
57 #include "cpu/simple_thread.hh"
58 #include "cpu/static_inst.hh"
59 #include "debug/Checker.hh"
60 #include "mem/request.hh"
61 #include "params/CheckerCPU.hh"
62 #include "sim/eventq.hh"
63 
64 // forward declarations
65 namespace TheISA
66 {
67  class TLB;
68 }
69 
70 template <class>
71 class BaseDynInst;
72 class ThreadContext;
73 class Request;
74 
91 class CheckerCPU : public BaseCPU, public ExecContext
92 {
93  protected:
98 
101  public:
102  void init() override;
103 
104  typedef CheckerCPUParams Params;
105  CheckerCPU(Params *p);
106  virtual ~CheckerCPU();
107 
108  void setSystem(System *system);
109 
110  void setIcachePort(MasterPort *icache_port);
111 
112  void setDcachePort(MasterPort *dcache_port);
113 
115  {
116  // the checker does not have ports on its own so return the
117  // data port of the actual CPU core
118  assert(dcachePort);
119  return *dcachePort;
120  }
121 
123  {
124  // the checker does not have ports on its own so return the
125  // data port of the actual CPU core
126  assert(icachePort);
127  return *icachePort;
128  }
129 
130  protected:
131 
133 
135 
138 
140 
141  TheISA::TLB *itb;
142  TheISA::TLB *dtb;
143 
145 
146  union Result {
147  uint64_t integer;
148  double dbl;
149  void set(uint64_t i) { integer = i; }
150  void set(double d) { dbl = d; }
151  void get(uint64_t& i) { i = integer; }
152  void get(double& d) { d = dbl; }
153  };
154 
155  // ISAs like ARM can have multiple destination registers to check,
156  // keep them all in a std::queue
157  std::queue<Result> result;
158 
159  // Pointer to the one memory request.
161 
164 
165  // number of simulated instructions
168 
169  std::queue<int> miscRegIdxs;
170 
171  public:
172 
173  // Primary thread being run.
175 
176  TheISA::TLB* getITBPtr() { return itb; }
177  TheISA::TLB* getDTBPtr() { return dtb; }
178 
179  virtual Counter totalInsts() const override
180  {
181  return 0;
182  }
183 
184  virtual Counter totalOps() const override
185  {
186  return 0;
187  }
188 
189  // number of simulated loads
192 
193  void serialize(CheckpointOut &cp) const override;
194  void unserialize(CheckpointIn &cp) override;
195 
196  // These functions are only used in CPU models that split
197  // effective address computation from the actual memory access.
198  void setEA(Addr EA) override
199  { panic("CheckerCPU::setEA() not implemented\n"); }
200  Addr getEA() const override
201  { panic("CheckerCPU::getEA() not implemented\n"); }
202 
203  // The register accessor methods provide the index of the
204  // instruction's operand (e.g., 0 or 1), not the architectural
205  // register index, to simplify the implementation of register
206  // renaming. We find the architectural register index by indexing
207  // into the instruction's own operand index table. Note that a
208  // raw pointer to the StaticInst is provided instead of a
209  // ref-counted StaticInstPtr to redice overhead. This is fine as
210  // long as these methods don't copy the pointer into any long-term
211  // storage (which is pretty hard to imagine they would have reason
212  // to do).
213 
214  IntReg readIntRegOperand(const StaticInst *si, int idx) override
215  {
216  return thread->readIntReg(si->srcRegIdx(idx));
217  }
218 
219  FloatReg readFloatRegOperand(const StaticInst *si, int idx) override
220  {
221  int reg_idx = si->srcRegIdx(idx) - TheISA::FP_Reg_Base;
222  return thread->readFloatReg(reg_idx);
223  }
224 
226  int idx) override
227  {
228  int reg_idx = si->srcRegIdx(idx) - TheISA::FP_Reg_Base;
229  return thread->readFloatRegBits(reg_idx);
230  }
231 
232  CCReg readCCRegOperand(const StaticInst *si, int idx) override
233  {
234  int reg_idx = si->srcRegIdx(idx) - TheISA::CC_Reg_Base;
235  return thread->readCCReg(reg_idx);
236  }
237 
238  template <class T>
239  void setResult(T t)
240  {
241  Result instRes;
242  instRes.set(t);
243  result.push(instRes);
244  }
245 
246  void setIntRegOperand(const StaticInst *si, int idx,
247  IntReg val) override
248  {
249  thread->setIntReg(si->destRegIdx(idx), val);
250  setResult<uint64_t>(val);
251  }
252 
253  void setFloatRegOperand(const StaticInst *si, int idx,
254  FloatReg val) override
255  {
256  int reg_idx = si->destRegIdx(idx) - TheISA::FP_Reg_Base;
257  thread->setFloatReg(reg_idx, val);
258  setResult<double>(val);
259  }
260 
261  void setFloatRegOperandBits(const StaticInst *si, int idx,
262  FloatRegBits val) override
263  {
264  int reg_idx = si->destRegIdx(idx) - TheISA::FP_Reg_Base;
265  thread->setFloatRegBits(reg_idx, val);
266  setResult<uint64_t>(val);
267  }
268 
269  void setCCRegOperand(const StaticInst *si, int idx, CCReg val) override
270  {
271  int reg_idx = si->destRegIdx(idx) - TheISA::CC_Reg_Base;
272  thread->setCCReg(reg_idx, val);
273  setResult<uint64_t>(val);
274  }
275 
276  bool readPredicate() override { return thread->readPredicate(); }
277  void setPredicate(bool val) override
278  {
279  thread->setPredicate(val);
280  }
281 
282  TheISA::PCState pcState() const override { return thread->pcState(); }
283  void pcState(const TheISA::PCState &val) override
284  {
285  DPRINTF(Checker, "Changing PC to %s, old PC %s.\n",
286  val, thread->pcState());
287  thread->pcState(val);
288  }
289  Addr instAddr() { return thread->instAddr(); }
291  MicroPC microPC() { return thread->microPC(); }
293 
294  MiscReg readMiscRegNoEffect(int misc_reg) const
295  {
296  return thread->readMiscRegNoEffect(misc_reg);
297  }
298 
299  MiscReg readMiscReg(int misc_reg) override
300  {
301  return thread->readMiscReg(misc_reg);
302  }
303 
304  void setMiscRegNoEffect(int misc_reg, const MiscReg &val)
305  {
306  DPRINTF(Checker, "Setting misc reg %d with no effect to check later\n", misc_reg);
307  miscRegIdxs.push(misc_reg);
308  return thread->setMiscRegNoEffect(misc_reg, val);
309  }
310 
311  void setMiscReg(int misc_reg, const MiscReg &val) override
312  {
313  DPRINTF(Checker, "Setting misc reg %d with effect to check later\n", misc_reg);
314  miscRegIdxs.push(misc_reg);
315  return thread->setMiscReg(misc_reg, val);
316  }
317 
318  MiscReg readMiscRegOperand(const StaticInst *si, int idx) override
319  {
320  int reg_idx = si->srcRegIdx(idx) - TheISA::Misc_Reg_Base;
321  return thread->readMiscReg(reg_idx);
322  }
323 
324  void setMiscRegOperand(const StaticInst *si, int idx,
325  const MiscReg &val) override
326  {
327  int reg_idx = si->destRegIdx(idx) - TheISA::Misc_Reg_Base;
328  return this->setMiscReg(reg_idx, val);
329  }
330 
331 #if THE_ISA == MIPS_ISA
332  MiscReg readRegOtherThread(int misc_reg, ThreadID tid) override
333  {
334  panic("MIPS MT not defined for CheckerCPU.\n");
335  return 0;
336  }
337 
338  void setRegOtherThread(int misc_reg, MiscReg val, ThreadID tid) override
339  {
340  panic("MIPS MT not defined for CheckerCPU.\n");
341  }
342 #endif
343 
345 
347  {
348  changedPC = true;
349  newPCState = val;
350  }
351 
352  void demapPage(Addr vaddr, uint64_t asn) override
353  {
354  this->itb->demapPage(vaddr, asn);
355  this->dtb->demapPage(vaddr, asn);
356  }
357 
358  // monitor/mwait funtions
359  void armMonitor(Addr address) override
360  { BaseCPU::armMonitor(0, address); }
361  bool mwait(PacketPtr pkt) override { return BaseCPU::mwait(0, pkt); }
362  void mwaitAtomic(ThreadContext *tc) override
363  { return BaseCPU::mwaitAtomic(0, tc, thread->dtb); }
364  AddressMonitor *getAddrMonitor() override
365  { return BaseCPU::getCpuAddrMonitor(0); }
366 
367  void demapInstPage(Addr vaddr, uint64_t asn)
368  {
369  this->itb->demapPage(vaddr, asn);
370  }
371 
372  void demapDataPage(Addr vaddr, uint64_t asn)
373  {
374  this->dtb->demapPage(vaddr, asn);
375  }
376 
377  Fault readMem(Addr addr, uint8_t *data, unsigned size,
378  Request::Flags flags) override;
379  Fault writeMem(uint8_t *data, unsigned size, Addr addr,
380  Request::Flags flags, uint64_t *res) override;
381 
382  unsigned int readStCondFailures() const override {
383  return thread->readStCondFailures();
384  }
385 
386  void setStCondFailures(unsigned int sc_failures) override
387  {}
389 
390  Fault hwrei() override { return thread->hwrei(); }
391  bool simPalCheck(int palFunc) override
392  { return thread->simPalCheck(palFunc); }
393  void wakeup(ThreadID tid) override { }
394  // Assume that the normal CPU's call to syscall was successful.
395  // The checker's state would have already been updated by the syscall.
396  void syscall(int64_t callnum, Fault *fault) override { }
397 
398  void handleError()
399  {
400  if (exitOnError)
401  dumpAndExit();
402  }
403 
404  bool checkFlags(Request *unverified_req, Addr vAddr,
405  Addr pAddr, int flags);
406 
407  void dumpAndExit();
408 
409  ThreadContext *tcBase() override { return tc; }
411 
415 
416  bool changedPC;
422 
424 };
425 
432 template <class Impl>
433 class Checker : public CheckerCPU
434 {
435  private:
436  typedef typename Impl::DynInstPtr DynInstPtr;
437 
438  public:
440  : CheckerCPU(p), updateThisCycle(false), unverifiedInst(NULL)
441  { }
442 
443  void switchOut();
444  void takeOverFrom(BaseCPU *oldCPU);
445 
446  void advancePC(const Fault &fault);
447 
448  void verify(DynInstPtr &inst);
449 
450  void validateInst(DynInstPtr &inst);
451  void validateExecution(DynInstPtr &inst);
452  void validateState();
453 
454  void copyResult(DynInstPtr &inst, uint64_t mismatch_val, int start_idx);
455  void handlePendingInt();
456 
457  private:
459  {
460  if (exitOnError) {
461  dumpAndExit(inst);
462  } else if (updateOnError) {
463  updateThisCycle = true;
464  }
465  }
466 
467  void dumpAndExit(DynInstPtr &inst);
468 
470 
472 
475  void dumpInsts();
476 };
477 
478 #endif // __CPU_CHECKER_CPU_HH__
void setMiscRegOperand(const StaticInst *si, int idx, const MiscReg &val) override
Definition: cpu.hh:324
bool simPalCheck(int palFunc) override
Check for special simulator handling of specific PAL calls.
Definition: cpu.hh:391
Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res) override
Definition: cpu.cc:229
A MasterPort is a specialisation of a BaseMasterPort, which implements the default protocol for the t...
Definition: port.hh:167
#define DPRINTF(x,...)
Definition: trace.hh:212
FloatReg readFloatRegOperand(const StaticInst *si, int idx) override
Reads a floating point register of single register width.
Definition: cpu.hh:219
uint64_t readIntReg(int reg_idx)
void set(uint64_t i)
Definition: cpu.hh:149
void setMiscReg(int misc_reg, const MiscReg &val, ThreadID tid=0)
void setMiscReg(int misc_reg, const MiscReg &val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register...
Definition: cpu.hh:311
void setPredicate(bool val) override
Definition: cpu.hh:277
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: cpu.hh:382
std::list< DynInstPtr >::iterator InstListIt
Definition: cpu.hh:474
CheckerCPU class.
Definition: cpu.hh:91
DynInstPtr unverifiedInst
Definition: cpu.hh:471
bool changedPC
Definition: cpu.hh:416
Bitfield< 7 > i
Definition: miscregs.hh:1378
void syscall(int64_t callnum, Fault *fault) override
Executes a syscall specified by the callnum.
Definition: cpu.hh:396
#define panic(...)
Definition: misc.hh:153
Impl::DynInstPtr DynInstPtr
Definition: cpu.hh:436
std::queue< int > miscRegIdxs
Definition: cpu.hh:169
TheISA::MiscReg MiscReg
Definition: cpu.hh:97
MasterPort & getInstPort() override
Definition: cpu.hh:122
void wakeup(ThreadID tid) override
Definition: cpu.hh:393
void validateInst(DynInstPtr &inst)
Definition: cpu_impl.hh:461
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
virtual Counter totalOps() const override
Definition: cpu.hh:184
void copyResult(DynInstPtr &inst, uint64_t mismatch_val, int start_idx)
Definition: cpu_impl.hh:592
TheISA::TLB * dtb
Definition: cpu.hh:142
ip6_addr_t addr
Definition: inet.hh:335
virtual Counter totalInsts() const override
Definition: cpu.hh:179
RegIndex destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
Definition: static_inst.hh:188
void handleError(DynInstPtr &inst)
Definition: cpu.hh:458
CCReg readCCRegOperand(const StaticInst *si, int idx) override
Definition: cpu.hh:232
Addr getEA() const override
Get the effective address of the instruction.
Definition: cpu.hh:200
MiscReg readRegOtherThread(int misc_reg, ThreadID tid) override
Definition: cpu.hh:332
std::list< DynInstPtr > instList
Definition: cpu.hh:473
Addr instAddr()
Definition: cpu.hh:289
bool simPalCheck(int palFunc)
Check for special simulator handling of specific PAL calls.
Definition: ev5.cc:490
uint64_t MiscReg
Definition: registers.hh:54
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
System * systemPtr
Definition: cpu.hh:134
TheISA::IntReg IntReg
Definition: exec_context.hh:74
Definition: system.hh:83
void validateExecution(DynInstPtr &inst)
Definition: cpu_impl.hh:482
TheISA::TLB * getITBPtr()
Definition: cpu.hh:176
void handlePendingInt()
Definition: cpu_impl.hh:93
bool willChangePC
Definition: cpu.hh:417
StaticInstPtr curMacroStaticInst
Definition: cpu.hh:163
Addr nextInstAddr()
Definition: cpu.hh:290
void setDcachePort(MasterPort *dcache_port)
Definition: cpu.cc:127
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Declaration of Statistics objects.
TheISA::CCReg CCReg
Definition: exec_context.hh:80
ThreadContext * tcBase() override
Returns a pointer to the ThreadContext.
Definition: cpu.hh:409
void setCCReg(int reg_idx, CCReg val)
bool updateOnError
Definition: cpu.hh:420
TheISA::TLB * dtb
Bitfield< 63 > val
Definition: misc.hh:770
Templated Checker class.
Definition: cpu.hh:433
uint32_t MachInst
Definition: types.hh:40
const char data[]
Definition: circlebuf.cc:43
Bitfield< 15, 0 > si
Definition: types.hh:55
MicroPC microPC()
bool checkFlags(Request *unverified_req, Addr vAddr, Addr pAddr, int flags)
Checks if the flags set by the Checker and Checkee match.
Definition: cpu.cc:340
MiscReg readMiscRegNoEffect(int misc_reg, ThreadID tid=0) const
AddressMonitor * getAddrMonitor() override
Definition: cpu.hh:364
TheISA::TLB * itb
Definition: cpu.hh:141
MiscReg readMiscRegNoEffect(int misc_reg) const
Definition: cpu.hh:294
Request * unverifiedReq
Definition: cpu.hh:413
uint64_t integer
Definition: cpu.hh:147
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: cpu.hh:386
std::queue< Result > result
Definition: cpu.hh:157
unsigned readStCondFailures()
void setFloatRegOperand(const StaticInst *si, int idx, FloatReg val) override
Sets a floating point register of single width to a value.
Definition: cpu.hh:253
system
Definition: isa.cc:226
void verify(DynInstPtr &inst)
Definition: cpu_impl.hh:127
void pcState(const TheISA::PCState &val) override
Definition: cpu.hh:283
MasterPort & getDataPort() override
Definition: cpu.hh:114
ThreadContext * tc
Definition: cpu.hh:139
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:72
MiscReg readMiscRegOperand(const StaticInst *si, int idx) override
Definition: cpu.hh:318
TheISA::PCState pcState() const override
Definition: cpu.hh:282
MicroPC microPC()
Definition: cpu.hh:291
uint64_t FloatRegBits
Definition: registers.hh:51
bool mwait(PacketPtr pkt) override
Definition: cpu.hh:361
MasterID masterId
id attached to all issued requests
Definition: cpu.hh:100
void advancePC(const Fault &fault)
Definition: cpu_impl.hh:72
MiscReg readMiscReg(int misc_reg, ThreadID tid=0)
void set(double d)
Definition: cpu.hh:150
Result unverifiedResult
Definition: cpu.hh:412
Bitfield< 9 > d
Definition: miscregs.hh:1375
void setMiscRegNoEffect(int misc_reg, const MiscReg &val, ThreadID tid=0)
SimpleThread * threadBase()
Definition: cpu.hh:410
uint8_t * unverifiedMemData
Definition: cpu.hh:414
bool exitOnError
Definition: cpu.hh:419
uint16_t MicroPC
Definition: types.hh:144
TheISA::FloatRegBits FloatRegBits
Definition: cpu.hh:96
void setMiscRegNoEffect(int misc_reg, const MiscReg &val)
Definition: cpu.hh:304
uint64_t InstSeqNum
Definition: inst_seq.hh:40
void demapInstPage(Addr vaddr, uint64_t asn)
Definition: cpu.hh:367
Counter startNumInst
Definition: cpu.hh:167
double FloatReg
Definition: registers.hh:50
void setFloatRegBits(int reg_idx, FloatRegBits val)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
bool updateThisCycle
Definition: cpu.hh:469
Fault hwrei()
Definition: ev5.cc:467
uint16_t MasterID
Definition: request.hh:85
int64_t Counter
Statistics counter type.
Definition: types.hh:58
void setCCRegOperand(const StaticInst *si, int idx, CCReg val) override
Definition: cpu.hh:269
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:245
void setFloatReg(int reg_idx, FloatReg val)
RegIndex srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
Definition: static_inst.hh:192
void setEA(Addr EA) override
Record the effective address of the instruction.
Definition: cpu.hh:198
SimpleThread * thread
Definition: cpu.hh:174
Addr dbg_vtophys(Addr addr)
Definition: cpu.cc:331
void serialize(CheckpointOut &cp) const override
Definition: cpu.cc:133
TheISA::PCState pcState()
CCReg readCCReg(int reg_idx)
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:171
CheckerCPUParams Params
Definition: cpu.hh:104
FloatReg readFloatReg(int reg_idx)
void setIntReg(int reg_idx, uint64_t val)
Counter startNumLoad
Definition: cpu.hh:191
void setIcachePort(MasterPort *icache_port)
Definition: cpu.cc:121
int size()
Definition: pagetable.hh:146
Counter numInst
Definition: cpu.hh:166
TheISA::TLB * getDTBPtr()
Definition: cpu.hh:177
bool readPredicate()
MasterPort * icachePort
Definition: cpu.hh:136
std::ostream CheckpointOut
Definition: serialize.hh:67
FloatRegBits readFloatRegBits(int reg_idx)
std::vector< Process * > workload
Definition: cpu.hh:132
void setSystem(System *system)
Definition: cpu.cc:98
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: cpu.hh:352
virtual ~CheckerCPU()
Definition: cpu.cc:93
bool warnOnlyOnLoadError
Definition: cpu.hh:421
void takeOverFrom(BaseCPU *oldCPU)
Definition: cpu_impl.hh:455
void validateState()
Definition: cpu_impl.hh:567
Addr nextInstAddr()
Base, ISA-independent static instruction class.
Definition: static_inst.hh:68
void switchOut()
Definition: cpu_impl.hh:448
Defines a dynamic instruction context.
Counter numLoad
Definition: cpu.hh:190
double dbl
Definition: cpu.hh:148
RequestPtr memReq
Definition: cpu.hh:160
void dumpInsts()
Definition: cpu_impl.hh:657
void recordPCChange(const TheISA::PCState &val)
Definition: cpu.hh:346
IntReg readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
Definition: cpu.hh:214
void armMonitor(Addr address) override
Definition: cpu.hh:359
Fault hwrei() override
Somewhat Alpha-specific function that handles returning from an error or interrupt.
Definition: cpu.hh:390
TheISA::MachInst MachInst
Definition: cpu.hh:94
void setFloatRegOperandBits(const StaticInst *si, int idx, FloatRegBits val) override
Sets the bits of a floating point register of single width to a binary value.
Definition: cpu.hh:261
Bitfield< 5 > t
Definition: miscregs.hh:1382
void init() override
Definition: cpu.cc:63
bool readPredicate() override
Definition: cpu.hh:276
CheckerCPU(Params *p)
Definition: cpu.cc:68
void demapDataPage(Addr vaddr, uint64_t asn)
Definition: cpu.hh:372
void setIntRegOperand(const StaticInst *si, int idx, IntReg val) override
Sets an integer register to a value.
Definition: cpu.hh:246
TheISA::PCState newPCState
Definition: cpu.hh:418
Bitfield< 0 > p
MiscReg readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register...
Definition: cpu.hh:299
StaticInstPtr curStaticInst
Definition: cpu.hh:162
void setResult(T t)
Definition: cpu.hh:239
std::shared_ptr< FaultBase > Fault
Definition: types.hh:184
InstSeqNum youngestSN
Definition: cpu.hh:423
Fault readMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags) override
Definition: cpu.cc:143
void mwaitAtomic(ThreadContext *tc) override
Definition: cpu.hh:362
TheISA::FloatReg FloatReg
Definition: cpu.hh:95
void unserialize(CheckpointIn &cp) override
Definition: cpu.cc:138
MasterPort * dcachePort
Definition: cpu.hh:137
void dumpAndExit()
Definition: cpu.cc:357
void handleError()
Definition: cpu.hh:398
void setRegOtherThread(int misc_reg, MiscReg val, ThreadID tid) override
Definition: cpu.hh:338
void setPredicate(bool val)
Checker(Params *p)
Definition: cpu.hh:439
FloatRegBits readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
Definition: cpu.hh:225

Generated on Fri Jun 9 2017 13:03:42 for gem5 by doxygen 1.8.6