gem5  v20.1.0.0
base_dyn_inst.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011, 2013, 2016-2020 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) 2004-2006 The Regents of The University of Michigan
16  * Copyright (c) 2009 The University of Edinburgh
17  * All rights reserved.
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions are
21  * met: redistributions of source code must retain the above copyright
22  * notice, this list of conditions and the following disclaimer;
23  * redistributions in binary form must reproduce the above copyright
24  * notice, this list of conditions and the following disclaimer in the
25  * documentation and/or other materials provided with the distribution;
26  * neither the name of the copyright holders nor the names of its
27  * contributors may be used to endorse or promote products derived from
28  * this software without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  */
42 
43 #ifndef __CPU_BASE_DYN_INST_HH__
44 #define __CPU_BASE_DYN_INST_HH__
45 
46 #include <array>
47 #include <bitset>
48 #include <deque>
49 #include <list>
50 #include <string>
51 
52 #include "arch/generic/tlb.hh"
53 #include "arch/utility.hh"
54 #include "base/trace.hh"
55 #include "config/the_isa.hh"
56 #include "cpu/checker/cpu.hh"
57 #include "cpu/exec_context.hh"
58 #include "cpu/exetrace.hh"
59 #include "cpu/inst_res.hh"
60 #include "cpu/inst_seq.hh"
61 #include "cpu/op_class.hh"
62 #include "cpu/static_inst.hh"
63 #include "cpu/translation.hh"
64 #include "debug/HtmCpu.hh"
65 #include "mem/packet.hh"
66 #include "mem/request.hh"
67 #include "sim/byteswap.hh"
68 #include "sim/system.hh"
69 
75 template <class Impl>
76 class BaseDynInst : public ExecContext, public RefCounted
77 {
78  public:
79  // Typedef for the CPU.
80  typedef typename Impl::CPUType ImplCPU;
81  typedef typename ImplCPU::ImplState ImplState;
83 
84  using LSQRequestPtr = typename Impl::CPUPol::LSQ::LSQRequest*;
85  using LQIterator = typename Impl::CPUPol::LSQUnit::LQIterator;
86  using SQIterator = typename Impl::CPUPol::LSQUnit::SQIterator;
87 
88  // The DynInstPtr type.
89  typedef typename Impl::DynInstPtr DynInstPtr;
91 
92  // The list of instructions iterator type.
94 
95  enum {
97  MaxInstDestRegs = TheISA::MaxInstDestRegs
98  };
99 
100  protected:
101  enum Status {
128  };
129 
130  enum Flags {
146  };
147 
148  public:
151 
154 
157 
158  BaseCPU *getCpuPtr() { return cpu; }
159 
162 
165 
168 
169  protected:
173  std::queue<InstResult> instResult;
174 
177 
178  private:
179  /* An amalgamation of a lot of boolean values into one */
180  std::bitset<MaxFlags> instFlags;
181 
183  std::bitset<NumStatus> status;
184 
185  protected:
189  std::bitset<MaxInstSrcRegs> _readySrcRegIdx;
190 
191  public:
194 
197 
199 
201 
204 
206  uint8_t readyRegs;
207 
208  public:
210 
212 
215 
217  unsigned memReqFlags;
218 
220  unsigned effSize;
221 
223  uint8_t *memData;
224 
226  int16_t lqIdx;
228 
230  int16_t sqIdx;
232 
233 
235 
240 
242  // Need a copy of main request pointer to verify on writes.
244 
245  private:
246  // hardware transactional memory
247  uint64_t htmUid;
248  uint64_t htmDepth;
249 
250  protected:
254  std::array<RegId, TheISA::MaxInstDestRegs> _flatDestRegIdx;
255 
259  std::array<PhysRegIdPtr, TheISA::MaxInstDestRegs> _destRegIdx;
260 
264  std::array<PhysRegIdPtr, TheISA::MaxInstSrcRegs> _srcRegIdx;
265 
269  std::array<PhysRegIdPtr, TheISA::MaxInstDestRegs> _prevDestRegIdx;
270 
271 
272  public:
274  void recordResult(bool f) { instFlags[RecordResult] = f; }
275 
277  bool effAddrValid() const { return instFlags[EffAddrValid]; }
278  void effAddrValid(bool b) { instFlags[EffAddrValid] = b; }
279 
281  bool memOpDone() const { return instFlags[MemOpDone]; }
282  void memOpDone(bool f) { instFlags[MemOpDone] = f; }
283 
284  bool notAnInst() const { return instFlags[NotAnInst]; }
285  void setNotAnInst() { instFlags[NotAnInst] = true; }
286 
287 
289  //
290  // INSTRUCTION EXECUTION
291  //
293 
294  void
295  demapPage(Addr vaddr, uint64_t asn) override
296  {
297  cpu->demapPage(vaddr, asn);
298  }
299  void
300  demapInstPage(Addr vaddr, uint64_t asn)
301  {
302  cpu->demapPage(vaddr, asn);
303  }
304  void
305  demapDataPage(Addr vaddr, uint64_t asn)
306  {
307  cpu->demapPage(vaddr, asn);
308  }
309 
310  Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags,
311  const std::vector<bool> &byte_enable=std::vector<bool>()) override;
312 
313  Fault initiateHtmCmd(Request::Flags flags) override;
314 
315  Fault writeMem(uint8_t *data, unsigned size, Addr addr,
316  Request::Flags flags, uint64_t *res,
317  const std::vector<bool> &byte_enable=std::vector<bool>())
318  override;
319 
320  Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags,
321  AtomicOpFunctorPtr amo_op) override;
322 
326 
330 
336  bool
338  {
340  }
341  void
343  {
345  }
346 
351  bool hitExternalSnoop() const { return instFlags[HitExternalSnoop]; }
353 
358  bool
360  {
361  return (translationStarted() && !translationCompleted());
362  }
363 
364  public:
365 #ifdef DEBUG
366  void dumpSNList();
367 #endif
368 
373  renamedDestRegIdx(int idx) const
374  {
375  return _destRegIdx[idx];
376  }
377 
380  renamedSrcRegIdx(int idx) const
381  {
382  assert(TheISA::MaxInstSrcRegs > idx);
383  return _srcRegIdx[idx];
384  }
385 
389  const RegId &
390  flattenedDestRegIdx(int idx) const
391  {
392  return _flatDestRegIdx[idx];
393  }
394 
399  prevDestRegIdx(int idx) const
400  {
401  return _prevDestRegIdx[idx];
402  }
403 
407  void
408  renameDestReg(int idx, PhysRegIdPtr renamed_dest,
409  PhysRegIdPtr previous_rename)
410  {
411  _destRegIdx[idx] = renamed_dest;
412  _prevDestRegIdx[idx] = previous_rename;
413  if (renamed_dest->isPinned())
415  }
416 
421  void
422  renameSrcReg(int idx, PhysRegIdPtr renamed_src)
423  {
424  _srcRegIdx[idx] = renamed_src;
425  }
426 
430  void
431  flattenDestReg(int idx, const RegId &flattened_dest)
432  {
433  _flatDestRegIdx[idx] = flattened_dest;
434  }
444  InstSeqNum seq_num, ImplCPU *cpu);
445 
450 
452  ~BaseDynInst();
453 
454  private:
456  void initVars();
457 
458  public:
460  void dump();
461 
463  void dump(std::string &outstring);
464 
466  int cpuId() const { return cpu->cpuId(); }
467 
469  uint32_t socketId() const { return cpu->socketId(); }
470 
472  RequestorID requestorId() const { return cpu->dataRequestorId(); }
473 
475  ContextID contextId() const { return thread->contextId(); }
476 
478  Fault getFault() const { return fault; }
481  Fault& getFault() { return fault; }
482 
488  bool doneTargCalc() { return false; }
489 
491  void setPredTarg(const TheISA::PCState &_predPC) { predPC = _predPC; }
492 
493  const TheISA::PCState &readPredTarg() { return predPC; }
494 
496  Addr predInstAddr() { return predPC.instAddr(); }
497 
499  Addr predNextInstAddr() { return predPC.nextInstAddr(); }
500 
502  Addr predMicroPC() { return predPC.microPC(); }
503 
505  bool readPredTaken() { return instFlags[PredTaken]; }
506 
507  void
508  setPredTaken(bool predicted_taken)
509  {
510  instFlags[PredTaken] = predicted_taken;
511  }
512 
514  bool
516  {
517  TheISA::PCState tempPC = pc;
518  TheISA::advancePC(tempPC, staticInst);
519  return !(tempPC == predPC);
520  }
521 
522  //
523  // Instruction types. Forward checks to StaticInst object.
524  //
525  bool isNop() const { return staticInst->isNop(); }
526  bool isMemRef() const { return staticInst->isMemRef(); }
527  bool isLoad() const { return staticInst->isLoad(); }
528  bool isStore() const { return staticInst->isStore(); }
529  bool isAtomic() const { return staticInst->isAtomic(); }
530  bool isStoreConditional() const
531  { return staticInst->isStoreConditional(); }
532  bool isInstPrefetch() const { return staticInst->isInstPrefetch(); }
533  bool isDataPrefetch() const { return staticInst->isDataPrefetch(); }
534  bool isInteger() const { return staticInst->isInteger(); }
535  bool isFloating() const { return staticInst->isFloating(); }
536  bool isVector() const { return staticInst->isVector(); }
537  bool isControl() const { return staticInst->isControl(); }
538  bool isCall() const { return staticInst->isCall(); }
539  bool isReturn() const { return staticInst->isReturn(); }
540  bool isDirectCtrl() const { return staticInst->isDirectCtrl(); }
541  bool isIndirectCtrl() const { return staticInst->isIndirectCtrl(); }
542  bool isCondCtrl() const { return staticInst->isCondCtrl(); }
543  bool isUncondCtrl() const { return staticInst->isUncondCtrl(); }
544  bool isCondDelaySlot() const { return staticInst->isCondDelaySlot(); }
545  bool isThreadSync() const { return staticInst->isThreadSync(); }
546  bool isSerializing() const { return staticInst->isSerializing(); }
547  bool
549  {
551  }
552  bool
554  {
556  }
557  bool isSquashAfter() const { return staticInst->isSquashAfter(); }
558  bool isMemBarrier() const { return staticInst->isMemBarrier(); }
559  bool isWriteBarrier() const { return staticInst->isWriteBarrier(); }
560  bool isNonSpeculative() const { return staticInst->isNonSpeculative(); }
561  bool isQuiesce() const { return staticInst->isQuiesce(); }
562  bool isIprAccess() const { return staticInst->isIprAccess(); }
563  bool isUnverifiable() const { return staticInst->isUnverifiable(); }
564  bool isSyscall() const { return staticInst->isSyscall(); }
565  bool isMacroop() const { return staticInst->isMacroop(); }
566  bool isMicroop() const { return staticInst->isMicroop(); }
567  bool isDelayedCommit() const { return staticInst->isDelayedCommit(); }
568  bool isLastMicroop() const { return staticInst->isLastMicroop(); }
569  bool isFirstMicroop() const { return staticInst->isFirstMicroop(); }
570  bool isMicroBranch() const { return staticInst->isMicroBranch(); }
571  // hardware transactional memory
572  bool isHtmStart() const { return staticInst->isHtmStart(); }
573  bool isHtmStop() const { return staticInst->isHtmStop(); }
574  bool isHtmCancel() const { return staticInst->isHtmCancel(); }
575  bool isHtmCmd() const { return staticInst->isHtmCmd(); }
576 
577  uint64_t
578  getHtmTransactionUid() const override
579  {
580  assert(instFlags[HtmFromTransaction]);
581  return this->htmUid;
582  }
583 
584  uint64_t
585  newHtmTransactionUid() const override
586  {
587  panic("Not yet implemented\n");
588  return 0;
589  }
590 
591  bool
592  inHtmTransactionalState() const override
593  {
595  }
596 
597  uint64_t
598  getHtmTransactionalDepth() const override
599  {
601  return this->htmDepth;
602  else
603  return 0;
604  }
605 
606  void
607  setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
608  {
610  htmUid = htm_uid;
611  htmDepth = htm_depth;
612  }
613 
614  void
616  {
617  if (inHtmTransactionalState()) {
618  DPRINTF(HtmCpu,
619  "clearing instuction's transactional state htmUid=%u\n",
621 
623  htmUid = -1;
624  htmDepth = 0;
625  }
626  }
627 
630 
633 
636 
639 
642 
645 
648 
655 
657  OpClass opClass() const { return staticInst->opClass(); }
658 
661  { return staticInst->branchTarget(pc); }
662 
664  int8_t numSrcRegs() const { return staticInst->numSrcRegs(); }
665 
667  int8_t numDestRegs() const { return staticInst->numDestRegs(); }
668 
669  // the following are used to track physical register usage
670  // for machines with separate int & FP reg files
671  int8_t numFPDestRegs() const { return staticInst->numFPDestRegs(); }
672  int8_t numIntDestRegs() const { return staticInst->numIntDestRegs(); }
673  int8_t numCCDestRegs() const { return staticInst->numCCDestRegs(); }
674  int8_t numVecDestRegs() const { return staticInst->numVecDestRegs(); }
675  int8_t
677  {
678  return staticInst->numVecElemDestRegs();
679  }
680  int8_t
682  {
683  return staticInst->numVecPredDestRegs();
684  }
685 
687  const RegId& destRegIdx(int i) const { return staticInst->destRegIdx(i); }
688 
690  const RegId& srcRegIdx(int i) const { return staticInst->srcRegIdx(i); }
691 
693  uint8_t resultSize() { return instResult.size(); }
694 
698  InstResult
700  {
701  if (!instResult.empty()) {
702  InstResult t = instResult.front();
703  instResult.pop();
704  return t;
705  }
706  return dflt;
707  }
708 
712  template<typename T>
713  void
715  {
716  if (instFlags[RecordResult]) {
717  instResult.push(InstResult(std::forward<T>(t),
719  }
720  }
721 
723  template<typename T>
724  void
726  {
727  if (instFlags[RecordResult]) {
728  instResult.push(InstResult(std::forward<T>(t),
730  }
731  }
732 
734  template<typename T>
735  void
737  {
738  if (instFlags[RecordResult]) {
739  instResult.push(InstResult(std::forward<T>(t),
741  }
742  }
743 
745  template<typename T>
746  void
748  {
749  if (instFlags[RecordResult]) {
750  instResult.push(InstResult(std::forward<T>(t),
752  }
753  }
757  void
758  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
759  {
761  }
762 
764  void
765  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
766  {
768  }
769 
771  void
772  setVecRegOperand(const StaticInst *si, int idx,
773  const VecRegContainer &val) override
774  {
775  setVecResult(val);
776  }
777 
779  void
780  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
781  {
783  }
784 
786  void
787  setVecElemOperand(const StaticInst *si, int idx,
788  const VecElem val) override
789  {
791  }
792 
794  void
796  const VecPredRegContainer &val) override
797  {
799  }
800 
802  void markSrcRegReady();
803 
805  void markSrcRegReady(RegIndex src_idx);
806 
808  bool
809  isReadySrcRegIdx(int idx) const
810  {
811  return this->_readySrcRegIdx[idx];
812  }
813 
815  void setCompleted() { status.set(Completed); }
816 
818  bool isCompleted() const { return status[Completed]; }
819 
822 
824  bool isResultReady() const { return status[ResultReady]; }
825 
827  void setCanIssue() { status.set(CanIssue); }
828 
830  bool readyToIssue() const { return status[CanIssue]; }
831 
833  void clearCanIssue() { status.reset(CanIssue); }
834 
836  void setIssued() { status.set(Issued); }
837 
839  bool isIssued() const { return status[Issued]; }
840 
842  void clearIssued() { status.reset(Issued); }
843 
845  void setExecuted() { status.set(Executed); }
846 
848  bool isExecuted() const { return status[Executed]; }
849 
851  void setCanCommit() { status.set(CanCommit); }
852 
854  void clearCanCommit() { status.reset(CanCommit); }
855 
857  bool readyToCommit() const { return status[CanCommit]; }
858 
859  void setAtCommit() { status.set(AtCommit); }
860 
861  bool isAtCommit() { return status[AtCommit]; }
862 
864  void setCommitted() { status.set(Committed); }
865 
867  bool isCommitted() const { return status[Committed]; }
868 
870  void setSquashed();
871 
873  bool isSquashed() const { return status[Squashed]; }
874 
875  //Instruction Queue Entry
876  //-----------------------
878  void setInIQ() { status.set(IqEntry); }
879 
881  void clearInIQ() { status.reset(IqEntry); }
882 
884  bool isInIQ() const { return status[IqEntry]; }
885 
888 
890  bool isSquashedInIQ() const { return status[SquashedInIQ]; }
891 
892 
893  //Load / Store Queue Functions
894  //-----------------------
896  void setInLSQ() { status.set(LsqEntry); }
897 
899  void removeInLSQ() { status.reset(LsqEntry); }
900 
902  bool isInLSQ() const { return status[LsqEntry]; }
903 
906 
908  bool isSquashedInLSQ() const { return status[SquashedInLSQ]; }
909 
910 
911  //Reorder Buffer Functions
912  //-----------------------
914  void setInROB() { status.set(RobEntry); }
915 
917  void clearInROB() { status.reset(RobEntry); }
918 
920  bool isInROB() const { return status[RobEntry]; }
921 
924 
926  bool isSquashedInROB() const { return status[SquashedInROB]; }
927 
929  bool isPinnedRegsRenamed() const { return status[PinnedRegsRenamed]; }
930 
932  void
934  {
935  assert(!status[PinnedRegsSquashDone]);
936  assert(!status[PinnedRegsWritten]);
938  }
939 
941  bool isPinnedRegsWritten() const { return status[PinnedRegsWritten]; }
942 
944  void
946  {
947  assert(!status[PinnedRegsSquashDone]);
948  assert(status[PinnedRegsRenamed]);
950  }
951 
953  bool
955 
957  void
959  assert(!status[PinnedRegsSquashDone]);
961  }
962 
964  TheISA::PCState pcState() const override { return pc; }
965 
967  void pcState(const TheISA::PCState &val) override { pc = val; }
968 
970  Addr instAddr() const { return pc.instAddr(); }
971 
973  Addr nextInstAddr() const { return pc.nextInstAddr(); }
974 
976  Addr microPC() const { return pc.microPC(); }
977 
978  bool readPredicate() const override { return instFlags[Predicate]; }
979 
980  void
981  setPredicate(bool val) override
982  {
984 
985  if (traceData) {
987  }
988  }
989 
990  bool
991  readMemAccPredicate() const override
992  {
993  return instFlags[MemAccPredicate];
994  }
995 
996  void
997  setMemAccPredicate(bool val) override
998  {
1000  }
1001 
1003  void setTid(ThreadID tid) { threadNumber = tid; }
1004 
1006  void setThreadState(ImplState *state) { thread = state; }
1007 
1009  ThreadContext *tcBase() const override { return thread->getTC(); }
1010 
1011  public:
1013  bool eaSrcsReady() const;
1014 
1016  bool strictlyOrdered() const { return instFlags[IsStrictlyOrdered]; }
1018 
1020  bool hasRequest() const { return instFlags[ReqMade]; }
1022  void setRequest() { instFlags[ReqMade] = true; }
1023 
1026 
1028  void setInstListIt(ListIt _instListIt) { instListIt = _instListIt; }
1029 
1030  public:
1032  unsigned int
1033  readStCondFailures() const override
1034  {
1035  return thread->storeCondFailures;
1036  }
1037 
1039  void
1040  setStCondFailures(unsigned int sc_failures) override
1041  {
1042  thread->storeCondFailures = sc_failures;
1043  }
1044 
1045  public:
1046  // monitor/mwait funtions
1047  void
1048  armMonitor(Addr address) override
1049  {
1050  cpu->armMonitor(threadNumber, address);
1051  }
1052  bool
1053  mwait(PacketPtr pkt) override
1054  {
1055  return cpu->mwait(threadNumber, pkt);
1056  }
1057  void
1059  {
1060  return cpu->mwaitAtomic(threadNumber, tc, cpu->dtb);
1061  }
1062  AddressMonitor *
1063  getAddrMonitor() override
1064  {
1065  return cpu->getCpuAddrMonitor(threadNumber);
1066  }
1067 };
1068 
1069 template<class Impl>
1070 Fault
1072  Request::Flags flags,
1073  const std::vector<bool> &byte_enable)
1074 {
1075  assert(byte_enable.empty() || byte_enable.size() == size);
1076  return cpu->pushRequest(
1077  dynamic_cast<typename DynInstPtr::PtrType>(this),
1078  /* ld */ true, nullptr, size, addr, flags, nullptr, nullptr,
1079  byte_enable);
1080 }
1081 
1082 template<class Impl>
1083 Fault
1085 {
1086  return cpu->pushRequest(
1087  dynamic_cast<typename DynInstPtr::PtrType>(this),
1088  /* ld */ true, nullptr, 8, 0x0ul, flags, nullptr, nullptr);
1089 }
1090 
1091 template<class Impl>
1092 Fault
1093 BaseDynInst<Impl>::writeMem(uint8_t *data, unsigned size, Addr addr,
1094  Request::Flags flags, uint64_t *res,
1095  const std::vector<bool> &byte_enable)
1096 {
1097  assert(byte_enable.empty() || byte_enable.size() == size);
1098  return cpu->pushRequest(
1099  dynamic_cast<typename DynInstPtr::PtrType>(this),
1100  /* st */ false, data, size, addr, flags, res, nullptr,
1101  byte_enable);
1102 }
1103 
1104 template<class Impl>
1105 Fault
1107  Request::Flags flags,
1108  AtomicOpFunctorPtr amo_op)
1109 {
1110  // atomic memory instructions do not have data to be written to memory yet
1111  // since the atomic operations will be executed directly in cache/memory.
1112  // Therefore, its `data` field is nullptr.
1113  // Atomic memory requests need to carry their `amo_op` fields to cache/
1114  // memory
1115  return cpu->pushRequest(
1116  dynamic_cast<typename DynInstPtr::PtrType>(this),
1117  /* atomic */ false, nullptr, size, addr, flags, nullptr,
1118  std::move(amo_op));
1119 }
1120 
1121 #endif // __CPU_BASE_DYN_INST_HH__
BaseDynInst::setCCRegOperand
void setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
Records a CC register being set to a value.
Definition: base_dyn_inst.hh:765
StaticInst::isSyscall
bool isSyscall() const
Definition: static_inst.hh:197
BaseDynInst::isSerializeAfter
bool isSerializeAfter() const
Definition: base_dyn_inst.hh:553
BaseDynInst::isHtmStop
bool isHtmStop() const
Definition: base_dyn_inst.hh:573
InstResult
Definition: inst_res.hh:46
BaseDynInst::isInROB
bool isInROB() const
Returns whether or not this instruction is in the ROB.
Definition: base_dyn_inst.hh:920
BaseDynInst::isCondCtrl
bool isCondCtrl() const
Definition: base_dyn_inst.hh:542
BaseDynInst::predPC
TheISA::PCState predPC
Predicted PC state after this instruction.
Definition: base_dyn_inst.hh:200
AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:239
BaseDynInst::tcBase
ThreadContext * tcBase() const override
Returns the thread context.
Definition: base_dyn_inst.hh:1009
BaseDynInst::AtCommit
@ AtCommit
Instruction can commit.
Definition: base_dyn_inst.hh:111
StaticInst::numCCDestRegs
int8_t numCCDestRegs() const
Number of coprocesor destination regs.
Definition: static_inst.hh:149
BaseDynInst::Squashed
@ Squashed
Instruction has committed.
Definition: base_dyn_inst.hh:113
BaseDynInst::numIntDestRegs
int8_t numIntDestRegs() const
Definition: base_dyn_inst.hh:672
BaseDynInst::CanCommit
@ CanCommit
Instruction has executed.
Definition: base_dyn_inst.hh:110
BaseDynInst::IsStrictlyOrdered
@ IsStrictlyOrdered
Definition: base_dyn_inst.hh:141
BaseDynInst::isNop
bool isNop() const
Definition: base_dyn_inst.hh:525
BaseDynInst::SquashedInIQ
@ SquashedInIQ
Instruction is squashed.
Definition: base_dyn_inst.hh:114
BaseDynInst::BlockingInst
@ BlockingInst
Is a recover instruction.
Definition: base_dyn_inst.hh:121
StaticInst::isDirectCtrl
bool isDirectCtrl() const
Definition: static_inst.hh:178
StaticInst::isMicroBranch
bool isMicroBranch() const
Definition: static_inst.hh:204
BaseDynInst::translationStarted
void translationStarted(bool f)
Definition: base_dyn_inst.hh:325
BaseDynInst::isReadySrcRegIdx
bool isReadySrcRegIdx(int idx) const
Returns if a source register is ready.
Definition: base_dyn_inst.hh:809
BaseDynInst::seqNum
InstSeqNum seqNum
The sequence number of the instruction.
Definition: base_dyn_inst.hh:150
BaseDynInst::isQuiesce
bool isQuiesce() const
Definition: base_dyn_inst.hh:561
BaseDynInst::setStCondFailures
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: base_dyn_inst.hh:1040
BaseDynInst::savedReq
LSQRequestPtr savedReq
Saved memory request (needed when the DTB address translation is delayed due to a hw page table walk)...
Definition: base_dyn_inst.hh:239
BaseDynInst::setVecPredResult
void setVecPredResult(T &&t)
Predicate result.
Definition: base_dyn_inst.hh:747
BaseDynInst::isUnverifiable
bool isUnverifiable() const
Definition: base_dyn_inst.hh:563
BaseDynInst::hitExternalSnoop
void hitExternalSnoop(bool f)
Definition: base_dyn_inst.hh:352
system.hh
BaseDynInst::ImplCPU
Impl::CPUType ImplCPU
Definition: base_dyn_inst.hh:80
VecPredRegContainer
Generic predicate register container.
Definition: vec_pred_reg.hh:47
op_class.hh
StaticInst::destRegIdx
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
Definition: static_inst.hh:230
BaseDynInst::renameDestReg
void renameDestReg(int idx, PhysRegIdPtr renamed_dest, PhysRegIdPtr previous_rename)
Renames a destination register to a physical register.
Definition: base_dyn_inst.hh:408
data
const char data[]
Definition: circlebuf.test.cc:42
BaseDynInst::isSquashed
bool isSquashed() const
Returns whether or not this instruction is squashed.
Definition: base_dyn_inst.hh:873
StaticInst::isMemRef
bool isMemRef() const
Definition: static_inst.hh:160
ArmISA::VecRegContainer
VecReg::Container VecRegContainer
Definition: registers.hh:71
BaseDynInst::HtmFromTransaction
@ HtmFromTransaction
Definition: base_dyn_inst.hh:144
BaseDynInst::thread
ImplState * thread
Pointer to the thread state.
Definition: base_dyn_inst.hh:161
BaseDynInst::EffAddrValid
@ EffAddrValid
Definition: base_dyn_inst.hh:136
BaseDynInst::getFault
Fault & getFault()
TODO: This I added for the LSQRequest side to be able to modify the fault.
Definition: base_dyn_inst.hh:481
BaseDynInst::clearSerializeBefore
void clearSerializeBefore()
Clears the serializeBefore part of this instruction.
Definition: base_dyn_inst.hh:632
BaseDynInst::demapDataPage
void demapDataPage(Addr vaddr, uint64_t asn)
Definition: base_dyn_inst.hh:305
BaseDynInst::clearIssued
void clearIssued()
Clears this instruction as being issued.
Definition: base_dyn_inst.hh:842
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
StaticInst
Base, ISA-independent static instruction class.
Definition: static_inst.hh:85
BaseDynInst::setExecuted
void setExecuted()
Sets this instruction as executed.
Definition: base_dyn_inst.hh:845
StaticInst::isSerializing
bool isSerializing() const
Definition: static_inst.hh:185
ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:227
BaseDynInst::fault
Fault fault
The kind of fault this instruction has generated.
Definition: base_dyn_inst.hh:164
BaseDynInst::memData
uint8_t * memData
Pointer to the data for the memory access.
Definition: base_dyn_inst.hh:223
BaseDynInst::readyToCommit
bool readyToCommit() const
Returns whether or not this instruction is ready to commit.
Definition: base_dyn_inst.hh:857
InstResult::ResultType::VecElem
@ VecElem
Flags
Definition: flags.hh:33
BaseDynInst::MaxFlags
@ MaxFlags
Definition: base_dyn_inst.hh:145
BaseDynInst::nextInstAddr
Addr nextInstAddr() const
Read the PC of the next instruction.
Definition: base_dyn_inst.hh:973
BaseDynInst::htmUid
uint64_t htmUid
Definition: base_dyn_inst.hh:247
BaseDynInst::setVecElemOperand
void setVecElemOperand(const StaticInst *si, int idx, const VecElem val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:787
BaseDynInst::numCCDestRegs
int8_t numCCDestRegs() const
Definition: base_dyn_inst.hh:673
PowerISA::so
Bitfield< 28 > so
Definition: miscregs.hh:49
BaseDynInst::pcState
void pcState(const TheISA::PCState &val) override
Set the PC state of this instruction.
Definition: base_dyn_inst.hh:967
BaseDynInst::newHtmTransactionUid
uint64_t newHtmTransactionUid() const override
Definition: base_dyn_inst.hh:585
BaseDynInst::mwaitAtomic
void mwaitAtomic(ThreadContext *tc) override
Definition: base_dyn_inst.hh:1058
ArmISA::si
Bitfield< 6 > si
Definition: miscregs_types.hh:766
ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:231
BaseDynInst::ThreadsyncWait
@ ThreadsyncWait
Is a blocking instruction.
Definition: base_dyn_inst.hh:122
BaseDynInst::IqEntry
@ IqEntry
Definition: base_dyn_inst.hh:102
BaseDynInst::setSquashed
void setSquashed()
Sets this instruction as squashed.
Definition: base_dyn_inst_impl.hh:242
BaseDynInst::isInstPrefetch
bool isInstPrefetch() const
Definition: base_dyn_inst.hh:532
StaticInst::numIntDestRegs
int8_t numIntDestRegs() const
Number of integer destination regs.
Definition: static_inst.hh:141
tlb.hh
BaseDynInst::isInteger
bool isInteger() const
Definition: base_dyn_inst.hh:534
BaseDynInst::renameSrcReg
void renameSrcReg(int idx, PhysRegIdPtr renamed_src)
Renames a source logical register to the physical register which has/will produce that logical regist...
Definition: base_dyn_inst.hh:422
BaseDynInst::TranslationStarted
@ TranslationStarted
Definition: base_dyn_inst.hh:132
BaseDynInst::setPredTarg
void setPredTarg(const TheISA::PCState &_predPC)
Set the predicted target of this current instruction.
Definition: base_dyn_inst.hh:491
BaseDynInst::hitExternalSnoop
bool hitExternalSnoop() const
True if the address hit a external snoop while sitting in the LSQ.
Definition: base_dyn_inst.hh:351
BaseDynInst::setVecElemResult
void setVecElemResult(T &&t)
Vector element result.
Definition: base_dyn_inst.hh:736
BaseDynInst::isStore
bool isStore() const
Definition: base_dyn_inst.hh:528
BaseDynInst::readPredTaken
bool readPredTaken()
Returns whether the instruction was predicted taken or not.
Definition: base_dyn_inst.hh:505
BaseDynInst::hasRequest
bool hasRequest() const
Has this instruction generated a memory request.
Definition: base_dyn_inst.hh:1020
BaseDynInst::isVector
bool isVector() const
Definition: base_dyn_inst.hh:536
BaseDynInst::readStCondFailures
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: base_dyn_inst.hh:1033
exetrace.hh
BaseDynInst::possibleLoadViolation
bool possibleLoadViolation() const
True if this address was found to match a previous load and they issued out of order.
Definition: base_dyn_inst.hh:337
Trace::InstRecord
Definition: insttracer.hh:55
BaseDynInst::~BaseDynInst
~BaseDynInst()
BaseDynInst destructor.
Definition: base_dyn_inst_impl.hh:141
BaseDynInst::isLoad
bool isLoad() const
Definition: base_dyn_inst.hh:527
RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:82
BaseDynInst::HitExternalSnoop
@ HitExternalSnoop
Definition: base_dyn_inst.hh:135
BaseDynInst::isSquashedInIQ
bool isSquashedInIQ() const
Returns whether or not this instruction is squashed in the IQ.
Definition: base_dyn_inst.hh:890
BaseDynInst::isSyscall
bool isSyscall() const
Definition: base_dyn_inst.hh:564
BaseDynInst::isHtmStart
bool isHtmStart() const
Definition: base_dyn_inst.hh:572
BaseDynInst::status
std::bitset< NumStatus > status
The status of this BaseDynInst.
Definition: base_dyn_inst.hh:183
BaseDynInst::reqToVerify
RequestPtr reqToVerify
Definition: base_dyn_inst.hh:243
std::vector< bool >
BaseDynInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: base_dyn_inst.hh:541
StaticInst::isIprAccess
bool isIprAccess() const
Definition: static_inst.hh:195
InstResult::ResultType::VecReg
@ VecReg
BaseDynInst::MemOpDone
@ MemOpDone
Definition: base_dyn_inst.hh:143
BaseDynInst::memReqFlags
unsigned memReqFlags
The memory request flags (from translation).
Definition: base_dyn_inst.hh:217
BaseDynInst::isAtCommit
bool isAtCommit()
Definition: base_dyn_inst.hh:861
BaseDynInst::MaxInstDestRegs
@ MaxInstDestRegs
Max source regs.
Definition: base_dyn_inst.hh:97
BaseDynInst::traceData
Trace::InstRecord * traceData
InstRecord that tracks this instructions.
Definition: base_dyn_inst.hh:167
StaticInst::opClass
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
Definition: static_inst.hh:225
StaticInst::isSerializeAfter
bool isSerializeAfter() const
Definition: static_inst.hh:189
BaseDynInst::readyRegs
uint8_t readyRegs
How many source registers are ready.
Definition: base_dyn_inst.hh:206
BaseDynInst::writeMem
Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Definition: base_dyn_inst.hh:1093
BaseDynInst::isPinnedRegsRenamed
bool isPinnedRegsRenamed() const
Returns whether pinned registers are renamed.
Definition: base_dyn_inst.hh:929
BaseDynInst::RobEntry
@ RobEntry
Instruction is in the IQ.
Definition: base_dyn_inst.hh:103
BaseDynInst::isSerializeBefore
bool isSerializeBefore() const
Definition: base_dyn_inst.hh:548
BaseDynInst::lqIdx
int16_t lqIdx
Load queue index.
Definition: base_dyn_inst.hh:226
BaseDynInst::setAtCommit
void setAtCommit()
Definition: base_dyn_inst.hh:859
inst_res.hh
BaseDynInst::ListIt
std::list< DynInstPtr >::iterator ListIt
Definition: base_dyn_inst.hh:93
BaseDynInst::RecordResult
@ RecordResult
Definition: base_dyn_inst.hh:137
request.hh
ArmISA::advancePC
void advancePC(PCState &pc, const StaticInstPtr &inst)
Definition: utility.hh:405
BaseDynInst::clearSerializeAfter
void clearSerializeAfter()
Clears the serializeAfter part of this instruction.
Definition: base_dyn_inst.hh:641
BaseDynInst::isTempSerializeAfter
bool isTempSerializeAfter()
Checks if this serializeAfter is only temporarily set.
Definition: base_dyn_inst.hh:644
BaseDynInst::setVecPredRegOperand
void setVecPredRegOperand(const StaticInst *si, int idx, const VecPredRegContainer &val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:795
BaseDynInst::setTid
void setTid(ThreadID tid)
Sets the thread id.
Definition: base_dyn_inst.hh:1003
BaseDynInst::doneTargCalc
bool doneTargCalc()
Checks whether or not this instruction has had its branch target calculated yet.
Definition: base_dyn_inst.hh:488
ArmISA::MaxInstSrcRegs
const int MaxInstSrcRegs
Definition: registers.hh:57
BaseDynInst::setThreadState
void setThreadState(ImplState *state)
Sets the pointer to the thread state.
Definition: base_dyn_inst.hh:1006
BaseDynInst::SerializeBefore
@ SerializeBefore
Is a thread synchronization instruction.
Definition: base_dyn_inst.hh:123
BaseDynInst::destRegIdx
const RegId & destRegIdx(int i) const
Returns the logical register index of the i'th destination register.
Definition: base_dyn_inst.hh:687
AddressMonitor
Definition: base.hh:70
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
BaseDynInst::isHtmCancel
bool isHtmCancel() const
Definition: base_dyn_inst.hh:574
BaseDynInst::setHtmTransactionalState
void setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
Definition: base_dyn_inst.hh:607
BaseDynInst::ReqMade
@ ReqMade
Definition: base_dyn_inst.hh:142
BaseDynInst::setCommitted
void setCommitted()
Sets this instruction as committed.
Definition: base_dyn_inst.hh:864
packet.hh
BaseDynInst::setPinnedRegsWritten
void setPinnedRegsWritten()
Sets destination registers as written.
Definition: base_dyn_inst.hh:945
BaseDynInst::PredTaken
@ PredTaken
Definition: base_dyn_inst.hh:140
BaseDynInst::isCall
bool isCall() const
Definition: base_dyn_inst.hh:538
StaticInst::isInteger
bool isInteger() const
Definition: static_inst.hh:170
BaseDynInst::isFloating
bool isFloating() const
Definition: base_dyn_inst.hh:535
BaseDynInst::CanIssue
@ CanIssue
Instruction has its result.
Definition: base_dyn_inst.hh:107
BaseDynInst::readyToIssue
bool readyToIssue() const
Returns whether or not this instruction is ready to issue.
Definition: base_dyn_inst.hh:830
BaseDynInst::setInIQ
void setInIQ()
Sets this instruction as a entry the IQ.
Definition: base_dyn_inst.hh:878
BaseDynInst::setIntRegOperand
void setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
Records an integer register being set to a value.
Definition: base_dyn_inst.hh:758
BaseDynInst::isUncondCtrl
bool isUncondCtrl() const
Definition: base_dyn_inst.hh:543
BaseDynInst::isSquashedInLSQ
bool isSquashedInLSQ() const
Returns whether or not this instruction is squashed in the LSQ.
Definition: base_dyn_inst.hh:908
BaseDynInst::_destRegIdx
std::array< PhysRegIdPtr, TheISA::MaxInstDestRegs > _destRegIdx
Physical register index of the destination registers of this instruction.
Definition: base_dyn_inst.hh:259
BaseDynInst::isDataPrefetch
bool isDataPrefetch() const
Definition: base_dyn_inst.hh:533
BaseDynInst::instResult
std::queue< InstResult > instResult
The result of the instruction; assumes an instruction can have many destination registers.
Definition: base_dyn_inst.hh:173
RequestorID
uint16_t RequestorID
Definition: request.hh:85
BaseDynInst::markSrcRegReady
void markSrcRegReady()
Records that one of the source registers is ready.
Definition: base_dyn_inst_impl.hh:204
StaticInst::isStore
bool isStore() const
Definition: static_inst.hh:162
StaticInst::isHtmCmd
bool isHtmCmd() const
Definition: static_inst.hh:213
BaseDynInst::strictlyOrdered
void strictlyOrdered(bool so)
Definition: base_dyn_inst.hh:1017
StaticInst::isFirstMicroop
bool isFirstMicroop() const
Definition: static_inst.hh:202
BaseDynInst::resultSize
uint8_t resultSize()
Return the size of the instResult queue.
Definition: base_dyn_inst.hh:693
BaseDynInst::SerializeHandled
@ SerializeHandled
Needs to serialize instructions behind it.
Definition: base_dyn_inst.hh:126
BaseDynInst::translationStarted
bool translationStarted() const
True if the DTB address translation has started.
Definition: base_dyn_inst.hh:324
StaticInst::isLoad
bool isLoad() const
Definition: static_inst.hh:161
BaseDynInst::numSrcRegs
int8_t numSrcRegs() const
Returns the number of source registers.
Definition: base_dyn_inst.hh:664
BaseDynInst::getCpuPtr
BaseCPU * getCpuPtr()
Definition: base_dyn_inst.hh:158
StaticInst::isHtmStart
bool isHtmStart() const
Definition: static_inst.hh:208
BaseDynInst::cpuId
int cpuId() const
Read this CPU's ID.
Definition: base_dyn_inst.hh:466
BaseDynInst::renamedSrcRegIdx
PhysRegIdPtr renamedSrcRegIdx(int idx) const
Returns the physical register index of the i'th source register.
Definition: base_dyn_inst.hh:380
inst_seq.hh
BaseDynInst::getHtmTransactionUid
uint64_t getHtmTransactionUid() const override
Definition: base_dyn_inst.hh:578
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
translation.hh
StaticInst::isDelayedCommit
bool isDelayedCommit() const
Definition: static_inst.hh:200
BaseDynInst::isFirstMicroop
bool isFirstMicroop() const
Definition: base_dyn_inst.hh:569
BaseDynInst::setVecRegOperand
void setVecRegOperand(const StaticInst *si, int idx, const VecRegContainer &val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:772
StaticInst::branchTarget
virtual TheISA::PCState branchTarget(const TheISA::PCState &pc) const
Return the target address for a PC-relative branch.
Definition: static_inst.cc:105
BaseDynInst::_srcRegIdx
std::array< PhysRegIdPtr, TheISA::MaxInstSrcRegs > _srcRegIdx
Physical register index of the source registers of this instruction.
Definition: base_dyn_inst.hh:264
BaseDynInst::pc
TheISA::PCState pc
PC state for this instruction.
Definition: base_dyn_inst.hh:176
BaseDynInst::branchTarget
TheISA::PCState branchTarget() const
Returns the branch target address.
Definition: base_dyn_inst.hh:660
BaseDynInst::setVecResult
void setVecResult(T &&t)
Full vector result.
Definition: base_dyn_inst.hh:725
BaseDynInst::sqIt
SQIterator sqIt
Definition: base_dyn_inst.hh:231
StaticInst::numDestRegs
int8_t numDestRegs() const
Number of destination registers.
Definition: static_inst.hh:137
StaticInst::isHtmCancel
bool isHtmCancel() const
Definition: static_inst.hh:210
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:234
BaseDynInst::setPinnedRegsRenamed
void setPinnedRegsRenamed()
Sets the destination registers as renamed.
Definition: base_dyn_inst.hh:933
BaseDynInst::requestorId
RequestorID requestorId() const
Read this CPU's data requestor ID.
Definition: base_dyn_inst.hh:472
StaticInst::isAtomic
bool isAtomic() const
Definition: static_inst.hh:163
BaseDynInst::getAddrMonitor
AddressMonitor * getAddrMonitor() override
Definition: base_dyn_inst.hh:1063
StaticInst::isControl
bool isControl() const
Definition: static_inst.hh:175
BaseDynInst::setScalarResult
void setScalarResult(T &&t)
Pushes a result onto the instResult queue.
Definition: base_dyn_inst.hh:714
Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
BaseDynInst::initiateMemRead
Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable=std::vector< bool >()) override
Definition: base_dyn_inst.hh:1071
StaticInst::isSerializeBefore
bool isSerializeBefore() const
Definition: static_inst.hh:188
BaseDynInst::PinnedRegsWritten
@ PinnedRegsWritten
Pinned registers are renamed.
Definition: base_dyn_inst.hh:118
BaseDynInst::renamedDestRegIdx
PhysRegIdPtr renamedDestRegIdx(int idx) const
Returns the physical register index of the i'th destination register.
Definition: base_dyn_inst.hh:373
BaseDynInst::setSerializeBefore
void setSerializeBefore()
Temporarily sets this instruction as a serialize before instruction.
Definition: base_dyn_inst.hh:629
BaseDynInst::mispredicted
bool mispredicted()
Returns whether the instruction mispredicted.
Definition: base_dyn_inst.hh:515
StaticInst::isMacroop
bool isMacroop() const
Definition: static_inst.hh:198
StaticInst::isSquashAfter
bool isSquashAfter() const
Definition: static_inst.hh:190
StaticInst::isDataPrefetch
bool isDataPrefetch() const
Definition: static_inst.hh:166
cpu.hh
BaseDynInst::predMicroPC
Addr predMicroPC()
Returns the predicted micro PC after the branch.
Definition: base_dyn_inst.hh:502
InstResult::ResultType::Scalar
@ Scalar
BaseDynInst::getInstListIt
ListIt & getInstListIt()
Returns iterator to this instruction in the list of all insts.
Definition: base_dyn_inst.hh:1025
BaseDynInst::setMemAccPredicate
void setMemAccPredicate(bool val) override
Definition: base_dyn_inst.hh:997
BaseDynInst::flattenedDestRegIdx
const RegId & flattenedDestRegIdx(int idx) const
Returns the flattened register index of the i'th destination register.
Definition: base_dyn_inst.hh:390
BaseDynInst::contextId
ContextID contextId() const
Read this context's system-wide ID.
Definition: base_dyn_inst.hh:475
BaseDynInst::predInstAddr
Addr predInstAddr()
Returns the predicted PC immediately after the branch.
Definition: base_dyn_inst.hh:496
BaseDynInst::isNonSpeculative
bool isNonSpeculative() const
Definition: base_dyn_inst.hh:560
BaseDynInst::SquashedInROB
@ SquashedInROB
Instruction is squashed in the LSQ.
Definition: base_dyn_inst.hh:116
ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:70
BaseDynInst::setInLSQ
void setInLSQ()
Sets this instruction as a entry the LSQ.
Definition: base_dyn_inst.hh:896
BaseDynInst::MaxInstSrcRegs
@ MaxInstSrcRegs
Definition: base_dyn_inst.hh:96
BaseDynInst::clearCanCommit
void clearCanCommit()
Clears this instruction as being ready to commit.
Definition: base_dyn_inst.hh:854
BaseDynInst::setCanCommit
void setCanCommit()
Sets this instruction as ready to commit.
Definition: base_dyn_inst.hh:851
BaseDynInst::isPinnedRegsWritten
bool isPinnedRegsWritten() const
Returns whether destination registers are written.
Definition: base_dyn_inst.hh:941
BaseDynInst::isResultReady
bool isResultReady() const
Returns whether or not the result is ready.
Definition: base_dyn_inst.hh:824
StaticInst::isNonSpeculative
bool isNonSpeculative() const
Definition: static_inst.hh:193
BaseDynInst::instListIt
ListIt instListIt
Iterator pointing to this BaseDynInst in the list of all insts.
Definition: base_dyn_inst.hh:196
BaseDynInst::isCondDelaySlot
bool isCondDelaySlot() const
Definition: base_dyn_inst.hh:544
BaseDynInst::NotAnInst
@ NotAnInst
Definition: base_dyn_inst.hh:131
BaseDynInst::isStoreConditional
bool isStoreConditional() const
Definition: base_dyn_inst.hh:530
BaseDynInst
Definition: base_dyn_inst.hh:76
BaseDynInst::effSize
unsigned effSize
The size of the request.
Definition: base_dyn_inst.hh:220
BaseDynInst::ImplState
ImplCPU::ImplState ImplState
Definition: base_dyn_inst.hh:81
BaseDynInst::strictlyOrdered
bool strictlyOrdered() const
Is this instruction's memory access strictly ordered?
Definition: base_dyn_inst.hh:1016
static_inst.hh
BaseDynInst::popResult
InstResult popResult(InstResult dflt=InstResult())
Pops a result off the instResult queue.
Definition: base_dyn_inst.hh:699
BaseDynInst::cpu
ImplCPU * cpu
Pointer to the Impl's CPU object.
Definition: base_dyn_inst.hh:156
BaseDynInst::setFloatRegOperandBits
void setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
Records an fp register being set to an integer value.
Definition: base_dyn_inst.hh:780
BaseDynInst::numFPDestRegs
int8_t numFPDestRegs() const
Definition: base_dyn_inst.hh:671
BaseDynInst::Executed
@ Executed
Instruction has issued.
Definition: base_dyn_inst.hh:109
BaseDynInst::isDelayedCommit
bool isDelayedCommit() const
Definition: base_dyn_inst.hh:567
BaseDynInst::isExecuted
bool isExecuted() const
Returns whether or not this instruction has executed.
Definition: base_dyn_inst.hh:848
StaticInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: static_inst.hh:179
BaseDynInst::isThreadSync
bool isThreadSync() const
Definition: base_dyn_inst.hh:545
StaticInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
Definition: static_inst.hh:234
BaseDynInst::RecoverInst
@ RecoverInst
Regs pinning status updated after squash.
Definition: base_dyn_inst.hh:120
BaseDynInst::effAddrValid
void effAddrValid(bool b)
Definition: base_dyn_inst.hh:278
BaseDynInst::readPredicate
bool readPredicate() const override
Definition: base_dyn_inst.hh:978
BaseDynInst::setInstListIt
void setInstListIt(ListIt _instListIt)
Sets iterator for this instruction in the list of all insts.
Definition: base_dyn_inst.hh:1028
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
InstSeqNum
uint64_t InstSeqNum
Definition: inst_seq.hh:37
BaseDynInst::MemAccPredicate
@ MemAccPredicate
Definition: base_dyn_inst.hh:139
BaseDynInst::clearInIQ
void clearInIQ()
Sets this instruction as a entry the IQ.
Definition: base_dyn_inst.hh:881
BaseDynInst::clearInROB
void clearInROB()
Sets this instruction as a entry the ROB.
Definition: base_dyn_inst.hh:917
BaseDynInst::isSerializing
bool isSerializing() const
Definition: base_dyn_inst.hh:546
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
BaseDynInst::numDestRegs
int8_t numDestRegs() const
Returns the number of destination registers.
Definition: base_dyn_inst.hh:667
BaseDynInst::prevDestRegIdx
PhysRegIdPtr prevDestRegIdx(int idx) const
Returns the physical register index of the previous physical register that remapped to the same logic...
Definition: base_dyn_inst.hh:399
BaseDynInst::Status
Status
Definition: base_dyn_inst.hh:101
BaseDynInst::initiateHtmCmd
Fault initiateHtmCmd(Request::Flags flags) override
Initiate an HTM command, e.g.
Definition: base_dyn_inst.hh:1084
BaseDynInst::memOpDone
void memOpDone(bool f)
Definition: base_dyn_inst.hh:282
BaseDynInst::translationCompleted
bool translationCompleted() const
True if the DTB address translation has completed.
Definition: base_dyn_inst.hh:328
BaseDynInst::Issued
@ Issued
Instruction can issue and execute.
Definition: base_dyn_inst.hh:108
BaseDynInst::demapInstPage
void demapInstPage(Addr vaddr, uint64_t asn)
Definition: base_dyn_inst.hh:300
BaseDynInst::microPC
Addr microPC() const
Read the micro PC of this instruction.
Definition: base_dyn_inst.hh:976
BaseDynInst::SquashedInLSQ
@ SquashedInLSQ
Instruction is squashed in the IQ.
Definition: base_dyn_inst.hh:115
BaseDynInst::setSquashedInLSQ
void setSquashedInLSQ()
Sets this instruction as squashed in the LSQ.
Definition: base_dyn_inst.hh:905
BaseDynInst::BaseDynInst
BaseDynInst(const StaticInstPtr &staticInst, const StaticInstPtr &macroop, TheISA::PCState pc, TheISA::PCState predPC, InstSeqNum seq_num, ImplCPU *cpu)
BaseDynInst constructor given a binary instruction.
Definition: base_dyn_inst_impl.hh:60
StaticInst::isMicroop
bool isMicroop() const
Definition: static_inst.hh:199
StaticInst::isWriteBarrier
bool isWriteBarrier() const
Definition: static_inst.hh:192
BaseDynInst::instFlags
std::bitset< MaxFlags > instFlags
Definition: base_dyn_inst.hh:180
BaseDynInst::eaSrcsReady
bool eaSrcsReady() const
Returns whether or not the eff.
Definition: base_dyn_inst_impl.hh:224
StaticInst::numSrcRegs
int8_t numSrcRegs() const
Number of source registers.
Definition: static_inst.hh:135
BaseDynInst::mwait
bool mwait(PacketPtr pkt) override
Definition: base_dyn_inst.hh:1053
BaseDynInst::effAddrValid
bool effAddrValid() const
Is the effective virtual address valid.
Definition: base_dyn_inst.hh:277
BaseCPU
Definition: cpu_dummy.hh:43
StaticInst::isThreadSync
bool isThreadSync() const
Definition: static_inst.hh:184
BaseDynInst::SerializeAfter
@ SerializeAfter
Needs to serialize on instructions ahead of it.
Definition: base_dyn_inst.hh:125
BaseDynInst::isTempSerializeBefore
bool isTempSerializeBefore()
Checks if this serializeBefore is only temporarily set.
Definition: base_dyn_inst.hh:635
BaseDynInst::isMicroBranch
bool isMicroBranch() const
Definition: base_dyn_inst.hh:570
StaticInst::isInstPrefetch
bool isInstPrefetch() const
Definition: static_inst.hh:165
BaseDynInst::ResultReady
@ ResultReady
Instruction has completed.
Definition: base_dyn_inst.hh:106
BaseDynInst::inHtmTransactionalState
bool inHtmTransactionalState() const override
Definition: base_dyn_inst.hh:592
StaticInst::isLastMicroop
bool isLastMicroop() const
Definition: static_inst.hh:201
StaticInst::isNop
bool isNop() const
Definition: static_inst.hh:158
BaseDynInst::setNotAnInst
void setNotAnInst()
Definition: base_dyn_inst.hh:285
BaseDynInst::isTranslationDelayed
bool isTranslationDelayed() const
Returns true if the DTB address translation is being delayed due to a hw page table walk.
Definition: base_dyn_inst.hh:359
BaseDynInst::sqIdx
int16_t sqIdx
Store queue index.
Definition: base_dyn_inst.hh:230
BaseDynInst::pcState
TheISA::PCState pcState() const override
Read the PC state of this instruction.
Definition: base_dyn_inst.hh:964
BaseDynInst::possibleLoadViolation
void possibleLoadViolation(bool f)
Definition: base_dyn_inst.hh:342
BaseDynInst::isReturn
bool isReturn() const
Definition: base_dyn_inst.hh:539
BaseDynInst::setSquashedInROB
void setSquashedInROB()
Sets this instruction as squashed in the ROB.
Definition: base_dyn_inst.hh:923
RefCounted
Derive from RefCounted if you want to enable reference counting of this class.
Definition: refcnt.hh:57
BaseDynInst::DynInstPtr
Impl::DynInstPtr DynInstPtr
Definition: base_dyn_inst.hh:89
BaseDynInst::LSQRequestPtr
typename Impl::CPUPol::LSQ::LSQRequest * LSQRequestPtr
Definition: base_dyn_inst.hh:84
StaticInst::numVecDestRegs
int8_t numVecDestRegs() const
Number of vector destination regs.
Definition: static_inst.hh:143
BaseDynInst::isSquashAfter
bool isSquashAfter() const
Definition: base_dyn_inst.hh:557
BaseDynInst::staticInst
const StaticInstPtr staticInst
The StaticInst used by this BaseDynInst.
Definition: base_dyn_inst.hh:153
BaseDynInst::setPinnedRegsSquashDone
void setPinnedRegsSquashDone()
Sets dest registers' status updated after squash.
Definition: base_dyn_inst.hh:958
BaseDynInst::lqIt
LQIterator lqIt
Definition: base_dyn_inst.hh:227
BaseDynInst::predNextInstAddr
Addr predNextInstAddr()
Returns the predicted PC two instructions after the branch.
Definition: base_dyn_inst.hh:499
PhysRegId::isPinned
bool isPinned() const
Definition: reg_class.hh:330
ArmISA::b
Bitfield< 7 > b
Definition: miscregs_types.hh:376
BaseDynInst::memOpDone
bool memOpDone() const
Whether or not the memory operation is done.
Definition: base_dyn_inst.hh:281
BaseDynInst::clearHtmTransactionalState
void clearHtmTransactionalState()
Definition: base_dyn_inst.hh:615
StaticInst::isHtmStop
bool isHtmStop() const
Definition: static_inst.hh:209
BaseDynInst::isLastMicroop
bool isLastMicroop() const
Definition: base_dyn_inst.hh:568
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
RegIndex
uint16_t RegIndex
Definition: types.hh:52
ArmISA::t
Bitfield< 5 > t
Definition: miscregs_types.hh:67
BaseDynInst::Committed
@ Committed
Instruction has reached commit.
Definition: base_dyn_inst.hh:112
BaseDynInst::setCompleted
void setCompleted()
Sets this instruction as completed.
Definition: base_dyn_inst.hh:815
BaseDynInst::_readySrcRegIdx
std::bitset< MaxInstSrcRegs > _readySrcRegIdx
Whether or not the source register is ready.
Definition: base_dyn_inst.hh:189
BaseDynInst::isWriteBarrier
bool isWriteBarrier() const
Definition: base_dyn_inst.hh:559
StaticInst::isCondDelaySlot
bool isCondDelaySlot() const
Definition: static_inst.hh:182
BaseDynInst::isMemRef
bool isMemRef() const
Definition: base_dyn_inst.hh:526
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:257
BaseDynInst::isCommitted
bool isCommitted() const
Returns whether or not this instruction is committed.
Definition: base_dyn_inst.hh:867
BaseDynInst::numVecPredDestRegs
int8_t numVecPredDestRegs() const
Definition: base_dyn_inst.hh:681
BaseDynInst::setIssued
void setIssued()
Sets this instruction as issued from the IQ.
Definition: base_dyn_inst.hh:836
BaseDynInst::_prevDestRegIdx
std::array< PhysRegIdPtr, TheISA::MaxInstDestRegs > _prevDestRegIdx
Physical register index of the previous producers of the architected destinations.
Definition: base_dyn_inst.hh:269
BaseDynInst::setCanIssue
void setCanIssue()
Sets this instruction as ready to issue.
Definition: base_dyn_inst.hh:827
BaseDynInst::opClass
OpClass opClass() const
Returns the opclass of this instruction.
Definition: base_dyn_inst.hh:657
BaseDynInst::Predicate
@ Predicate
Definition: base_dyn_inst.hh:138
BaseDynInst::armMonitor
void armMonitor(Addr address) override
Definition: base_dyn_inst.hh:1048
InstResult::ResultType::VecPredReg
@ VecPredReg
BaseDynInst::numVecElemDestRegs
int8_t numVecElemDestRegs() const
Definition: base_dyn_inst.hh:676
exec_context.hh
addr
ip6_addr_t addr
Definition: inet.hh:423
BaseDynInst::LQIterator
typename Impl::CPUPol::LSQUnit::LQIterator LQIterator
Definition: base_dyn_inst.hh:85
BaseDynInst::htmDepth
uint64_t htmDepth
Definition: base_dyn_inst.hh:248
BaseDynInst::setRequest
void setRequest()
Assert this instruction has generated a memory request.
Definition: base_dyn_inst.hh:1022
StaticInst::isCall
bool isCall() const
Definition: static_inst.hh:176
BaseDynInst::isAtomic
bool isAtomic() const
Definition: base_dyn_inst.hh:529
BaseDynInst::demapPage
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: base_dyn_inst.hh:295
BaseDynInst::SQIterator
typename Impl::CPUPol::LSQUnit::SQIterator SQIterator
Definition: base_dyn_inst.hh:86
BaseDynInst::isMemBarrier
bool isMemBarrier() const
Definition: base_dyn_inst.hh:558
BaseDynInst::isMacroop
bool isMacroop() const
Definition: base_dyn_inst.hh:565
BaseDynInst::readMemAccPredicate
bool readMemAccPredicate() const override
Definition: base_dyn_inst.hh:991
BaseDynInst::instAddr
Addr instAddr() const
Read the PC of this instruction.
Definition: base_dyn_inst.hh:970
BaseDynInst::isDirectCtrl
bool isDirectCtrl() const
Definition: base_dyn_inst.hh:540
BaseDynInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Returns the logical register index of the i'th source register.
Definition: base_dyn_inst.hh:690
BaseDynInst::LsqEntry
@ LsqEntry
Instruction is in the ROB.
Definition: base_dyn_inst.hh:104
BaseDynInst::flattenDestReg
void flattenDestReg(int idx, const RegId &flattened_dest)
Flattens a destination architectural register index into a logical index.
Definition: base_dyn_inst.hh:431
BaseDynInst::isHtmCmd
bool isHtmCmd() const
Definition: base_dyn_inst.hh:575
BaseDynInst::_flatDestRegIdx
std::array< RegId, TheISA::MaxInstDestRegs > _flatDestRegIdx
Flattened register index of the destination registers of this instruction.
Definition: base_dyn_inst.hh:254
BaseDynInst::isPinnedRegsSquashDone
bool isPinnedRegsSquashDone() const
Return whether dest registers' pinning status updated after squash.
Definition: base_dyn_inst.hh:954
BaseDynInst::isSerializeHandled
bool isSerializeHandled()
Checks if the serialization part of this instruction has been handled.
Definition: base_dyn_inst.hh:654
BaseDynInst::isCompleted
bool isCompleted() const
Returns whether or not this instruction is completed.
Definition: base_dyn_inst.hh:818
PhysRegId
Physical register ID.
Definition: reg_class.hh:223
StaticInst::isUnverifiable
bool isUnverifiable() const
Definition: static_inst.hh:196
Trace::InstRecord::setPredicate
void setPredicate(bool val)
Definition: insttracer.hh:226
BaseDynInst::isIssued
bool isIssued() const
Returns whether or not this instruction has issued.
Definition: base_dyn_inst.hh:839
StaticInst::isFloating
bool isFloating() const
Definition: static_inst.hh:171
BaseDynInst::PinnedRegsRenamed
@ PinnedRegsRenamed
Instruction is squashed in the ROB.
Definition: base_dyn_inst.hh:117
BaseDynInst::recordResult
void recordResult(bool f)
Records changes to result?
Definition: base_dyn_inst.hh:274
BaseDynInst::threadNumber
ThreadID threadNumber
The thread this instruction is from.
Definition: base_dyn_inst.hh:193
BaseDynInst::numVecDestRegs
int8_t numVecDestRegs() const
Definition: base_dyn_inst.hh:674
RefCountingPtr
If you want a reference counting pointer to a mutable object, create it like this:
Definition: refcnt.hh:118
trace.hh
BaseDynInst::TranslationCompleted
@ TranslationCompleted
Definition: base_dyn_inst.hh:133
BaseDynInst::setPredicate
void setPredicate(bool val) override
Definition: base_dyn_inst.hh:981
StaticInst::isCondCtrl
bool isCondCtrl() const
Definition: static_inst.hh:180
BaseDynInst::Completed
@ Completed
Instruction is in the LSQ.
Definition: base_dyn_inst.hh:105
BaseDynInst::translationCompleted
void translationCompleted(bool f)
Definition: base_dyn_inst.hh:329
BaseDynInst::dump
void dump()
Dumps out contents of this BaseDynInst.
Definition: base_dyn_inst_impl.hh:184
ExecContext::VecElem
TheISA::VecElem VecElem
Definition: exec_context.hh:75
BaseDynInst::initiateMemAMO
Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
Definition: base_dyn_inst.hh:1106
BaseDynInst::setSquashedInIQ
void setSquashedInIQ()
Sets this instruction as squashed in the IQ.
Definition: base_dyn_inst.hh:887
std::list
STL list class.
Definition: stl.hh:51
StaticInst::isQuiesce
bool isQuiesce() const
Definition: static_inst.hh:194
BaseDynInst::physEffAddr
Addr physEffAddr
The effective physical address.
Definition: base_dyn_inst.hh:214
BaseDynInst::isControl
bool isControl() const
Definition: base_dyn_inst.hh:537
BaseDynInst::isSquashedInROB
bool isSquashedInROB() const
Returns whether or not this instruction is squashed in the ROB.
Definition: base_dyn_inst.hh:926
BaseDynInst::macroop
const StaticInstPtr macroop
The Macroop if one exists.
Definition: base_dyn_inst.hh:203
BaseDynInst::PossibleLoadViolation
@ PossibleLoadViolation
Definition: base_dyn_inst.hh:134
BaseDynInst::setPredTaken
void setPredTaken(bool predicted_taken)
Definition: base_dyn_inst.hh:508
BaseDynInst::getHtmTransactionalDepth
uint64_t getHtmTransactionalDepth() const override
Definition: base_dyn_inst.hh:598
BaseDynInst::initVars
void initVars()
Function to initialize variables in the constructors.
Definition: base_dyn_inst_impl.hh:91
BaseDynInst::socketId
uint32_t socketId() const
Read this CPU's Socket ID.
Definition: base_dyn_inst.hh:469
BaseDynInst::setInROB
void setInROB()
Sets this instruction as a entry the ROB.
Definition: base_dyn_inst.hh:914
StaticInst::isReturn
bool isReturn() const
Definition: static_inst.hh:177
BaseDynInst::setResultReady
void setResultReady()
Marks the result as ready.
Definition: base_dyn_inst.hh:821
BaseDynInst::clearCanIssue
void clearCanIssue()
Clears this instruction being able to issue.
Definition: base_dyn_inst.hh:833
StaticInst::isVector
bool isVector() const
Definition: static_inst.hh:172
StaticInst::numFPDestRegs
int8_t numFPDestRegs() const
Number of floating-point destination regs.
Definition: static_inst.hh:139
StaticInst::numVecElemDestRegs
int8_t numVecElemDestRegs() const
Number of vector element destination regs.
Definition: static_inst.hh:145
StaticInst::numVecPredDestRegs
int8_t numVecPredDestRegs() const
Number of predicate destination regs.
Definition: static_inst.hh:147
BaseDynInst::getFault
Fault getFault() const
Returns the fault type.
Definition: base_dyn_inst.hh:478
BaseDynInst::BaseDynInstPtr
RefCountingPtr< BaseDynInst< Impl > > BaseDynInstPtr
Definition: base_dyn_inst.hh:90
BaseDynInst::setSerializeAfter
void setSerializeAfter()
Temporarily sets this instruction as a serialize after instruction.
Definition: base_dyn_inst.hh:638
BaseDynInst::notAnInst
bool notAnInst() const
Definition: base_dyn_inst.hh:284
BaseDynInst::setSerializeHandled
void setSerializeHandled()
Sets the serialization part of this instruction as handled.
Definition: base_dyn_inst.hh:647
BaseDynInst::NumStatus
@ NumStatus
Serialization has been handled.
Definition: base_dyn_inst.hh:127
BaseDynInst::isMicroop
bool isMicroop() const
Definition: base_dyn_inst.hh:566
BaseDynInst::PinnedRegsSquashDone
@ PinnedRegsSquashDone
Pinned registers are written back.
Definition: base_dyn_inst.hh:119
BaseDynInst::isIprAccess
bool isIprAccess() const
Definition: base_dyn_inst.hh:562
BaseDynInst::readPredTarg
const TheISA::PCState & readPredTarg()
Definition: base_dyn_inst.hh:493
BaseDynInst::isInLSQ
bool isInLSQ() const
Returns whether or not this instruction is in the LSQ.
Definition: base_dyn_inst.hh:902
BaseDynInst::effAddr
Addr effAddr
The effective virtual address (lds & stores only).
Definition: base_dyn_inst.hh:211
RegVal
uint64_t RegVal
Definition: types.hh:168
StaticInst::isUncondCtrl
bool isUncondCtrl() const
Definition: static_inst.hh:181
VecRegContainer
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
Definition: vec_reg.hh:156
BaseDynInst::isInIQ
bool isInIQ() const
Returns whether or not this instruction has issued.
Definition: base_dyn_inst.hh:884
StaticInst::isMemBarrier
bool isMemBarrier() const
Definition: static_inst.hh:191
byteswap.hh
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:171
ArmISA::f
Bitfield< 6 > f
Definition: miscregs_types.hh:64
StaticInst::isStoreConditional
bool isStoreConditional() const
Definition: static_inst.hh:164
BaseDynInst::removeInLSQ
void removeInLSQ()
Sets this instruction as a entry the LSQ.
Definition: base_dyn_inst.hh:899

Generated on Wed Sep 30 2020 14:02:08 for gem5 by doxygen 1.8.17