gem5  v20.0.0.2
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
exec_context.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014-2018, 2020 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) 2002-2005 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 
41 #ifndef __CPU_SIMPLE_EXEC_CONTEXT_HH__
42 #define __CPU_SIMPLE_EXEC_CONTEXT_HH__
43 
44 #include "arch/registers.hh"
45 #include "base/types.hh"
46 #include "config/the_isa.hh"
47 #include "cpu/base.hh"
48 #include "cpu/exec_context.hh"
49 #include "cpu/reg_class.hh"
50 #include "cpu/simple/base.hh"
51 #include "cpu/static_inst_fwd.hh"
52 #include "cpu/translation.hh"
53 #include "mem/request.hh"
54 
55 class BaseSimpleCPU;
56 
58  protected:
61 
62  public:
65 
66  // This is the offset from the current pc that fetch should be performed
68  // This flag says to stay at the current pc. This is useful for
69  // instructions which go beyond MachInst boundaries.
70  bool stayAtPC;
71 
72  // Branch prediction
74 
77  // Number of simulated instructions
82 
83  // Number of integer alu accesses
85 
86  // Number of float alu accesses
88 
89  // Number of vector alu accesses
91 
92  // Number of function calls/returns
94 
95  // Conditional control instructions;
97 
98  // Number of int instructions
100 
101  // Number of float instructions
103 
104  // Number of vector instructions
106 
107  // Number of integer register file accesses
110 
111  // Number of float register file accesses
114 
115  // Number of vector register file accesses
118 
119  // Number of predicate register file accesses
122 
123  // Number of condition code register file accesses
126 
127  // Number of simulated memory references
131 
132  // Number of idle cycles
134 
135  // Number of busy cycles
137 
138  // Number of simulated loads
140 
141  // Number of idle cycles
144 
145  // Number of cycles stalled for I-cache responses
148 
149  // Number of cycles stalled for D-cache responses
152 
161 
162  // Instruction mix histogram by OpClass
164 
165  public:
168  : cpu(_cpu), thread(_thread), fetchOffset(0), stayAtPC(false),
169  numInst(0), numOp(0), numLoad(0), lastIcacheStall(0), lastDcacheStall(0)
170  { }
171 
173  RegVal
174  readIntRegOperand(const StaticInst *si, int idx) override
175  {
176  numIntRegReads++;
177  const RegId& reg = si->srcRegIdx(idx);
178  assert(reg.isIntReg());
179  return thread->readIntReg(reg.index());
180  }
181 
183  void
184  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
185  {
186  numIntRegWrites++;
187  const RegId& reg = si->destRegIdx(idx);
188  assert(reg.isIntReg());
189  thread->setIntReg(reg.index(), val);
190  }
191 
194  RegVal
195  readFloatRegOperandBits(const StaticInst *si, int idx) override
196  {
197  numFpRegReads++;
198  const RegId& reg = si->srcRegIdx(idx);
199  assert(reg.isFloatReg());
200  return thread->readFloatReg(reg.index());
201  }
202 
205  void
206  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
207  {
208  numFpRegWrites++;
209  const RegId& reg = si->destRegIdx(idx);
210  assert(reg.isFloatReg());
211  thread->setFloatReg(reg.index(), val);
212  }
213 
215  const VecRegContainer &
216  readVecRegOperand(const StaticInst *si, int idx) const override
217  {
218  numVecRegReads++;
219  const RegId& reg = si->srcRegIdx(idx);
220  assert(reg.isVecReg());
221  return thread->readVecReg(reg);
222  }
223 
226  getWritableVecRegOperand(const StaticInst *si, int idx) override
227  {
228  numVecRegWrites++;
229  const RegId& reg = si->destRegIdx(idx);
230  assert(reg.isVecReg());
231  return thread->getWritableVecReg(reg);
232  }
233 
235  void
236  setVecRegOperand(const StaticInst *si, int idx,
237  const VecRegContainer& val) override
238  {
239  numVecRegWrites++;
240  const RegId& reg = si->destRegIdx(idx);
241  assert(reg.isVecReg());
242  thread->setVecReg(reg, val);
243  }
244 
248  template <typename VecElem>
250  readVecLaneOperand(const StaticInst *si, int idx) const
251  {
252  numVecRegReads++;
253  const RegId& reg = si->srcRegIdx(idx);
254  assert(reg.isVecReg());
255  return thread->readVecLane<VecElem>(reg);
256  }
258  virtual ConstVecLane8
259  readVec8BitLaneOperand(const StaticInst *si, int idx) const
260  override
261  { return readVecLaneOperand<uint8_t>(si, idx); }
262 
264  virtual ConstVecLane16
265  readVec16BitLaneOperand(const StaticInst *si, int idx) const
266  override
267  { return readVecLaneOperand<uint16_t>(si, idx); }
268 
270  virtual ConstVecLane32
271  readVec32BitLaneOperand(const StaticInst *si, int idx) const
272  override
273  { return readVecLaneOperand<uint32_t>(si, idx); }
274 
276  virtual ConstVecLane64
277  readVec64BitLaneOperand(const StaticInst *si, int idx) const
278  override
279  { return readVecLaneOperand<uint64_t>(si, idx); }
280 
282  template <typename LD>
283  void
285  const LD& val)
286  {
287  numVecRegWrites++;
288  const RegId& reg = si->destRegIdx(idx);
289  assert(reg.isVecReg());
290  return thread->setVecLane(reg, val);
291  }
293  virtual void
294  setVecLaneOperand(const StaticInst *si, int idx,
295  const LaneData<LaneSize::Byte>& val) override
296  { return setVecLaneOperandT(si, idx, val); }
298  virtual void
299  setVecLaneOperand(const StaticInst *si, int idx,
300  const LaneData<LaneSize::TwoByte>& val) override
301  { return setVecLaneOperandT(si, idx, val); }
303  virtual void
304  setVecLaneOperand(const StaticInst *si, int idx,
305  const LaneData<LaneSize::FourByte>& val) override
306  { return setVecLaneOperandT(si, idx, val); }
308  virtual void
309  setVecLaneOperand(const StaticInst *si, int idx,
310  const LaneData<LaneSize::EightByte>& val) override
311  { return setVecLaneOperandT(si, idx, val); }
315  VecElem
316  readVecElemOperand(const StaticInst *si, int idx) const override
317  {
318  numVecRegReads++;
319  const RegId& reg = si->srcRegIdx(idx);
320  assert(reg.isVecElem());
321  return thread->readVecElem(reg);
322  }
323 
325  void
326  setVecElemOperand(const StaticInst *si, int idx,
327  const VecElem val) override
328  {
329  numVecRegWrites++;
330  const RegId& reg = si->destRegIdx(idx);
331  assert(reg.isVecElem());
332  thread->setVecElem(reg, val);
333  }
334 
335  const VecPredRegContainer&
336  readVecPredRegOperand(const StaticInst *si, int idx) const override
337  {
338  numVecPredRegReads++;
339  const RegId& reg = si->srcRegIdx(idx);
340  assert(reg.isVecPredReg());
341  return thread->readVecPredReg(reg);
342  }
343 
345  getWritableVecPredRegOperand(const StaticInst *si, int idx) override
346  {
347  numVecPredRegWrites++;
348  const RegId& reg = si->destRegIdx(idx);
349  assert(reg.isVecPredReg());
350  return thread->getWritableVecPredReg(reg);
351  }
352 
353  void
355  const VecPredRegContainer& val) override
356  {
357  numVecPredRegWrites++;
358  const RegId& reg = si->destRegIdx(idx);
359  assert(reg.isVecPredReg());
360  thread->setVecPredReg(reg, val);
361  }
362 
363  RegVal
364  readCCRegOperand(const StaticInst *si, int idx) override
365  {
366  numCCRegReads++;
367  const RegId& reg = si->srcRegIdx(idx);
368  assert(reg.isCCReg());
369  return thread->readCCReg(reg.index());
370  }
371 
372  void
373  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
374  {
375  numCCRegWrites++;
376  const RegId& reg = si->destRegIdx(idx);
377  assert(reg.isCCReg());
378  thread->setCCReg(reg.index(), val);
379  }
380 
381  RegVal
382  readMiscRegOperand(const StaticInst *si, int idx) override
383  {
384  numIntRegReads++;
385  const RegId& reg = si->srcRegIdx(idx);
386  assert(reg.isMiscReg());
387  return thread->readMiscReg(reg.index());
388  }
389 
390  void
391  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
392  {
393  numIntRegWrites++;
394  const RegId& reg = si->destRegIdx(idx);
395  assert(reg.isMiscReg());
396  thread->setMiscReg(reg.index(), val);
397  }
398 
403  RegVal
404  readMiscReg(int misc_reg) override
405  {
406  numIntRegReads++;
407  return thread->readMiscReg(misc_reg);
408  }
409 
414  void
415  setMiscReg(int misc_reg, RegVal val) override
416  {
417  numIntRegWrites++;
418  thread->setMiscReg(misc_reg, val);
419  }
420 
421  PCState
422  pcState() const override
423  {
424  return thread->pcState();
425  }
426 
427  void
428  pcState(const PCState &val) override
429  {
430  thread->pcState(val);
431  }
432 
433  Fault
434  readMem(Addr addr, uint8_t *data, unsigned int size,
435  Request::Flags flags,
436  const std::vector<bool>& byte_enable = std::vector<bool>())
437  override
438  {
439  assert(byte_enable.empty() || byte_enable.size() == size);
440  return cpu->readMem(addr, data, size, flags, byte_enable);
441  }
442 
443  Fault
444  initiateMemRead(Addr addr, unsigned int size,
445  Request::Flags flags,
446  const std::vector<bool>& byte_enable = std::vector<bool>())
447  override
448  {
449  assert(byte_enable.empty() || byte_enable.size() == size);
450  return cpu->initiateMemRead(addr, size, flags, byte_enable);
451  }
452 
453  Fault
454  writeMem(uint8_t *data, unsigned int size, Addr addr,
455  Request::Flags flags, uint64_t *res,
456  const std::vector<bool>& byte_enable = std::vector<bool>())
457  override
458  {
459  assert(byte_enable.empty() || byte_enable.size() == size);
460  return cpu->writeMem(data, size, addr, flags, res, byte_enable);
461  }
462 
463  Fault amoMem(Addr addr, uint8_t *data, unsigned int size,
464  Request::Flags flags, AtomicOpFunctorPtr amo_op) override
465  {
466  return cpu->amoMem(addr, data, size, flags, std::move(amo_op));
467  }
468 
469  Fault initiateMemAMO(Addr addr, unsigned int size,
470  Request::Flags flags,
471  AtomicOpFunctorPtr amo_op) override
472  {
473  return cpu->initiateMemAMO(addr, size, flags, std::move(amo_op));
474  }
475 
479  void
480  setStCondFailures(unsigned int sc_failures) override
481  {
482  thread->setStCondFailures(sc_failures);
483  }
484 
488  unsigned int
489  readStCondFailures() const override
490  {
491  return thread->readStCondFailures();
492  }
493 
497  void
498  syscall(Fault *fault) override
499  {
500  thread->syscall(fault);
501  }
502 
504  ThreadContext *tcBase() const override { return thread->getTC(); }
505 
506  bool
507  readPredicate() const override
508  {
509  return thread->readPredicate();
510  }
511 
512  void
513  setPredicate(bool val) override
514  {
515  thread->setPredicate(val);
516 
517  if (cpu->traceData) {
518  cpu->traceData->setPredicate(val);
519  }
520  }
521 
522  bool
523  readMemAccPredicate() const override
524  {
525  return thread->readMemAccPredicate();
526  }
527 
528  void
529  setMemAccPredicate(bool val) override
530  {
531  thread->setMemAccPredicate(val);
532  }
533 
537  void
538  demapPage(Addr vaddr, uint64_t asn) override
539  {
540  thread->demapPage(vaddr, asn);
541  }
542 
543  void
544  armMonitor(Addr address) override
545  {
546  cpu->armMonitor(thread->threadId(), address);
547  }
548 
549  bool
550  mwait(PacketPtr pkt) override
551  {
552  return cpu->mwait(thread->threadId(), pkt);
553  }
554 
555  void
557  {
558  cpu->mwaitAtomic(thread->threadId(), tc, thread->dtb);
559  }
560 
562  getAddrMonitor() override
563  {
564  return cpu->getCpuAddrMonitor(thread->threadId());
565  }
566 };
567 
568 #endif // __CPU_EXEC_CONTEXT_HH__
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.
virtual Fault amoMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
Definition: base.hh:156
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Stats::Scalar numFpAluAccesses
Definition: exec_context.hh:87
virtual ConstVecLane64 readVec64BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 64bit operand.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::EightByte > &val) override
Write a lane of the destination vector operand.
Bitfield< 5, 3 > reg
Definition: types.hh:87
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:610
bool isMiscReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:161
Stats::Average notIdleFraction
VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
A stat that calculates the per tick average of a value.
Definition: statistics.hh:2521
Fault readMem(Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Perform an atomic memory read operation.
Stats::Scalar numVecPredRegReads
Vector Register Abstraction This generic class is the model in a particularization of MVC...
Definition: vec_reg.hh:156
bool readPredicate() const
Stats::Scalar numLoadInsts
Stats::Scalar numIntAluAccesses
Definition: exec_context.hh:84
unsigned readStCondFailures() const override
virtual ConstVecLane16 readVec16BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 16bit operand.
RegVal readCCReg(RegIndex reg_idx) const override
Stats::Vector statExecutedInstType
VecElem readVecElemOperand(const StaticInst *si, int idx) const override
Reads an element of a vector register.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::FourByte > &val) override
Write a lane of the destination vector operand.
BaseSimpleCPU * cpu
Definition: exec_context.hh:63
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
ip6_addr_t addr
Definition: inet.hh:330
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:228
TheISA::PCState PCState
Definition: exec_context.hh:72
Stats::Scalar numCCRegReads
TheISA::PCState pcState() const override
Stats::Scalar numFpRegWrites
Stats::Scalar numIntRegReads
uint64_t RegVal
Definition: types.hh:166
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i&#39;th source reg.
Definition: static_inst.hh:222
A vector of scalar stats.
Definition: statistics.hh:2547
Stats::Formula numIdleCycles
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
void setMemAccPredicate(bool val)
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
uint32_t VecElem
Definition: registers.hh:68
void setVecElemOperand(const StaticInst *si, int idx, const VecElem val) override
Sets an element of a vector register to a value.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
RegVal readMiscReg(RegIndex misc_reg) override
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2505
PCState pcState() const override
Bitfield< 63 > val
Definition: misc.hh:769
const VecPredRegContainer & readVecPredRegOperand(const StaticInst *si, int idx) const override
Predicate registers interface.
VecRegContainer & getWritableVecReg(const RegId &reg) override
void setVecPredRegOperand(const StaticInst *si, int idx, const VecPredRegContainer &val) override
Sets a destination predicate register operand to a value.
virtual Fault readMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >())
Definition: base.hh:138
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:210
Fault writeMem(uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >()) override
For atomic-mode contexts, perform an atomic memory write operation.
bool isCCReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:158
Bitfield< 15, 0 > si
Definition: types.hh:53
VecLaneT< T, true > readVecLane(const RegId &reg) const
Vector Register Lane Interfaces.
void setVecElem(const RegId &reg, const VecElem &val) override
bool isVecElem() const
true if it is a condition-code physical register.
Definition: reg_class.hh:152
void setIntReg(RegIndex reg_idx, RegVal val) override
Stats::Scalar numOps
Definition: exec_context.hh:81
Stats::Scalar icacheStallCycles
virtual ConstVecLane8 readVec8BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 8bit operand.
AddressMonitor * getAddrMonitor() override
void setPredicate(bool val) override
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:458
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:70
void setVecLaneOperandT(const StaticInst *si, int idx, const LD &val)
Write a lane of the destination vector operand.
Stats::Scalar numVecPredRegWrites
void mwaitAtomic(ThreadContext *tc) override
virtual Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
Definition: base.hh:161
bool readMemAccPredicate()
void setCCReg(RegIndex reg_idx, RegVal val) override
virtual ConstVecLane32 readVec32BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 32bit operand.
RegVal readIntReg(RegIndex reg_idx) const override
void setFloatReg(RegIndex reg_idx, RegVal val) override
Stats::Scalar numPredictedBranches
Number of branches predicted as taken.
const VecRegContainer & readVecRegOperand(const StaticInst *si, int idx) const override
Reads a vector register.
void setMemAccPredicate(bool val) override
Stats::Scalar numVecRegReads
VecLaneT< VecElem, true > readVecLaneOperand(const StaticInst *si, int idx) const
Vector Register Lane Interfaces.
const VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Stats::Scalar dcacheStallCycles
Stats::Scalar numFpInsts
Stats::Scalar numVecRegWrites
Stats::Scalar numIntRegWrites
Fault amoMem(Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
For atomic-mode contexts, perform an atomic AMO (a.k.a., Atomic Read-Modify-Write Memory Operation) ...
void setPredicate(bool val)
Definition: insttracer.hh:219
Stats::Scalar numMemRefs
bool isIntReg() const
Definition: reg_class.hh:143
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseTLB *dtb)
Definition: base.cc:245
void setMiscReg(RegIndex misc_reg, RegVal val) override
VecRegContainer & getWritableVecRegOperand(const StaticInst *si, int idx) override
Reads a vector register for modification.
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Stats::Scalar numIntInsts
Definition: exec_context.hh:99
void demapPage(Addr vaddr, uint64_t asn)
Stats::Scalar numInsts
Definition: exec_context.hh:79
bool isFloatReg() const
Definition: reg_class.hh:146
SimpleThread * thread
Definition: exec_context.hh:64
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:140
ThreadContext * getTC()
Returns the pointer to this SimpleThread&#39;s ThreadContext.
void setVecRegOperand(const StaticInst *si, int idx, const VecRegContainer &val) override
Sets a vector register to a value.
Stats::Formula numBusyCycles
int64_t Counter
Statistics counter type.
Definition: types.hh:56
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:249
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
void pcState(const PCState &val) override
Stats::Scalar numBranches
virtual Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >())
Definition: base.hh:150
Fault initiateMemAMO(Addr addr, unsigned int size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
For timing-mode contexts, initiate an atomic AMO (atomic read-modify-write memory operation) ...
int threadId() const override
Counter numInst
PER-THREAD STATS.
Definition: exec_context.hh:78
A formula for statistics that is calculated when printed.
Definition: statistics.hh:3009
bool isVecReg() const
true if it is a condition-code physical register.
Definition: reg_class.hh:149
bool readMemAccPredicate() const override
void setStCondFailures(unsigned sc_failures) override
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:222
bool mwait(PacketPtr pkt) override
Stats::Scalar numCallsReturns
Definition: exec_context.hh:93
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets an integer register to a value.
Stats::Scalar numFpRegReads
void syscall(Fault *fault) override
Executes a syscall specified by the callnum.
VecReg::Container VecRegContainer
Definition: registers.hh:71
Fault initiateMemRead(Addr addr, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Initiate a timing memory read operation.
Trace::InstRecord * traceData
Definition: base.hh:95
TheISA::PCState predPC
Definition: exec_context.hh:73
const VecElem & readVecElem(const RegId &reg) const override
Generic predicate register container.
Definition: vec_pred_reg.hh:47
RegVal readFloatReg(RegIndex reg_idx) const override
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Base, ISA-independent static instruction class.
Definition: static_inst.hh:85
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:173
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::TwoByte > &val) override
Write a lane of the destination vector operand.
Stats::Scalar numStoreInsts
void setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i&#39;th destination reg.
Definition: static_inst.hh:218
Stats::Scalar numVecAluAccesses
Definition: exec_context.hh:90
Stats::Scalar numCCRegWrites
Stats::Formula idleFraction
SimpleExecContext(BaseSimpleCPU *_cpu, SimpleThread *_thread)
Constructor.
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
void setMiscReg(int misc_reg, RegVal val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register...
RegVal readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register...
Stats::Scalar numVecInsts
void armMonitor(Addr address) override
virtual Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >())
Definition: base.hh:144
bool isVecPredReg() const
true if it is a predicate physical register.
Definition: reg_class.hh:155
void setVecReg(const RegId &reg, const VecRegContainer &val) override
RegVal readCCRegOperand(const StaticInst *si, int idx) override
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
TheISA::VecElem VecElem
Definition: exec_context.hh:75
bool readPredicate() const override
ThreadContext * tcBase() const override
Returns a pointer to the ThreadContext.
const char data[]
std::shared_ptr< FaultBase > Fault
Definition: types.hh:238
const VecRegContainer & readVecReg(const RegId &reg) const override
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
Stats::Scalar numBranchMispred
Number of misprediced branches.
RegVal readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector operand.
void syscall(Fault *fault) override
BaseTLB * dtb
void setPredicate(bool val)
RegVal readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
Stats::Scalar numCondCtrlInsts
Definition: exec_context.hh:96

Generated on Mon Jun 8 2020 15:45:08 for gem5 by doxygen 1.8.13