gem5  v21.0.1.0
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 {
59  public:
62 
63  // This is the offset from the current pc that fetch should be performed
65  // This flag says to stay at the current pc. This is useful for
66  // instructions which go beyond MachInst boundaries.
67  bool stayAtPC;
68 
69  // Branch prediction
71 
75  // Number of simulated loads
77  // Number of cycles stalled for I-cache responses
79  // Number of cycles stalled for D-cache responses
81 
83  {
85  : Stats::Group(cpu,
86  csprintf("exec_context.thread_%i",
87  thread->threadId()).c_str()),
89  "Number of instructions committed"),
91  "Number of ops (including micro ops) committed"),
93  "Number of integer alu accesses"),
95  "Number of float alu accesses"),
97  "Number of vector alu accesses"),
99  "Number of times a function call or return occured"),
101  "Number of instructions that are conditional controls"),
103  "Number of integer instructions"),
104  ADD_STAT(numFpInsts, UNIT_COUNT, "Number of float instructions"),
106  "Number of vector instructions"),
108  "Number of times the integer registers were read"),
110  "Number of times the integer registers were written"),
112  "Number of times the floating registers were read"),
114  "Number of times the floating registers were written"),
116  "Number of times the vector registers were read"),
118  "Number of times the vector registers were written"),
120  "Number of times the predicate registers were read"),
122  "Number of times the predicate registers were written"),
124  "Number of times the CC registers were read"),
126  "Number of times the CC registers were written"),
127  ADD_STAT(numMemRefs, UNIT_COUNT, "Number of memory refs"),
129  "Number of load instructions"),
131  "Number of store instructions"),
132  ADD_STAT(numIdleCycles, UNIT_CYCLE, "Number of idle cycles"),
133  ADD_STAT(numBusyCycles, UNIT_CYCLE, "Number of busy cycles"),
135  "Percentage of non-idle cycles"),
136  ADD_STAT(idleFraction, UNIT_RATIO, "Percentage of idle cycles"),
138  "ICache total stall cycles"),
140  "DCache total stall cycles"),
141  ADD_STAT(numBranches, UNIT_COUNT, "Number of branches fetched"),
143  "Number of branches predicted as taken"),
145  "Number of branch mispredictions"),
147  "Class of executed instruction.")
148  {
151 
154 
157 
160 
162  .init(Enums::Num_OpClass)
164 
165  for (unsigned i = 0; i < Num_OpClasses; ++i) {
166  statExecutedInstType.subname(i, Enums::OpClassStrings[i]);
167  }
168 
172 
175 
178 
181  }
182 
183  // Number of simulated instructions
186 
187  // Number of integer alu accesses
189 
190  // Number of float alu accesses
192 
193  // Number of vector alu accesses
195 
196  // Number of function calls/returns
198 
199  // Conditional control instructions;
201 
202  // Number of int instructions
204 
205  // Number of float instructions
207 
208  // Number of vector instructions
210 
211  // Number of integer register file accesses
214 
215  // Number of float register file accesses
218 
219  // Number of vector register file accesses
222 
223  // Number of predicate register file accesses
226 
227  // Number of condition code register file accesses
230 
231  // Number of simulated memory references
235 
236  // Number of idle cycles
238 
239  // Number of busy cycles
241 
242  // Number of idle cycles
245 
246  // Number of cycles stalled for I-cache responses
248 
249  // Number of cycles stalled for D-cache responses
251 
260 
261  // Instruction mix histogram by OpClass
263 
265 
266  public:
269  : cpu(_cpu), thread(_thread), fetchOffset(0), stayAtPC(false),
270  numInst(0), numOp(0), numLoad(0), lastIcacheStall(0),
272  { }
273 
275  RegVal
276  readIntRegOperand(const StaticInst *si, int idx) override
277  {
279  const RegId& reg = si->srcRegIdx(idx);
280  assert(reg.isIntReg());
281  return thread->readIntReg(reg.index());
282  }
283 
285  void
286  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
287  {
289  const RegId& reg = si->destRegIdx(idx);
290  assert(reg.isIntReg());
291  thread->setIntReg(reg.index(), val);
292  }
293 
296  RegVal
297  readFloatRegOperandBits(const StaticInst *si, int idx) override
298  {
300  const RegId& reg = si->srcRegIdx(idx);
301  assert(reg.isFloatReg());
302  return thread->readFloatReg(reg.index());
303  }
304 
307  void
308  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
309  {
311  const RegId& reg = si->destRegIdx(idx);
312  assert(reg.isFloatReg());
313  thread->setFloatReg(reg.index(), val);
314  }
315 
318  readVecRegOperand(const StaticInst *si, int idx) const override
319  {
321  const RegId& reg = si->srcRegIdx(idx);
322  assert(reg.isVecReg());
323  return thread->readVecReg(reg);
324  }
325 
328  getWritableVecRegOperand(const StaticInst *si, int idx) override
329  {
331  const RegId& reg = si->destRegIdx(idx);
332  assert(reg.isVecReg());
333  return thread->getWritableVecReg(reg);
334  }
335 
337  void
338  setVecRegOperand(const StaticInst *si, int idx,
339  const TheISA::VecRegContainer& val) override
340  {
342  const RegId& reg = si->destRegIdx(idx);
343  assert(reg.isVecReg());
344  thread->setVecReg(reg, val);
345  }
346 
350  template <typename VE>
352  readVecLaneOperand(const StaticInst *si, int idx) const
353  {
355  const RegId& reg = si->srcRegIdx(idx);
356  assert(reg.isVecReg());
357  return thread->readVecLane<VE>(reg);
358  }
360  virtual ConstVecLane8
361  readVec8BitLaneOperand(const StaticInst *si, int idx) const
362  override
363  { return readVecLaneOperand<uint8_t>(si, idx); }
364 
366  virtual ConstVecLane16
367  readVec16BitLaneOperand(const StaticInst *si, int idx) const
368  override
369  { return readVecLaneOperand<uint16_t>(si, idx); }
370 
372  virtual ConstVecLane32
373  readVec32BitLaneOperand(const StaticInst *si, int idx) const
374  override
375  { return readVecLaneOperand<uint32_t>(si, idx); }
376 
378  virtual ConstVecLane64
379  readVec64BitLaneOperand(const StaticInst *si, int idx) const
380  override
381  { return readVecLaneOperand<uint64_t>(si, idx); }
382 
384  template <typename LD>
385  void
387  const LD& val)
388  {
390  const RegId& reg = si->destRegIdx(idx);
391  assert(reg.isVecReg());
392  return thread->setVecLane(reg, val);
393  }
395  virtual void
396  setVecLaneOperand(const StaticInst *si, int idx,
397  const LaneData<LaneSize::Byte>& val) override
398  { return setVecLaneOperandT(si, idx, val); }
400  virtual void
401  setVecLaneOperand(const StaticInst *si, int idx,
402  const LaneData<LaneSize::TwoByte>& val) override
403  { return setVecLaneOperandT(si, idx, val); }
405  virtual void
406  setVecLaneOperand(const StaticInst *si, int idx,
407  const LaneData<LaneSize::FourByte>& val) override
408  { return setVecLaneOperandT(si, idx, val); }
410  virtual void
411  setVecLaneOperand(const StaticInst *si, int idx,
412  const LaneData<LaneSize::EightByte>& val) override
413  { return setVecLaneOperandT(si, idx, val); }
418  readVecElemOperand(const StaticInst *si, int idx) const override
419  {
421  const RegId& reg = si->srcRegIdx(idx);
422  assert(reg.isVecElem());
423  return thread->readVecElem(reg);
424  }
425 
427  void
428  setVecElemOperand(const StaticInst *si, int idx,
429  const TheISA::VecElem val) override
430  {
432  const RegId& reg = si->destRegIdx(idx);
433  assert(reg.isVecElem());
435  }
436 
438  readVecPredRegOperand(const StaticInst *si, int idx) const override
439  {
441  const RegId& reg = si->srcRegIdx(idx);
442  assert(reg.isVecPredReg());
443  return thread->readVecPredReg(reg);
444  }
445 
447  getWritableVecPredRegOperand(const StaticInst *si, int idx) override
448  {
450  const RegId& reg = si->destRegIdx(idx);
451  assert(reg.isVecPredReg());
453  }
454 
455  void
457  const TheISA::VecPredRegContainer& val) override
458  {
460  const RegId& reg = si->destRegIdx(idx);
461  assert(reg.isVecPredReg());
463  }
464 
465  RegVal
466  readCCRegOperand(const StaticInst *si, int idx) override
467  {
469  const RegId& reg = si->srcRegIdx(idx);
470  assert(reg.isCCReg());
471  return thread->readCCReg(reg.index());
472  }
473 
474  void
475  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
476  {
478  const RegId& reg = si->destRegIdx(idx);
479  assert(reg.isCCReg());
480  thread->setCCReg(reg.index(), val);
481  }
482 
483  RegVal
484  readMiscRegOperand(const StaticInst *si, int idx) override
485  {
487  const RegId& reg = si->srcRegIdx(idx);
488  assert(reg.isMiscReg());
489  return thread->readMiscReg(reg.index());
490  }
491 
492  void
493  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
494  {
496  const RegId& reg = si->destRegIdx(idx);
497  assert(reg.isMiscReg());
498  thread->setMiscReg(reg.index(), val);
499  }
500 
505  RegVal
506  readMiscReg(int misc_reg) override
507  {
509  return thread->readMiscReg(misc_reg);
510  }
511 
516  void
517  setMiscReg(int misc_reg, RegVal val) override
518  {
520  thread->setMiscReg(misc_reg, val);
521  }
522 
524  pcState() const override
525  {
526  return thread->pcState();
527  }
528 
529  void
530  pcState(const TheISA::PCState &val) override
531  {
532  thread->pcState(val);
533  }
534 
535  Fault
536  readMem(Addr addr, uint8_t *data, unsigned int size,
537  Request::Flags flags,
538  const std::vector<bool>& byte_enable)
539  override
540  {
541  assert(byte_enable.size() == size);
542  return cpu->readMem(addr, data, size, flags, byte_enable);
543  }
544 
545  Fault
546  initiateMemRead(Addr addr, unsigned int size,
547  Request::Flags flags,
548  const std::vector<bool>& byte_enable)
549  override
550  {
551  assert(byte_enable.size() == size);
552  return cpu->initiateMemRead(addr, size, flags, byte_enable);
553  }
554 
555  Fault
556  writeMem(uint8_t *data, unsigned int size, Addr addr,
557  Request::Flags flags, uint64_t *res,
558  const std::vector<bool>& byte_enable)
559  override
560  {
561  assert(byte_enable.size() == size);
562  return cpu->writeMem(data, size, addr, flags, res,
563  byte_enable);
564  }
565 
566  Fault amoMem(Addr addr, uint8_t *data, unsigned int size,
567  Request::Flags flags, AtomicOpFunctorPtr amo_op) override
568  {
569  return cpu->amoMem(addr, data, size, flags, std::move(amo_op));
570  }
571 
572  Fault initiateMemAMO(Addr addr, unsigned int size,
573  Request::Flags flags,
574  AtomicOpFunctorPtr amo_op) override
575  {
576  return cpu->initiateMemAMO(addr, size, flags, std::move(amo_op));
577  }
578 
580  {
581  return cpu->initiateHtmCmd(flags);
582  }
583 
587  void
588  setStCondFailures(unsigned int sc_failures) override
589  {
590  thread->setStCondFailures(sc_failures);
591  }
592 
596  unsigned int
597  readStCondFailures() const override
598  {
599  return thread->readStCondFailures();
600  }
601 
603  ThreadContext *tcBase() const override { return thread->getTC(); }
604 
605  bool
606  readPredicate() const override
607  {
608  return thread->readPredicate();
609  }
610 
611  void
612  setPredicate(bool val) override
613  {
615 
616  if (cpu->traceData) {
618  }
619  }
620 
621  bool
622  readMemAccPredicate() const override
623  {
624  return thread->readMemAccPredicate();
625  }
626 
627  void
628  setMemAccPredicate(bool val) override
629  {
631  }
632 
633  uint64_t
634  getHtmTransactionUid() const override
635  {
636  return tcBase()->getHtmCheckpointPtr()->getHtmUid();
637  }
638 
639  uint64_t
640  newHtmTransactionUid() const override
641  {
642  return tcBase()->getHtmCheckpointPtr()->newHtmUid();
643  }
644 
645  bool
646  inHtmTransactionalState() const override
647  {
648  return (getHtmTransactionalDepth() > 0);
649  }
650 
651  uint64_t
652  getHtmTransactionalDepth() const override
653  {
656  }
657 
661  void
662  demapPage(Addr vaddr, uint64_t asn) override
663  {
664  thread->demapPage(vaddr, asn);
665  }
666 
667  void
668  armMonitor(Addr address) override
669  {
670  cpu->armMonitor(thread->threadId(), address);
671  }
672 
673  bool
674  mwait(PacketPtr pkt) override
675  {
676  return cpu->mwait(thread->threadId(), pkt);
677  }
678 
679  void
681  {
683  }
684 
686  getAddrMonitor() override
687  {
688  return cpu->getCpuAddrMonitor(thread->threadId());
689  }
690 };
691 
692 #endif // __CPU_EXEC_CONTEXT_HH__
Num_OpClasses
static const OpClass Num_OpClasses
Definition: op_class.hh:105
SimpleExecContext::readIntRegOperand
RegVal readIntRegOperand(const StaticInst *si, int idx) override
Reads an integer register.
Definition: exec_context.hh:276
SimpleExecContext::setMiscReg
void setMiscReg(int misc_reg, RegVal val) override
Sets a miscellaneous register, handling any architectural side effects due to writing that register.
Definition: exec_context.hh:517
BaseCPU::mwait
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:214
SimpleExecContext::ExecContextStats::numVecPredRegWrites
Stats::Scalar numVecPredRegWrites
Definition: exec_context.hh:225
AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:239
SimpleThread::setVecReg
void setVecReg(const RegId &reg, const TheISA::VecRegContainer &val) override
Definition: simple_thread.hh:465
SimpleExecContext::armMonitor
void armMonitor(Addr address) override
Definition: exec_context.hh:668
BaseCPU::mwaitAtomic
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseMMU *mmu)
Definition: base.cc:237
SimpleExecContext::ExecContextStats::numBusyCycles
Stats::Formula numBusyCycles
Definition: exec_context.hh:240
SimpleExecContext::setVecElemOperand
void setVecElemOperand(const StaticInst *si, int idx, const TheISA::VecElem val) override
Sets an element of a vector register to a value.
Definition: exec_context.hh:428
SimpleExecContext
Definition: exec_context.hh:57
SimpleExecContext::ExecContextStats::numIntAluAccesses
Stats::Scalar numIntAluAccesses
Definition: exec_context.hh:188
SimpleThread::getWritableVecPredReg
TheISA::VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
Definition: simple_thread.hh:417
SimpleThread::pcState
TheISA::PCState pcState() const override
Definition: simple_thread.hh:505
BaseSimpleCPU::traceData
Trace::InstRecord * traceData
Definition: base.hh:95
SimpleThread::setMemAccPredicate
void setMemAccPredicate(bool val)
Definition: simple_thread.hh:559
SimpleExecContext::readPredicate
bool readPredicate() const override
Definition: exec_context.hh:606
SimpleExecContext::lastDcacheStall
Counter lastDcacheStall
Definition: exec_context.hh:80
SimpleExecContext::readVecElemOperand
TheISA::VecElem readVecElemOperand(const StaticInst *si, int idx) const override
Reads an element of a vector register.
Definition: exec_context.hh:418
SimpleExecContext::setVecLaneOperand
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::FourByte > &val) override
Write a lane of the destination vector operand.
Definition: exec_context.hh:406
SimpleExecContext::cpu
BaseSimpleCPU * cpu
Definition: exec_context.hh:60
data
const char data[]
Definition: circlebuf.test.cc:47
SimpleExecContext::readVec64BitLaneOperand
virtual ConstVecLane64 readVec64BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 64bit operand.
Definition: exec_context.hh:379
SimpleExecContext::readMem
Fault readMem(Addr addr, uint8_t *data, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable) override
Perform an atomic memory read operation.
Definition: exec_context.hh:536
ArmISA::VecRegContainer
VecReg::Container VecRegContainer
Definition: registers.hh:63
SimpleExecContext::initiateHtmCmd
Fault initiateHtmCmd(Request::Flags flags) override
Initiate an HTM command, e.g.
Definition: exec_context.hh:579
SimpleExecContext::readStCondFailures
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: exec_context.hh:597
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
SimpleExecContext::setStCondFailures
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: exec_context.hh:588
StaticInst
Base, ISA-independent static instruction class.
Definition: static_inst.hh:85
SimpleExecContext::readVecLaneOperand
VecLaneT< VE, true > readVecLaneOperand(const StaticInst *si, int idx) const
Vector Register Lane Interfaces.
Definition: exec_context.hh:352
SimpleExecContext::ExecContextStats::numVecAluAccesses
Stats::Scalar numVecAluAccesses
Definition: exec_context.hh:194
SimpleExecContext::setVecPredRegOperand
void setVecPredRegOperand(const StaticInst *si, int idx, const TheISA::VecPredRegContainer &val) override
Sets a destination predicate register operand to a value.
Definition: exec_context.hh:456
Flags< FlagsType >
SimpleExecContext::ExecContextStats::numIntRegReads
Stats::Scalar numIntRegReads
Definition: exec_context.hh:212
SimpleExecContext::ExecContextStats::ExecContextStats
ExecContextStats(BaseSimpleCPU *cpu, SimpleThread *thread)
Definition: exec_context.hh:84
ArmISA::si
Bitfield< 6 > si
Definition: miscregs_types.hh:766
SimpleExecContext::readVec16BitLaneOperand
virtual ConstVecLane16 readVec16BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 16bit operand.
Definition: exec_context.hh:367
SimpleExecContext::ExecContextStats::numBranches
Stats::Scalar numBranches
Definition: exec_context.hh:254
SimpleThread::setPredicate
void setPredicate(bool val)
Definition: simple_thread.hh:518
BaseCPU::armMonitor
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:202
ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:69
BaseSimpleCPU::initiateHtmCmd
virtual Fault initiateHtmCmd(Request::Flags flags)=0
Hardware transactional memory commands (HtmCmds), e.g.
SimpleThread::setIntReg
void setIntReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:442
SimpleExecContext::ExecContextStats::numCondCtrlInsts
Stats::Scalar numCondCtrlInsts
Definition: exec_context.hh:200
SimpleExecContext::ExecContextStats::numOps
Stats::Scalar numOps
Definition: exec_context.hh:185
SimpleThread::setCCReg
void setCCReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:496
SimpleThread::mmu
BaseMMU * mmu
Definition: simple_thread.hh:130
SimpleExecContext::pcState
TheISA::PCState pcState() const override
Definition: exec_context.hh:524
Stats::Group::Group
Group()=delete
BaseCPU::baseStats
BaseCPU::BaseCPUStats baseStats
std::vector< bool >
SimpleExecContext::setVecLaneOperandT
void setVecLaneOperandT(const StaticInst *si, int idx, const LD &val)
Write a lane of the destination vector operand.
Definition: exec_context.hh:386
SimpleThread::readVecPredReg
const TheISA::VecPredRegContainer & readVecPredReg(const RegId &reg) const override
Definition: simple_thread.hh:405
SimpleExecContext::ExecContextStats::icacheStallCycles
Stats::Scalar icacheStallCycles
Definition: exec_context.hh:247
SimpleThread::readCCReg
RegVal readCCReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:430
Stats::Vector
A vector of scalar stats.
Definition: statistics.hh:2007
SimpleExecContext::pcState
void pcState(const TheISA::PCState &val) override
Definition: exec_context.hh:530
SimpleExecContext::ExecContextStats::numInsts
Stats::Scalar numInsts
Definition: exec_context.hh:184
X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:88
request.hh
SimpleExecContext::setMemAccPredicate
void setMemAccPredicate(bool val) override
Definition: exec_context.hh:628
SimpleExecContext::getWritableVecPredRegOperand
TheISA::VecPredRegContainer & getWritableVecPredRegOperand(const StaticInst *si, int idx) override
Gets destination predicate register operand for modification.
Definition: exec_context.hh:447
SimpleExecContext::getWritableVecRegOperand
TheISA::VecRegContainer & getWritableVecRegOperand(const StaticInst *si, int idx) override
Reads a vector register for modification.
Definition: exec_context.hh:328
SimpleExecContext::ExecContextStats::numFpRegWrites
Stats::Scalar numFpRegWrites
Definition: exec_context.hh:217
AddressMonitor
Definition: base.hh:70
SimpleThread::readStCondFailures
unsigned readStCondFailures() const override
Definition: simple_thread.hh:550
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
SimpleThread::getWritableVecReg
TheISA::VecRegContainer & getWritableVecReg(const RegId &reg) override
Definition: simple_thread.hh:303
SimpleExecContext::setPredicate
void setPredicate(bool val) override
Definition: exec_context.hh:612
SimpleThread
The SimpleThread object provides a combination of the ThreadState object and the ThreadContext interf...
Definition: simple_thread.hh:90
Stats::DataWrap::flags
Derived & flags(Flags _flags)
Set the flags and marks this stat to print at the end of simulation.
Definition: statistics.hh:339
SimpleThread::setMiscReg
void setMiscReg(RegIndex misc_reg, RegVal val) override
Definition: simple_thread.hh:539
SimpleExecContext::ExecContextStats::numIntInsts
Stats::Scalar numIntInsts
Definition: exec_context.hh:203
SimpleExecContext::mwaitAtomic
void mwaitAtomic(ThreadContext *tc) override
Definition: exec_context.hh:680
Stats::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1933
SimpleThread::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: simple_thread.hh:168
SimpleExecContext::amoMem
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)
Definition: exec_context.hh:566
Counter
int64_t Counter
Statistics counter type.
Definition: types.hh:54
SimpleExecContext::ExecContextStats::numCCRegReads
Stats::Scalar numCCRegReads
Definition: exec_context.hh:228
SimpleExecContext::ExecContextStats::numVecPredRegReads
Stats::Scalar numVecPredRegReads
Definition: exec_context.hh:224
ArmISA::VecElem
uint32_t VecElem
Definition: registers.hh:60
SimpleExecContext::ExecContextStats::notIdleFraction
Stats::Average notIdleFraction
Definition: exec_context.hh:243
SimpleThread::htmTransactionStops
int64_t htmTransactionStops
Definition: simple_thread.hh:136
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
SimpleExecContext::execContextStats
SimpleExecContext::ExecContextStats execContextStats
translation.hh
SimpleExecContext::ExecContextStats::numMemRefs
Stats::Scalar numMemRefs
Definition: exec_context.hh:232
SimpleExecContext::getAddrMonitor
AddressMonitor * getAddrMonitor() override
Definition: exec_context.hh:686
Stats::DataWrap::prereq
Derived & prereq(const Stat &prereq)
Set the prerequisite stat and marks this stat to print at the end of simulation.
Definition: statistics.hh:353
SimpleThread::getTC
ThreadContext * getTC()
Returns the pointer to this SimpleThread's ThreadContext.
Definition: simple_thread.hh:165
VecLaneT
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
ADD_STAT
#define ADD_STAT(n,...)
Convenience macro to add a stat to a statistics group.
Definition: group.hh:71
BaseSimpleCPU::readMem
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:143
SimpleExecContext::writeMem
Fault writeMem(uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable) override
For atomic-mode contexts, perform an atomic memory write operation.
Definition: exec_context.hh:556
SimpleThread::setStCondFailures
void setStCondFailures(unsigned sc_failures) override
Definition: simple_thread.hh:565
Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:246
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
SimpleExecContext::readVec32BitLaneOperand
virtual ConstVecLane32 readVec32BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 32bit operand.
Definition: exec_context.hh:373
SimpleThread::setVecElem
void setVecElem(const RegId &reg, const TheISA::VecElem &val) override
Definition: simple_thread.hh:475
SimpleExecContext::ExecContextStats::numFpRegReads
Stats::Scalar numFpRegReads
Definition: exec_context.hh:216
SimpleThread::readMiscReg
RegVal readMiscReg(RegIndex misc_reg) override
Definition: simple_thread.hh:527
SimpleExecContext::readMemAccPredicate
bool readMemAccPredicate() const override
Definition: exec_context.hh:622
SimpleExecContext::demapPage
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: exec_context.hh:662
ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:70
BaseSimpleCPU::amoMem
virtual Fault amoMem(Addr addr, uint8_t *data, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
Definition: base.hh:161
SimpleExecContext::readVec8BitLaneOperand
virtual ConstVecLane8 readVec8BitLaneOperand(const StaticInst *si, int idx) const override
Reads source vector 8bit operand.
Definition: exec_context.hh:361
SimpleExecContext::thread
SimpleThread * thread
Definition: exec_context.hh:61
SimpleThread::setVecPredReg
void setVecPredReg(const RegId &reg, const TheISA::VecPredRegContainer &val) override
Definition: simple_thread.hh:485
SimpleExecContext::ExecContextStats::numPredictedBranches
Stats::Scalar numPredictedBranches
Number of branches predicted as taken.
Definition: exec_context.hh:256
BaseSimpleCPU::initiateMemAMO
virtual Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op)
Definition: base.hh:166
BaseSimpleCPU::initiateMemRead
virtual Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >())
Definition: base.hh:149
SimpleThread::readVecLane
VecLaneT< T, true > readVecLane(const RegId &reg) const
Vector Register Lane Interfaces.
Definition: simple_thread.hh:318
BaseSimpleCPU
Definition: base.hh:80
BaseCPU::getCpuAddrMonitor
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:618
SimpleExecContext::readMiscRegOperand
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
Definition: exec_context.hh:484
SimpleThread::readMemAccPredicate
bool readMemAccPredicate()
Definition: simple_thread.hh:553
SimpleExecContext::ExecContextStats::numCallsReturns
Stats::Scalar numCallsReturns
Definition: exec_context.hh:197
SimpleExecContext::initiateMemAMO
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)
Definition: exec_context.hh:572
SimpleThread::readIntReg
RegVal readIntReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:270
BaseCPU::BaseCPUStats::numCycles
Stats::Scalar numCycles
Definition: base.hh:606
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
UNIT_COUNT
#define UNIT_COUNT
Definition: units.hh:49
SimpleExecContext::getHtmTransactionalDepth
uint64_t getHtmTransactionalDepth() const override
Definition: exec_context.hh:652
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:148
SimpleThread::readFloatReg
RegVal readFloatReg(RegIndex reg_idx) const override
Definition: simple_thread.hh:281
SimpleExecContext::ExecContextStats::numCCRegWrites
Stats::Scalar numCCRegWrites
Definition: exec_context.hh:229
Stats::dist
const FlagsType dist
Print the distribution.
Definition: info.hh:56
Stats::VectorBase::init
Derived & init(size_type size)
Set this vector to have the given size.
Definition: statistics.hh:1028
SimpleExecContext::numOp
Counter numOp
Definition: exec_context.hh:74
SimpleThread::setFloatReg
void setFloatReg(RegIndex reg_idx, RegVal val) override
Definition: simple_thread.hh:452
SimpleExecContext::mwait
bool mwait(PacketPtr pkt) override
Definition: exec_context.hh:674
SimpleExecContext::setVecLaneOperand
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::TwoByte > &val) override
Write a lane of the destination vector operand.
Definition: exec_context.hh:401
Stats::nozero
const FlagsType nozero
Don't print if this is zero.
Definition: info.hh:58
UNIT_RATIO
#define UNIT_RATIO
Definition: units.hh:48
SimpleExecContext::ExecContextStats::numVecRegWrites
Stats::Scalar numVecRegWrites
Definition: exec_context.hh:221
SimpleExecContext::numLoad
Counter numLoad
Definition: exec_context.hh:76
SimpleExecContext::ExecContextStats::numFpInsts
Stats::Scalar numFpInsts
Definition: exec_context.hh:206
X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:80
SimpleExecContext::ExecContextStats::numVecRegReads
Stats::Scalar numVecRegReads
Definition: exec_context.hh:220
Stats::Average
A stat that calculates the per tick average of a value.
Definition: statistics.hh:1960
base.hh
SimpleExecContext::ExecContextStats::numLoadInsts
Stats::Scalar numLoadInsts
Definition: exec_context.hh:233
SimpleExecContext::predPC
TheISA::PCState predPC
Definition: exec_context.hh:70
SimpleExecContext::readMiscReg
RegVal readMiscReg(int misc_reg) override
Reads a miscellaneous register, handling any architectural side effects due to reading that register.
Definition: exec_context.hh:506
SimpleExecContext::readVecPredRegOperand
const TheISA::VecPredRegContainer & readVecPredRegOperand(const StaticInst *si, int idx) const override
Predicate registers interface.
Definition: exec_context.hh:438
SimpleExecContext::numInst
Counter numInst
PER-THREAD STATS.
Definition: exec_context.hh:73
base.hh
SimpleExecContext::newHtmTransactionUid
uint64_t newHtmTransactionUid() const override
Definition: exec_context.hh:640
SimpleThread::htmTransactionStarts
int64_t htmTransactionStarts
Definition: simple_thread.hh:135
SimpleExecContext::ExecContextStats::numFpAluAccesses
Stats::Scalar numFpAluAccesses
Definition: exec_context.hh:191
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
types.hh
SimpleExecContext::setIntRegOperand
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets an integer register to a value.
Definition: exec_context.hh:286
SimpleThread::readVecReg
const TheISA::VecRegContainer & readVecReg(const RegId &reg) const override
Definition: simple_thread.hh:292
Stats::pdf
const FlagsType pdf
Print the percent of the total that this entry represents.
Definition: info.hh:52
BaseSimpleCPU::writeMem
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:155
SimpleExecContext::ExecContextStats::idleFraction
Stats::Formula idleFraction
Definition: exec_context.hh:244
Stats::Formula
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2538
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:258
Stats::Group
Statistics container.
Definition: group.hh:87
static_inst_fwd.hh
SimpleExecContext::setCCRegOperand
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
Definition: exec_context.hh:475
exec_context.hh
reg_class.hh
SimpleExecContext::fetchOffset
Addr fetchOffset
Definition: exec_context.hh:64
SimpleThread::threadId
int threadId() const override
Definition: simple_thread.hh:200
UNIT_CYCLE
#define UNIT_CYCLE
Convenience macros to declare the unit of a stat.
Definition: units.hh:39
Stats::DataWrapVec::subname
Derived & subname(off_type index, const std::string &name)
Set the subfield name for the given index, and marks this stat to print at the end of simulation.
Definition: statistics.hh:383
SimpleExecContext::readFloatRegOperandBits
RegVal readFloatRegOperandBits(const StaticInst *si, int idx) override
Reads a floating point register in its binary format, instead of by value.
Definition: exec_context.hh:297
Trace::InstRecord::setPredicate
void setPredicate(bool val)
Definition: insttracer.hh:226
Stats
Definition: statistics.cc:53
SimpleExecContext::setMiscRegOperand
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Definition: exec_context.hh:493
SimpleExecContext::ExecContextStats::numStoreInsts
Stats::Scalar numStoreInsts
Definition: exec_context.hh:234
SimpleExecContext::initiateMemRead
Fault initiateMemRead(Addr addr, unsigned int size, Request::Flags flags, const std::vector< bool > &byte_enable) override
Initiate a timing memory read operation.
Definition: exec_context.hh:546
SimpleExecContext::setVecRegOperand
void setVecRegOperand(const StaticInst *si, int idx, const TheISA::VecRegContainer &val) override
Sets a vector register to a value.
Definition: exec_context.hh:338
SimpleThread::setVecLane
virtual void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
Definition: simple_thread.hh:368
SimpleExecContext::ExecContextStats::statExecutedInstType
Stats::Vector statExecutedInstType
Definition: exec_context.hh:262
ThreadContext::getHtmCheckpointPtr
virtual BaseHTMCheckpointPtr & getHtmCheckpointPtr()=0
SimpleExecContext::setVecLaneOperand
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::EightByte > &val) override
Write a lane of the destination vector operand.
Definition: exec_context.hh:411
SimpleExecContext::ExecContextStats::numVecInsts
Stats::Scalar numVecInsts
Definition: exec_context.hh:209
Stats::total
const FlagsType total
Print the total.
Definition: info.hh:50
SimpleExecContext::inHtmTransactionalState
bool inHtmTransactionalState() const override
Definition: exec_context.hh:646
SimpleExecContext::getHtmTransactionUid
uint64_t getHtmTransactionUid() const override
Definition: exec_context.hh:634
SimpleExecContext::setVecLaneOperand
virtual void setVecLaneOperand(const StaticInst *si, int idx, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector operand.
Definition: exec_context.hh:396
SimpleExecContext::ExecContextStats::numIdleCycles
Stats::Formula numIdleCycles
Definition: exec_context.hh:237
SimpleThread::readVecElem
const TheISA::VecElem & readVecElem(const RegId &reg) const override
Definition: simple_thread.hh:393
csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:158
SimpleExecContext::ExecContextStats::dcacheStallCycles
Stats::Scalar dcacheStallCycles
Definition: exec_context.hh:250
SimpleExecContext::ExecContextStats::numBranchMispred
Stats::Scalar numBranchMispred
Number of misprediced branches.
Definition: exec_context.hh:258
LaneData
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:458
SimpleExecContext::readCCRegOperand
RegVal readCCRegOperand(const StaticInst *si, int idx) override
Definition: exec_context.hh:466
SimpleExecContext::readVecRegOperand
const TheISA::VecRegContainer & readVecRegOperand(const StaticInst *si, int idx) const override
Reads a vector register.
Definition: exec_context.hh:318
SimpleExecContext::stayAtPC
bool stayAtPC
Definition: exec_context.hh:67
RegVal
uint64_t RegVal
Definition: types.hh:174
SimpleExecContext::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: exec_context.hh:308
SimpleThread::readPredicate
bool readPredicate() const
Definition: simple_thread.hh:517
SimpleExecContext::tcBase
ThreadContext * tcBase() const override
Returns a pointer to the ThreadContext.
Definition: exec_context.hh:603
Stats::constant
Temp constant(T val)
Definition: statistics.hh:2864
SimpleExecContext::ExecContextStats
Definition: exec_context.hh:82
SimpleExecContext::lastIcacheStall
Counter lastIcacheStall
Definition: exec_context.hh:78
SimpleExecContext::ExecContextStats::numIntRegWrites
Stats::Scalar numIntRegWrites
Definition: exec_context.hh:213
SimpleExecContext::SimpleExecContext
SimpleExecContext(BaseSimpleCPU *_cpu, SimpleThread *_thread)
Constructor.
Definition: exec_context.hh:268

Generated on Tue Jun 22 2021 15:28:26 for gem5 by doxygen 1.8.17