gem5  v22.0.0.2
dyn_inst.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2016, 2021 ARM Limited
3  * Copyright (c) 2013 Advanced Micro Devices, Inc.
4  * All rights reserved
5  *
6  * The license below extends only to copyright in the software and shall
7  * not be construed as granting a license to any other intellectual
8  * property including but not limited to intellectual property relating
9  * to a hardware implementation of the functionality of the software
10  * licensed hereunder. You may use the software subject to the license
11  * terms below provided that you ensure that this notice is replicated
12  * unmodified and in its entirety in all distributions of the software,
13  * modified or unmodified, in source code or in binary form.
14  *
15  * Copyright (c) 2004-2006 The Regents of The University of Michigan
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 #ifndef __CPU_O3_DYN_INST_HH__
43 #define __CPU_O3_DYN_INST_HH__
44 
45 #include <algorithm>
46 #include <array>
47 #include <deque>
48 #include <list>
49 #include <string>
50 
51 #include "base/refcnt.hh"
52 #include "base/trace.hh"
53 #include "config/the_isa.hh"
54 #include "cpu/checker/cpu.hh"
55 #include "cpu/exec_context.hh"
56 #include "cpu/exetrace.hh"
57 #include "cpu/inst_res.hh"
58 #include "cpu/inst_seq.hh"
59 #include "cpu/o3/cpu.hh"
60 #include "cpu/o3/dyn_inst_ptr.hh"
61 #include "cpu/o3/lsq_unit.hh"
62 #include "cpu/op_class.hh"
63 #include "cpu/reg_class.hh"
64 #include "cpu/static_inst.hh"
65 #include "cpu/translation.hh"
66 #include "debug/HtmCpu.hh"
67 
68 namespace gem5
69 {
70 
71 class Packet;
72 
73 namespace o3
74 {
75 
76 class DynInst : public ExecContext, public RefCounted
77 {
78  private:
80  InstSeqNum seq_num, CPU *cpu);
81 
82  public:
83  // The list of instructions iterator type.
85 
86  struct Arrays
87  {
88  size_t numSrcs;
89  size_t numDests;
90 
95  uint8_t *readySrcIdx;
96  };
97 
98  static void *operator new(size_t count, Arrays &arrays);
99 
101  DynInst(const Arrays &arrays, const StaticInstPtr &staticInst,
102  const StaticInstPtr &macroop, InstSeqNum seq_num, CPU *cpu);
103 
104  DynInst(const Arrays &arrays, const StaticInstPtr &staticInst,
105  const StaticInstPtr &macroop, const PCStateBase &pc,
106  const PCStateBase &pred_pc, InstSeqNum seq_num, CPU *cpu);
107 
109  DynInst(const Arrays &arrays, const StaticInstPtr &_staticInst,
110  const StaticInstPtr &_macroop);
111 
112  ~DynInst();
113 
115  Fault execute();
116 
118  Fault initiateAcc();
119 
122 
125 
128 
130  CPU *cpu = nullptr;
131 
132  BaseCPU *getCpuPtr() { return cpu; }
133 
135  ThreadState *thread = nullptr;
136 
139 
142 
143  protected:
144  enum Status
145  {
172  };
173 
174  enum Flags
175  {
191  };
192 
193  private:
194  /* An amalgamation of a lot of boolean values into one */
195  std::bitset<MaxFlags> instFlags;
196 
198  std::bitset<NumStatus> status;
199 
200  protected:
204  std::queue<InstResult> instResult;
205 
207  std::unique_ptr<PCStateBase> pc;
208 
211 
217 
218  size_t _numSrcs;
219  size_t _numDests;
220 
221  // Flattened register index of the destination registers of this
222  // instruction.
224 
225  // Physical register index of the destination registers of this
226  // instruction.
228 
229  // Physical register index of the previous producers of the
230  // architected destinations.
232 
233  // Physical register index of the source registers of this instruction.
235 
236  // Whether or not the source register is ready, one bit per register.
237  uint8_t *_readySrcIdx;
238 
239  public:
240  size_t numSrcs() const { return _numSrcs; }
241  size_t numDests() const { return _numDests; }
242 
243  // Returns the flattened register index of the idx'th destination
244  // register.
245  const RegId &
246  flattenedDestIdx(int idx) const
247  {
248  return _flatDestIdx[idx];
249  }
250 
251  // Flattens a destination architectural register index into a logical
252  // index.
253  void
254  flattenedDestIdx(int idx, const RegId &reg_id)
255  {
256  _flatDestIdx[idx] = reg_id;
257  }
258 
259  // Returns the physical register index of the idx'th destination
260  // register.
262  renamedDestIdx(int idx) const
263  {
264  return _destIdx[idx];
265  }
266 
267  // Set the renamed dest register id.
268  void
269  renamedDestIdx(int idx, PhysRegIdPtr phys_reg_id)
270  {
271  _destIdx[idx] = phys_reg_id;
272  }
273 
274  // Returns the physical register index of the previous physical
275  // register that remapped to the same logical register index.
277  prevDestIdx(int idx) const
278  {
279  return _prevDestIdx[idx];
280  }
281 
282  // Set the previous renamed dest register id.
283  void
284  prevDestIdx(int idx, PhysRegIdPtr phys_reg_id)
285  {
286  _prevDestIdx[idx] = phys_reg_id;
287  }
288 
289  // Returns the physical register index of the i'th source register.
291  renamedSrcIdx(int idx) const
292  {
293  return _srcIdx[idx];
294  }
295 
296  void
297  renamedSrcIdx(int idx, PhysRegIdPtr phys_reg_id)
298  {
299  _srcIdx[idx] = phys_reg_id;
300  }
301 
302  bool
303  readySrcIdx(int idx) const
304  {
305  uint8_t &byte = _readySrcIdx[idx / 8];
306  return bits(byte, idx % 8);
307  }
308 
309  void
310  readySrcIdx(int idx, bool ready)
311  {
312  uint8_t &byte = _readySrcIdx[idx / 8];
313  replaceBits(byte, idx % 8, ready ? 1 : 0);
314  }
315 
318 
321 
323 
324  std::unique_ptr<PCStateBase> predPC;
325 
328 
330  uint8_t readyRegs = 0;
331 
332  public:
334 
336 
339 
341  unsigned memReqFlags = 0;
342 
344  unsigned effSize;
345 
347  uint8_t *memData = nullptr;
348 
350  ssize_t lqIdx = -1;
352 
354  ssize_t sqIdx = -1;
356 
357 
359 
364 
366  // Need a copy of main request pointer to verify on writes.
368 
369  public:
371  void recordResult(bool f) { instFlags[RecordResult] = f; }
372 
374  bool effAddrValid() const { return instFlags[EffAddrValid]; }
375  void effAddrValid(bool b) { instFlags[EffAddrValid] = b; }
376 
378  bool memOpDone() const { return instFlags[MemOpDone]; }
379  void memOpDone(bool f) { instFlags[MemOpDone] = f; }
380 
381  bool notAnInst() const { return instFlags[NotAnInst]; }
382  void setNotAnInst() { instFlags[NotAnInst] = true; }
383 
384 
386  //
387  // INSTRUCTION EXECUTION
388  //
390 
391  void
392  demapPage(Addr vaddr, uint64_t asn) override
393  {
394  cpu->demapPage(vaddr, asn);
395  }
396 
398  const std::vector<bool> &byte_enable) override;
399 
401 
402  Fault writeMem(uint8_t *data, unsigned size, Addr addr,
403  Request::Flags flags, uint64_t *res,
404  const std::vector<bool> &byte_enable) override;
405 
407  AtomicOpFunctorPtr amo_op) override;
408 
412 
414  bool
416  {
418  }
420 
426  bool
428  {
430  }
431  void
433  {
435  }
436 
441  bool hitExternalSnoop() const { return instFlags[HitExternalSnoop]; }
443 
448  bool
450  {
451  return (translationStarted() && !translationCompleted());
452  }
453 
454  public:
455 #ifdef DEBUG
456  void dumpSNList();
457 #endif
458 
462  void
463  renameDestReg(int idx, PhysRegIdPtr renamed_dest,
464  PhysRegIdPtr previous_rename)
465  {
466  renamedDestIdx(idx, renamed_dest);
467  prevDestIdx(idx, previous_rename);
468  if (renamed_dest->isPinned())
470  }
471 
476  void
477  renameSrcReg(int idx, PhysRegIdPtr renamed_src)
478  {
479  renamedSrcIdx(idx, renamed_src);
480  }
481 
483  void dump();
484 
486  void dump(std::string &outstring);
487 
489  int cpuId() const { return cpu->cpuId(); }
490 
492  uint32_t socketId() const { return cpu->socketId(); }
493 
495  RequestorID requestorId() const { return cpu->dataRequestorId(); }
496 
498  ContextID contextId() const { return thread->contextId(); }
499 
501  Fault getFault() const { return fault; }
504  Fault& getFault() { return fault; }
505 
511  bool doneTargCalc() { return false; }
512 
514  void setPredTarg(const PCStateBase &pred_pc) { set(predPC, pred_pc); }
515 
516  const PCStateBase &readPredTarg() { return *predPC; }
517 
519  bool readPredTaken() { return instFlags[PredTaken]; }
520 
521  void
522  setPredTaken(bool predicted_taken)
523  {
524  instFlags[PredTaken] = predicted_taken;
525  }
526 
528  bool
530  {
531  std::unique_ptr<PCStateBase> next_pc(pc->clone());
532  staticInst->advancePC(*next_pc);
533  return *next_pc != *predPC;
534  }
535 
536  //
537  // Instruction types. Forward checks to StaticInst object.
538  //
539  bool isNop() const { return staticInst->isNop(); }
540  bool isMemRef() const { return staticInst->isMemRef(); }
541  bool isLoad() const { return staticInst->isLoad(); }
542  bool isStore() const { return staticInst->isStore(); }
543  bool isAtomic() const { return staticInst->isAtomic(); }
544  bool isStoreConditional() const
545  { return staticInst->isStoreConditional(); }
546  bool isInstPrefetch() const { return staticInst->isInstPrefetch(); }
547  bool isDataPrefetch() const { return staticInst->isDataPrefetch(); }
548  bool isInteger() const { return staticInst->isInteger(); }
549  bool isFloating() const { return staticInst->isFloating(); }
550  bool isVector() const { return staticInst->isVector(); }
551  bool isControl() const { return staticInst->isControl(); }
552  bool isCall() const { return staticInst->isCall(); }
553  bool isReturn() const { return staticInst->isReturn(); }
554  bool isDirectCtrl() const { return staticInst->isDirectCtrl(); }
555  bool isIndirectCtrl() const { return staticInst->isIndirectCtrl(); }
556  bool isCondCtrl() const { return staticInst->isCondCtrl(); }
557  bool isUncondCtrl() const { return staticInst->isUncondCtrl(); }
558  bool isSerializing() const { return staticInst->isSerializing(); }
559  bool
561  {
563  }
564  bool
566  {
568  }
569  bool isSquashAfter() const { return staticInst->isSquashAfter(); }
570  bool isFullMemBarrier() const { return staticInst->isFullMemBarrier(); }
571  bool isReadBarrier() const { return staticInst->isReadBarrier(); }
572  bool isWriteBarrier() const { return staticInst->isWriteBarrier(); }
573  bool isNonSpeculative() const { return staticInst->isNonSpeculative(); }
574  bool isQuiesce() const { return staticInst->isQuiesce(); }
575  bool isUnverifiable() const { return staticInst->isUnverifiable(); }
576  bool isSyscall() const { return staticInst->isSyscall(); }
577  bool isMacroop() const { return staticInst->isMacroop(); }
578  bool isMicroop() const { return staticInst->isMicroop(); }
579  bool isDelayedCommit() const { return staticInst->isDelayedCommit(); }
580  bool isLastMicroop() const { return staticInst->isLastMicroop(); }
581  bool isFirstMicroop() const { return staticInst->isFirstMicroop(); }
582  // hardware transactional memory
583  bool isHtmStart() const { return staticInst->isHtmStart(); }
584  bool isHtmStop() const { return staticInst->isHtmStop(); }
585  bool isHtmCancel() const { return staticInst->isHtmCancel(); }
586  bool isHtmCmd() const { return staticInst->isHtmCmd(); }
587 
588  uint64_t
589  getHtmTransactionUid() const override
590  {
591  assert(instFlags[HtmFromTransaction]);
592  return htmUid;
593  }
594 
595  uint64_t
596  newHtmTransactionUid() const override
597  {
598  panic("Not yet implemented\n");
599  return 0;
600  }
601 
602  bool
603  inHtmTransactionalState() const override
604  {
606  }
607 
608  uint64_t
609  getHtmTransactionalDepth() const override
610  {
612  return htmDepth;
613  else
614  return 0;
615  }
616 
617  void
618  setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
619  {
621  htmUid = htm_uid;
622  htmDepth = htm_depth;
623  }
624 
625  void
627  {
628  if (inHtmTransactionalState()) {
629  DPRINTF(HtmCpu,
630  "clearing instuction's transactional state htmUid=%u\n",
632 
634  htmUid = -1;
635  htmDepth = 0;
636  }
637  }
638 
641 
644 
647 
650 
653 
656 
659 
666 
668  OpClass opClass() const { return staticInst->opClass(); }
669 
671  std::unique_ptr<PCStateBase>
672  branchTarget() const
673  {
674  return staticInst->branchTarget(*pc);
675  }
676 
678  size_t numSrcRegs() const { return numSrcs(); }
679 
681  size_t numDestRegs() const { return numDests(); }
682 
683  size_t
685  {
686  return staticInst->numDestRegs(type);
687  }
688 
690  const RegId& destRegIdx(int i) const { return staticInst->destRegIdx(i); }
691 
693  const RegId& srcRegIdx(int i) const { return staticInst->srcRegIdx(i); }
694 
696  uint8_t resultSize() { return instResult.size(); }
697 
701  InstResult
703  {
704  if (!instResult.empty()) {
705  InstResult t = instResult.front();
706  instResult.pop();
707  return t;
708  }
709  return dflt;
710  }
711 
714  template<typename T>
715  void
717  {
718  if (instFlags[RecordResult]) {
719  instResult.emplace(std::forward<T>(t));
720  }
721  }
725  void markSrcRegReady();
726 
728  void markSrcRegReady(RegIndex src_idx);
729 
731  void setCompleted() { status.set(Completed); }
732 
734  bool isCompleted() const { return status[Completed]; }
735 
738 
740  bool isResultReady() const { return status[ResultReady]; }
741 
743  void setCanIssue() { status.set(CanIssue); }
744 
746  bool readyToIssue() const { return status[CanIssue]; }
747 
749  void clearCanIssue() { status.reset(CanIssue); }
750 
752  void setIssued() { status.set(Issued); }
753 
755  bool isIssued() const { return status[Issued]; }
756 
758  void clearIssued() { status.reset(Issued); }
759 
761  void setExecuted() { status.set(Executed); }
762 
764  bool isExecuted() const { return status[Executed]; }
765 
767  void setCanCommit() { status.set(CanCommit); }
768 
770  void clearCanCommit() { status.reset(CanCommit); }
771 
773  bool readyToCommit() const { return status[CanCommit]; }
774 
775  void setAtCommit() { status.set(AtCommit); }
776 
777  bool isAtCommit() { return status[AtCommit]; }
778 
780  void setCommitted() { status.set(Committed); }
781 
783  bool isCommitted() const { return status[Committed]; }
784 
786  void setSquashed();
787 
789  bool isSquashed() const { return status[Squashed]; }
790 
791  //Instruction Queue Entry
792  //-----------------------
794  void setInIQ() { status.set(IqEntry); }
795 
797  void clearInIQ() { status.reset(IqEntry); }
798 
800  bool isInIQ() const { return status[IqEntry]; }
801 
804 
806  bool isSquashedInIQ() const { return status[SquashedInIQ]; }
807 
808 
809  //Load / Store Queue Functions
810  //-----------------------
812  void setInLSQ() { status.set(LsqEntry); }
813 
815  void removeInLSQ() { status.reset(LsqEntry); }
816 
818  bool isInLSQ() const { return status[LsqEntry]; }
819 
822 
824  bool isSquashedInLSQ() const { return status[SquashedInLSQ]; }
825 
826 
827  //Reorder Buffer Functions
828  //-----------------------
830  void setInROB() { status.set(RobEntry); }
831 
833  void clearInROB() { status.reset(RobEntry); }
834 
836  bool isInROB() const { return status[RobEntry]; }
837 
840 
842  bool isSquashedInROB() const { return status[SquashedInROB]; }
843 
845  bool isPinnedRegsRenamed() const { return status[PinnedRegsRenamed]; }
846 
848  void
850  {
851  assert(!status[PinnedRegsSquashDone]);
852  assert(!status[PinnedRegsWritten]);
854  }
855 
857  bool isPinnedRegsWritten() const { return status[PinnedRegsWritten]; }
858 
860  void
862  {
863  assert(!status[PinnedRegsSquashDone]);
864  assert(status[PinnedRegsRenamed]);
866  }
867 
869  bool
871  {
873  }
874 
876  void
878  {
879  assert(!status[PinnedRegsSquashDone]);
881  }
882 
884  const PCStateBase &
885  pcState() const override
886  {
887  return *pc;
888  }
889 
891  void pcState(const PCStateBase &val) override { set(pc, val); }
892 
893  bool readPredicate() const override { return instFlags[Predicate]; }
894 
895  void
896  setPredicate(bool val) override
897  {
899 
900  if (traceData) {
902  }
903  }
904 
905  bool
906  readMemAccPredicate() const override
907  {
908  return instFlags[MemAccPredicate];
909  }
910 
911  void
912  setMemAccPredicate(bool val) override
913  {
915  }
916 
918  void setTid(ThreadID tid) { threadNumber = tid; }
919 
922 
924  gem5::ThreadContext *tcBase() const override { return thread->getTC(); }
925 
926  public:
928  bool strictlyOrdered() const { return instFlags[IsStrictlyOrdered]; }
930 
932  bool hasRequest() const { return instFlags[ReqMade]; }
934  void setRequest() { instFlags[ReqMade] = true; }
935 
938 
940  void setInstListIt(ListIt _instListIt) { instListIt = _instListIt; }
941 
942  public:
944  unsigned int
945  readStCondFailures() const override
946  {
947  return thread->storeCondFailures;
948  }
949 
951  void
952  setStCondFailures(unsigned int sc_failures) override
953  {
954  thread->storeCondFailures = sc_failures;
955  }
956 
957  public:
958  // monitor/mwait funtions
959  void
960  armMonitor(Addr address) override
961  {
962  cpu->armMonitor(threadNumber, address);
963  }
964  bool
965  mwait(PacketPtr pkt) override
966  {
967  return cpu->mwait(threadNumber, pkt);
968  }
969  void
971  {
972  return cpu->mwaitAtomic(threadNumber, tc, cpu->mmu);
973  }
974  AddressMonitor *
975  getAddrMonitor() override
976  {
977  return cpu->getCpuAddrMonitor(threadNumber);
978  }
979 
980  private:
981  // hardware transactional memory
982  uint64_t htmUid = -1;
983  uint64_t htmDepth = 0;
984 
985  public:
986 #if TRACING_ON
987  // Value -1 indicates that particular phase
988  // hasn't happened (yet).
990  Tick fetchTick = -1; // instruction fetch is completed.
991  int32_t decodeTick = -1; // instruction enters decode phase
992  int32_t renameTick = -1; // instruction enters rename phase
993  int32_t dispatchTick = -1;
994  int32_t issueTick = -1;
995  int32_t completeTick = -1;
996  int32_t commitTick = -1;
997  int32_t storeTick = -1;
998 #endif
999 
1000  /* Values used by LoadToUse stat */
1003 
1007  RegVal
1008  readMiscReg(int misc_reg) override
1009  {
1010  return cpu->readMiscReg(misc_reg, threadNumber);
1011  }
1012 
1016  void
1017  setMiscReg(int misc_reg, RegVal val) override
1018  {
1025  for (auto &idx: _destMiscRegIdx) {
1026  if (idx == misc_reg)
1027  return;
1028  }
1029 
1030  _destMiscRegIdx.push_back(misc_reg);
1031  _destMiscRegVal.push_back(val);
1032  }
1033 
1037  RegVal
1038  readMiscRegOperand(const StaticInst *si, int idx) override
1039  {
1040  const RegId& reg = si->srcRegIdx(idx);
1041  assert(reg.is(MiscRegClass));
1042  return cpu->readMiscReg(reg.index(), threadNumber);
1043  }
1044 
1048  void
1049  setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
1050  {
1051  const RegId& reg = si->destRegIdx(idx);
1052  assert(reg.is(MiscRegClass));
1053  setMiscReg(reg.index(), val);
1054  }
1055 
1057  void
1059  {
1060  // @todo: Pretty convoluted way to avoid squashing from happening when
1061  // using the TC during an instruction's execution (specifically for
1062  // instructions that have side-effects that use the TC). Fix this.
1063  // See cpu/o3/dyn_inst_impl.hh.
1064  bool no_squash_from_TC = thread->noSquashFromTC;
1065  thread->noSquashFromTC = true;
1066 
1067  for (int i = 0; i < _destMiscRegIdx.size(); i++)
1068  cpu->setMiscReg(
1070 
1071  thread->noSquashFromTC = no_squash_from_TC;
1072  }
1073 
1074  void
1076  {
1077 
1078  for (int idx = 0; idx < numDestRegs(); idx++) {
1079  PhysRegIdPtr prev_phys_reg = prevDestIdx(idx);
1080  const RegId& original_dest_reg = staticInst->destRegIdx(idx);
1081  switch (original_dest_reg.classValue()) {
1082  case IntRegClass:
1083  case FloatRegClass:
1084  case CCRegClass:
1085  setRegOperand(staticInst.get(), idx,
1086  cpu->getReg(prev_phys_reg));
1087  break;
1088  case VecRegClass:
1089  {
1091  cpu->getReg(prev_phys_reg, &val);
1092  setRegOperand(staticInst.get(), idx, &val);
1093  }
1094  break;
1095  case VecElemClass:
1096  setRegOperand(staticInst.get(), idx,
1097  cpu->getReg(prev_phys_reg));
1098  break;
1099  case VecPredRegClass:
1100  {
1102  cpu->getReg(prev_phys_reg, &val);
1103  setRegOperand(staticInst.get(), idx, &val);
1104  }
1105  break;
1106  case InvalidRegClass:
1107  case MiscRegClass:
1108  // no need to forward misc reg values
1109  break;
1110  default:
1111  panic("Unknown register class: %d",
1112  (int)original_dest_reg.classValue());
1113  }
1114  }
1115  }
1117  void trap(const Fault &fault);
1118 
1119  public:
1120 
1121  // The register accessor methods provide the index of the
1122  // instruction's operand (e.g., 0 or 1), not the architectural
1123  // register index, to simplify the implementation of register
1124  // renaming. We find the architectural register index by indexing
1125  // into the instruction's own operand index table. Note that a
1126  // raw pointer to the StaticInst is provided instead of a
1127  // ref-counted StaticInstPtr to redice overhead. This is fine as
1128  // long as these methods don't copy the pointer into any long-term
1129  // storage (which is pretty hard to imagine they would have reason
1130  // to do).
1131 
1132  RegVal
1133  getRegOperand(const StaticInst *si, int idx) override
1134  {
1135  const PhysRegIdPtr reg = renamedSrcIdx(idx);
1136  if (reg->is(InvalidRegClass))
1137  return 0;
1138  return cpu->getReg(reg);
1139  }
1140 
1141  void
1142  getRegOperand(const StaticInst *si, int idx, void *val) override
1143  {
1144  const PhysRegIdPtr reg = renamedSrcIdx(idx);
1145  if (reg->is(InvalidRegClass))
1146  return;
1147  cpu->getReg(reg, val);
1148  }
1149 
1150  void *
1151  getWritableRegOperand(const StaticInst *si, int idx) override
1152  {
1153  return cpu->getWritableReg(renamedDestIdx(idx));
1154  }
1155 
1159  void
1160  setRegOperand(const StaticInst *si, int idx, RegVal val) override
1161  {
1162  const PhysRegIdPtr reg = renamedDestIdx(idx);
1163  if (reg->is(InvalidRegClass))
1164  return;
1165  cpu->setReg(reg, val);
1166  setResult(val);
1167  }
1168 
1169  void
1170  setRegOperand(const StaticInst *si, int idx, const void *val) override
1171  {
1172  const PhysRegIdPtr reg = renamedDestIdx(idx);
1173  if (reg->is(InvalidRegClass))
1174  return;
1175  cpu->setReg(reg, val);
1176  //TODO setResult
1177  }
1178 };
1179 
1180 } // namespace o3
1181 } // namespace gem5
1182 
1183 #endif // __CPU_O3_DYN_INST_HH__
gem5::o3::DynInst::getInstListIt
ListIt & getInstListIt()
Returns iterator to this instruction in the list of all insts.
Definition: dyn_inst.hh:937
gem5::o3::DynInst::isInLSQ
bool isInLSQ() const
Returns whether or not this instruction is in the LSQ.
Definition: dyn_inst.hh:818
gem5::o3::DynInst::setSquashedInIQ
void setSquashedInIQ()
Sets this instruction as squashed in the IQ.
Definition: dyn_inst.hh:803
refcnt.hh
gem5::VegaISA::f
Bitfield< 56 > f
Definition: pagetable.hh:53
gem5::o3::DynInst::PinnedRegsRenamed
@ PinnedRegsRenamed
Instruction is squashed in the ROB.
Definition: dyn_inst.hh:161
gem5::o3::DynInst::PinnedRegsSquashDone
@ PinnedRegsSquashDone
Pinned registers are written back.
Definition: dyn_inst.hh:163
gem5::o3::DynInst::isMicroop
bool isMicroop() const
Definition: dyn_inst.hh:578
gem5::o3::DynInst::ThreadsyncWait
@ ThreadsyncWait
Is a blocking instruction.
Definition: dyn_inst.hh:166
gem5::o3::DynInst::Arrays
Definition: dyn_inst.hh:86
gem5::o3::LSQ::LSQRequest
Memory operation metadata.
Definition: lsq.hh:189
gem5::PhysRegId::isPinned
bool isPinned() const
Definition: reg_class.hh:322
gem5::NoFault
constexpr decltype(nullptr) NoFault
Definition: types.hh:253
gem5::o3::DynInst::setMiscRegOperand
void setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
Sets a misc.
Definition: dyn_inst.hh:1049
gem5::StaticInst::isMicroop
bool isMicroop() const
Definition: static_inst.hh:186
gem5::StaticInst::isWriteBarrier
bool isWriteBarrier() const
Definition: static_inst.hh:180
gem5::StaticInst::isSerializeBefore
bool isSerializeBefore() const
Definition: static_inst.hh:171
gem5::o3::DynInst::predPC
std::unique_ptr< PCStateBase > predPC
Predicted PC state after this instruction.
Definition: dyn_inst.hh:324
gem5::o3::DynInst::Squashed
@ Squashed
Instruction has committed.
Definition: dyn_inst.hh:157
gem5::o3::CPU::getReg
RegVal getReg(PhysRegIdPtr phys_reg)
Definition: cpu.cc:1040
gem5::o3::DynInst::initiateAcc
Fault initiateAcc()
Initiates the access.
Definition: dyn_inst.cc:356
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::o3::DynInst::setInIQ
void setInIQ()
Sets this instruction as a entry the IQ.
Definition: dyn_inst.hh:794
gem5::o3::DynInst::readySrcIdx
bool readySrcIdx(int idx) const
Definition: dyn_inst.hh:303
gem5::o3::DynInst::threadNumber
ThreadID threadNumber
The thread this instruction is from.
Definition: dyn_inst.hh:317
gem5::o3::DynInst::newHtmTransactionUid
uint64_t newHtmTransactionUid() const override
Definition: dyn_inst.hh:596
gem5::o3::DynInst::TranslationCompleted
@ TranslationCompleted
Definition: dyn_inst.hh:178
gem5::o3::CPU::mmu
BaseMMU * mmu
Definition: cpu.hh:111
gem5::ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: vec.hh:68
gem5::o3::DynInst::setCanCommit
void setCanCommit()
Sets this instruction as ready to commit.
Definition: dyn_inst.hh:767
op_class.hh
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::StaticInst::isNonSpeculative
bool isNonSpeculative() const
Definition: static_inst.hh:181
gem5::o3::DynInst::RecordResult
@ RecordResult
Definition: dyn_inst.hh:182
gem5::o3::DynInst::numSrcRegs
size_t numSrcRegs() const
Returns the number of source registers.
Definition: dyn_inst.hh:678
gem5::o3::DynInst::getCpuPtr
BaseCPU * getCpuPtr()
Definition: dyn_inst.hh:132
gem5::o3::DynInst::sqIt
LSQUnit::SQIterator sqIt
Definition: dyn_inst.hh:355
gem5::StaticInst::isQuiesce
bool isQuiesce() const
Definition: static_inst.hh:182
gem5::o3::DynInst::isCompleted
bool isCompleted() const
Returns whether or not this instruction is completed.
Definition: dyn_inst.hh:734
gem5::o3::DynInst::isMemRef
bool isMemRef() const
Definition: dyn_inst.hh:540
gem5::o3::DynInst::ListIt
std::list< DynInstPtr >::iterator ListIt
Definition: dyn_inst.hh:84
gem5::o3::DynInst::socketId
uint32_t socketId() const
Read this CPU's Socket ID.
Definition: dyn_inst.hh:492
gem5::o3::DynInst::isControl
bool isControl() const
Definition: dyn_inst.hh:551
gem5::o3::DynInst::HtmFromTransaction
@ HtmFromTransaction
Definition: dyn_inst.hh:189
gem5::o3::DynInst::renamedDestIdx
void renamedDestIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: dyn_inst.hh:269
gem5::o3::DynInst::savedRequest
LSQ::LSQRequest * savedRequest
Saved memory request (needed when the DTB address translation is delayed due to a hw page table walk)...
Definition: dyn_inst.hh:363
gem5::o3::DynInst::flattenedDestIdx
const RegId & flattenedDestIdx(int idx) const
Definition: dyn_inst.hh:246
gem5::VecElemClass
@ VecElemClass
Vector Register Native Elem lane.
Definition: reg_class.hh:63
gem5::StaticInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: static_inst.hh:164
gem5::o3::DynInst::isQuiesce
bool isQuiesce() const
Definition: dyn_inst.hh:574
gem5::StaticInst::isUnverifiable
bool isUnverifiable() const
Definition: static_inst.hh:183
gem5::StaticInst::isNop
bool isNop() const
Definition: static_inst.hh:140
gem5::InvalidRegClass
@ InvalidRegClass
Definition: reg_class.hh:67
gem5::o3::DynInst::setCompleted
void setCompleted()
Sets this instruction as completed.
Definition: dyn_inst.hh:731
gem5::o3::DynInst::setCanIssue
void setCanIssue()
Sets this instruction as ready to issue.
Definition: dyn_inst.hh:743
gem5::StaticInst::isSerializeAfter
bool isSerializeAfter() const
Definition: static_inst.hh:172
gem5::o3::DynInst::isIssued
bool isIssued() const
Returns whether or not this instruction has issued.
Definition: dyn_inst.hh:755
gem5::o3::DynInst::memReqFlags
unsigned memReqFlags
The memory request flags (from translation).
Definition: dyn_inst.hh:341
gem5::o3::DynInst::setSerializeAfter
void setSerializeAfter()
Temporarily sets this instruction as a serialize after instruction.
Definition: dyn_inst.hh:649
gem5::CCRegClass
@ CCRegClass
Condition-code register.
Definition: reg_class.hh:65
gem5::o3::DynInst::Arrays::numSrcs
size_t numSrcs
Definition: dyn_inst.hh:88
gem5::o3::DynInst::isTranslationDelayed
bool isTranslationDelayed() const
Returns true if the DTB address translation is being delayed due to a hw page table walk.
Definition: dyn_inst.hh:449
gem5::StaticInst::isControl
bool isControl() const
Definition: static_inst.hh:160
gem5::o3::DynInst::setMiscReg
void setMiscReg(int misc_reg, RegVal val) override
Sets a misc.
Definition: dyn_inst.hh:1017
gem5::ArmISA::set
Bitfield< 12, 11 > set
Definition: misc_types.hh:703
gem5::o3::DynInst::Arrays::flatDestIdx
RegId * flatDestIdx
Definition: dyn_inst.hh:91
gem5::o3::DynInst::instListIt
ListIt instListIt
Iterator pointing to this BaseDynInst in the list of all insts.
Definition: dyn_inst.hh:320
gem5::o3::DynInst::updateMiscRegs
void updateMiscRegs()
Called at the commit stage to update the misc.
Definition: dyn_inst.hh:1058
gem5::o3::DynInst::Arrays::srcIdx
PhysRegIdPtr * srcIdx
Definition: dyn_inst.hh:94
gem5::o3::DynInst::prevDestIdx
PhysRegIdPtr prevDestIdx(int idx) const
Definition: dyn_inst.hh:277
gem5::o3::DynInst::Arrays::prevDestIdx
PhysRegIdPtr * prevDestIdx
Definition: dyn_inst.hh:93
gem5::replaceBits
constexpr void replaceBits(T &val, unsigned first, unsigned last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
Definition: bitfield.hh:197
gem5::o3::DynInst::pc
std::unique_ptr< PCStateBase > pc
PC state for this instruction.
Definition: dyn_inst.hh:207
gem5::o3::CPU::setReg
void setReg(PhysRegIdPtr phys_reg, RegVal val)
Definition: cpu.cc:1108
gem5::o3::DynInst::instResult
std::queue< InstResult > instResult
The result of the instruction; assumes an instruction can have many destination registers.
Definition: dyn_inst.hh:204
gem5::o3::DynInst::isInROB
bool isInROB() const
Returns whether or not this instruction is in the ROB.
Definition: dyn_inst.hh:836
gem5::o3::DynInst::cpuId
int cpuId() const
Read this CPU's ID.
Definition: dyn_inst.hh:489
gem5::o3::DynInst::isStoreConditional
bool isStoreConditional() const
Definition: dyn_inst.hh:544
gem5::o3::DynInst::TranslationStarted
@ TranslationStarted
Definition: dyn_inst.hh:177
gem5::o3::DynInst::setThreadState
void setThreadState(ThreadState *state)
Sets the pointer to the thread state.
Definition: dyn_inst.hh:921
gem5::o3::DynInst::isDirectCtrl
bool isDirectCtrl() const
Definition: dyn_inst.hh:554
gem5::o3::DynInst::isSquashedInIQ
bool isSquashedInIQ() const
Returns whether or not this instruction is squashed in the IQ.
Definition: dyn_inst.hh:806
gem5::o3::DynInst::possibleLoadViolation
void possibleLoadViolation(bool f)
Definition: dyn_inst.hh:432
gem5::o3::DynInst::lqIt
LSQUnit::LQIterator lqIt
Definition: dyn_inst.hh:351
gem5::o3::DynInst::_destMiscRegIdx
std::vector< short > _destMiscRegIdx
Indexes of the destination misc.
Definition: dyn_inst.hh:216
gem5::o3::DynInst::_readySrcIdx
uint8_t * _readySrcIdx
Definition: dyn_inst.hh:237
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
gem5::o3::DynInst::effSize
unsigned effSize
The size of the request.
Definition: dyn_inst.hh:344
gem5::o3::DynInst::isInstPrefetch
bool isInstPrefetch() const
Definition: dyn_inst.hh:546
exetrace.hh
gem5::o3::DynInst::SerializeHandled
@ SerializeHandled
Needs to serialize instructions behind it.
Definition: dyn_inst.hh:170
gem5::o3::DynInst::setRequest
void setRequest()
Assert this instruction has generated a memory request.
Definition: dyn_inst.hh:934
gem5::o3::DynInst::status
std::bitset< NumStatus > status
The status of this BaseDynInst.
Definition: dyn_inst.hh:198
gem5::o3::DynInst::recordResult
void recordResult(bool f)
Records changes to result?
Definition: dyn_inst.hh:371
gem5::o3::DynInst::isSyscall
bool isSyscall() const
Definition: dyn_inst.hh:576
gem5::o3::DynInst::_numDests
size_t _numDests
Definition: dyn_inst.hh:219
gem5::StaticInst::isCondCtrl
bool isCondCtrl() const
Definition: static_inst.hh:165
gem5::o3::DynInst::getAddrMonitor
AddressMonitor * getAddrMonitor() override
Definition: dyn_inst.hh:975
gem5::o3::DynInst::instFlags
std::bitset< MaxFlags > instFlags
Definition: dyn_inst.hh:195
gem5::o3::DynInst::isNop
bool isNop() const
Definition: dyn_inst.hh:539
gem5::o3::DynInst::Completed
@ Completed
Instruction is in the LSQ.
Definition: dyn_inst.hh:149
gem5::o3::DynInst::isPinnedRegsRenamed
bool isPinnedRegsRenamed() const
Returns whether pinned registers are renamed.
Definition: dyn_inst.hh:845
gem5::o3::DynInst::seqNum
InstSeqNum seqNum
The sequence number of the instruction.
Definition: dyn_inst.hh:124
gem5::o3::DynInst::branchTarget
std::unique_ptr< PCStateBase > branchTarget() const
Returns the branch target address.
Definition: dyn_inst.hh:672
gem5::o3::DynInst::Arrays::destIdx
PhysRegIdPtr * destIdx
Definition: dyn_inst.hh:92
gem5::o3::DynInst::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: dyn_inst.hh:477
gem5::o3::DynInst::doneTargCalc
bool doneTargCalc()
Checks whether or not this instruction has had its branch target calculated yet.
Definition: dyn_inst.hh:511
gem5::o3::DynInst::getHtmTransactionUid
uint64_t getHtmTransactionUid() const override
Definition: dyn_inst.hh:589
gem5::o3::DynInst::tcBase
gem5::ThreadContext * tcBase() const override
Returns the thread context.
Definition: dyn_inst.hh:924
std::vector< RegVal >
gem5::o3::DynInst::RecoverInst
@ RecoverInst
Regs pinning status updated after squash.
Definition: dyn_inst.hh:164
gem5::o3::CPU::setMiscReg
void setMiscReg(int misc_reg, RegVal val, ThreadID tid)
Sets a misc.
Definition: cpu.cc:1033
gem5::StaticInst::isDelayedCommit
bool isDelayedCommit() const
Definition: static_inst.hh:187
gem5::Trace::InstRecord::setPredicate
void setPredicate(bool val)
Definition: insttracer.hh:264
gem5::RefCountingPtr::get
T * get() const
Directly access the pointer itself without taking a reference.
Definition: refcnt.hh:227
gem5::o3::DynInst::numDestRegs
size_t numDestRegs() const
Returns the number of destination registers.
Definition: dyn_inst.hh:681
gem5::o3::DynInst::isTempSerializeAfter
bool isTempSerializeAfter()
Checks if this serializeAfter is only temporarily set.
Definition: dyn_inst.hh:655
gem5::o3::DynInst::translationStarted
void translationStarted(bool f)
Definition: dyn_inst.hh:411
gem5::o3::DynInst::isCommitted
bool isCommitted() const
Returns whether or not this instruction is committed.
Definition: dyn_inst.hh:783
gem5::o3::DynInst::pcState
const PCStateBase & pcState() const override
Read the PC state of this instruction.
Definition: dyn_inst.hh:885
gem5::o3::DynInst::notAnInst
bool notAnInst() const
Definition: dyn_inst.hh:381
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::StaticInst::isFirstMicroop
bool isFirstMicroop() const
Definition: static_inst.hh:189
gem5::o3::DynInst::_prevDestIdx
PhysRegIdPtr * _prevDestIdx
Definition: dyn_inst.hh:231
gem5::o3::DynInst::setRegOperand
void setRegOperand(const StaticInst *si, int idx, const void *val) override
Definition: dyn_inst.hh:1170
gem5::o3::DynInst::setResultReady
void setResultReady()
Marks the result as ready.
Definition: dyn_inst.hh:737
gem5::o3::DynInst::Predicate
@ Predicate
Definition: dyn_inst.hh:183
gem5::o3::DynInst::setPinnedRegsWritten
void setPinnedRegsWritten()
Sets destination registers as written.
Definition: dyn_inst.hh:861
inst_res.hh
gem5::o3::DynInst::ReqMade
@ ReqMade
Definition: dyn_inst.hh:187
gem5::o3::DynInst::setNotAnInst
void setNotAnInst()
Definition: dyn_inst.hh:382
gem5::o3::DynInst::SquashedInLSQ
@ SquashedInLSQ
Instruction is squashed in the IQ.
Definition: dyn_inst.hh:159
gem5::StaticInst::advancePC
virtual void advancePC(PCStateBase &pc_state) const =0
gem5::StaticInst::destRegIdx
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
Definition: static_inst.hh:215
gem5::o3::DynInst::setAtCommit
void setAtCommit()
Definition: dyn_inst.hh:775
gem5::o3::DynInst::thread
ThreadState * thread
Pointer to the thread state.
Definition: dyn_inst.hh:135
gem5::o3::DynInst::MemAccPredicate
@ MemAccPredicate
Definition: dyn_inst.hh:184
gem5::o3::DynInst::setHtmTransactionalState
void setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
Definition: dyn_inst.hh:618
gem5::o3::CPU::demapPage
void demapPage(Addr vaddr, uint64_t asn)
Definition: cpu.hh:181
gem5::o3::DynInst::readMemAccPredicate
bool readMemAccPredicate() const override
Definition: dyn_inst.hh:906
gem5::o3::DynInst::readPredTarg
const PCStateBase & readPredTarg()
Definition: dyn_inst.hh:516
gem5::o3::DynInst::translationStarted
bool translationStarted() const
True if the DTB address translation has started.
Definition: dyn_inst.hh:410
gem5::o3::DynInst::IqEntry
@ IqEntry
Definition: dyn_inst.hh:146
gem5::o3::DynInst::hasRequest
bool hasRequest() const
Has this instruction generated a memory request.
Definition: dyn_inst.hh:932
gem5::VecPredRegClass
@ VecPredRegClass
Definition: reg_class.hh:64
gem5::o3::DynInst::clearInROB
void clearInROB()
Sets this instruction as a entry the ROB.
Definition: dyn_inst.hh:833
gem5::o3::DynInst::popResult
InstResult popResult(InstResult dflt=InstResult())
Pops a result off the instResult queue.
Definition: dyn_inst.hh:702
gem5::o3::DynInst::isInIQ
bool isInIQ() const
Returns whether or not this instruction has issued.
Definition: dyn_inst.hh:800
gem5::RefCountingPtr< StaticInst >
gem5::o3::DynInst::possibleLoadViolation
bool possibleLoadViolation() const
True if this address was found to match a previous load and they issued out of order.
Definition: dyn_inst.hh:427
gem5::o3::DynInst::readyToCommit
bool readyToCommit() const
Returns whether or not this instruction is ready to commit.
Definition: dyn_inst.hh:773
gem5::o3::DynInst::~DynInst
~DynInst()
Definition: dyn_inst.cc:190
gem5::o3::DynInst::dump
void dump()
Dumps out contents of this BaseDynInst.
Definition: dyn_inst.cc:278
gem5::o3::DynInst::physEffAddr
Addr physEffAddr
The effective physical address.
Definition: dyn_inst.hh:338
gem5::o3::DynInst::cpu
CPU * cpu
Pointer to the Impl's CPU object.
Definition: dyn_inst.hh:130
gem5::StaticInst::opClass
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
Definition: static_inst.hh:210
gem5::o3::DynInst::readyToIssue
bool readyToIssue() const
Returns whether or not this instruction is ready to issue.
Definition: dyn_inst.hh:746
gem5::o3::DynInst::setInstListIt
void setInstListIt(ListIt _instListIt)
Sets iterator for this instruction in the list of all insts.
Definition: dyn_inst.hh:940
gem5::o3::DynInst::markSrcRegReady
void markSrcRegReady()
Records that one of the source registers is ready.
Definition: dyn_inst.cc:296
gem5::o3::DynInst::setExecuted
void setExecuted()
Sets this instruction as executed.
Definition: dyn_inst.hh:761
gem5::StaticInst::isHtmCancel
bool isHtmCancel() const
Definition: static_inst.hh:195
gem5::StaticInst::isFloating
bool isFloating() const
Definition: static_inst.hh:157
gem5::o3::DynInst::EffAddrValid
@ EffAddrValid
Definition: dyn_inst.hh:181
gem5::o3::ThreadState::getTC
gem5::ThreadContext * getTC()
Returns a pointer to the TC of this thread.
Definition: thread_state.hh:103
gem5::FloatRegClass
@ FloatRegClass
Floating-point register.
Definition: reg_class.hh:59
gem5::StaticInst::isHtmCmd
bool isHtmCmd() const
Definition: static_inst.hh:198
gem5::o3::DynInst::numSrcs
size_t numSrcs() const
Definition: dyn_inst.hh:240
gem5::Flags< FlagsType >
gem5::StaticInst::isReturn
bool isReturn() const
Definition: static_inst.hh:162
gem5::o3::DynInst::Committed
@ Committed
Instruction has reached commit.
Definition: dyn_inst.hh:156
gem5::o3::DynInst::prevDestIdx
void prevDestIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: dyn_inst.hh:284
gem5::o3::DynInst::destRegIdx
const RegId & destRegIdx(int i) const
Returns the logical register index of the i'th destination register.
Definition: dyn_inst.hh:690
gem5::o3::DynInst::renamedSrcIdx
void renamedSrcIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: dyn_inst.hh:297
gem5::o3::DynInst::readPredTaken
bool readPredTaken()
Returns whether the instruction was predicted taken or not.
Definition: dyn_inst.hh:519
gem5::ArmISA::b
Bitfield< 7 > b
Definition: misc_types.hh:382
gem5::StaticInst::isHtmStart
bool isHtmStart() const
Definition: static_inst.hh:193
gem5::StaticInst::isDataPrefetch
bool isDataPrefetch() const
Definition: static_inst.hh:152
inst_seq.hh
gem5::o3::CPU
O3CPU class, has each of the stages (fetch through commit) within it, as well as all of the time buff...
Definition: cpu.hh:94
translation.hh
gem5::StaticInst
Base, ISA-independent static instruction class.
Definition: static_inst.hh:88
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:94
gem5::o3::DynInst::sqIdx
ssize_t sqIdx
Store queue index.
Definition: dyn_inst.hh:354
gem5::VegaISA::t
Bitfield< 51 > t
Definition: pagetable.hh:56
gem5::o3::DynInst::readMiscReg
RegVal readMiscReg(int misc_reg) override
Reads a misc.
Definition: dyn_inst.hh:1008
gem5::o3::DynInst::getRegOperand
RegVal getRegOperand(const StaticInst *si, int idx) override
Definition: dyn_inst.hh:1133
gem5::o3::DynInst::isSerializeHandled
bool isSerializeHandled()
Checks if the serialization part of this instruction has been handled.
Definition: dyn_inst.hh:665
gem5::o3::DynInst::isFloating
bool isFloating() const
Definition: dyn_inst.hh:549
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
gem5::o3::DynInst::trap
void trap(const Fault &fault)
Traps to handle specified fault.
Definition: dyn_inst.cc:396
gem5::o3::DynInst::setPinnedRegsSquashDone
void setPinnedRegsSquashDone()
Sets dest registers' status updated after squash.
Definition: dyn_inst.hh:877
gem5::StaticInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
Definition: static_inst.hh:225
gem5::o3::DynInst::pcState
void pcState(const PCStateBase &val) override
Set the PC state of this instruction.
Definition: dyn_inst.hh:891
gem5::StaticInst::isAtomic
bool isAtomic() const
Definition: static_inst.hh:149
gem5::o3::DynInst::setTid
void setTid(ThreadID tid)
Sets the thread id.
Definition: dyn_inst.hh:918
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:186
gem5::o3::DynInst::renameDestReg
void renameDestReg(int idx, PhysRegIdPtr renamed_dest, PhysRegIdPtr previous_rename)
Renames a destination register to a physical register.
Definition: dyn_inst.hh:463
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:291
gem5::o3::DynInst::execute
Fault execute()
Executes the instruction.
Definition: dyn_inst.cc:339
gem5::ThreadState::storeCondFailures
unsigned storeCondFailures
Definition: thread_state.hh:138
gem5::o3::DynInst::htmUid
uint64_t htmUid
Definition: dyn_inst.hh:982
gem5::probing::Packet
ProbePointArg< PacketInfo > Packet
Packet probe point.
Definition: mem.hh:109
gem5::o3::DynInst::removeInLSQ
void removeInLSQ()
Sets this instruction as a entry the LSQ.
Definition: dyn_inst.hh:815
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::StaticInst::isHtmStop
bool isHtmStop() const
Definition: static_inst.hh:194
gem5::X86ISA::type
type
Definition: misc.hh:727
gem5::o3::DynInst::isSquashedInROB
bool isSquashedInROB() const
Returns whether or not this instruction is squashed in the ROB.
Definition: dyn_inst.hh:842
gem5::o3::DynInst::isResultReady
bool isResultReady() const
Returns whether or not the result is ready.
Definition: dyn_inst.hh:740
gem5::o3::DynInst::requestorId
RequestorID requestorId() const
Read this CPU's data requestor ID.
Definition: dyn_inst.hh:495
cpu.hh
gem5::o3::DynInst::setInLSQ
void setInLSQ()
Sets this instruction as a entry the LSQ.
Definition: dyn_inst.hh:812
gem5::RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:92
gem5::o3::DynInst::armMonitor
void armMonitor(Addr address) override
Definition: dyn_inst.hh:960
gem5::o3::DynInst::isLastMicroop
bool isLastMicroop() const
Definition: dyn_inst.hh:580
gem5::o3::DynInst::SerializeAfter
@ SerializeAfter
Needs to serialize on instructions ahead of it.
Definition: dyn_inst.hh:169
gem5::o3::DynInst::lastWakeDependents
Tick lastWakeDependents
Definition: dyn_inst.hh:1002
gem5::RefCounted::count
int count
Definition: refcnt.hh:67
gem5::o3::DynInst::contextId
ContextID contextId() const
Read this context's system-wide ID.
Definition: dyn_inst.hh:498
gem5::o3::DynInst::isUnverifiable
bool isUnverifiable() const
Definition: dyn_inst.hh:575
gem5::o3::DynInst::staticInst
const StaticInstPtr staticInst
The StaticInst used by this BaseDynInst.
Definition: dyn_inst.hh:127
gem5::o3::DynInst::setCommitted
void setCommitted()
Sets this instruction as committed.
Definition: dyn_inst.hh:780
gem5::o3::DynInst::IsStrictlyOrdered
@ IsStrictlyOrdered
Definition: dyn_inst.hh:186
gem5::o3::CPU::getWritableReg
void * getWritableReg(PhysRegIdPtr phys_reg)
Definition: cpu.cc:1092
gem5::StaticInst::isLoad
bool isLoad() const
Definition: static_inst.hh:147
gem5::StaticInst::isStore
bool isStore() const
Definition: static_inst.hh:148
gem5::o3::DynInst::MaxFlags
@ MaxFlags
Definition: dyn_inst.hh:190
gem5::o3::DynInst::isSquashAfter
bool isSquashAfter() const
Definition: dyn_inst.hh:569
gem5::o3::DynInst::hitExternalSnoop
void hitExternalSnoop(bool f)
Definition: dyn_inst.hh:442
gem5::o3::DynInst::isFullMemBarrier
bool isFullMemBarrier() const
Definition: dyn_inst.hh:570
gem5::ArmISA::VecRegContainer
gem5::VecRegContainer< NumVecElemPerVecReg *sizeof(VecElem)> VecRegContainer
Definition: vec.hh:62
gem5::bits
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:76
gem5::o3::DynInst::readyRegs
uint8_t readyRegs
How many source registers are ready.
Definition: dyn_inst.hh:330
flags
uint8_t flags
Definition: helpers.cc:66
static_inst.hh
gem5::o3::DynInst::setPredTaken
void setPredTaken(bool predicted_taken)
Definition: dyn_inst.hh:522
gem5::o3::DynInst::isInteger
bool isInteger() const
Definition: dyn_inst.hh:548
gem5::o3::DynInst::writeMem
Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable) override
Definition: dyn_inst.cc:423
gem5::StaticInst::isDirectCtrl
bool isDirectCtrl() const
Definition: static_inst.hh:163
gem5::StaticInst::isVector
bool isVector() const
Definition: static_inst.hh:158
gem5::o3::DynInst::RobEntry
@ RobEntry
Instruction is in the IQ.
Definition: dyn_inst.hh:147
gem5::o3::DynInst::isMacroop
bool isMacroop() const
Definition: dyn_inst.hh:577
gem5::o3::LSQUnit::LQIterator
CircularQueue< LQEntry >::iterator LQIterator
Definition: lsq_unit.hh:565
gem5::o3::DynInst::ResultReady
@ ResultReady
Instruction has completed.
Definition: dyn_inst.hh:150
gem5::o3::DynInst::PinnedRegsWritten
@ PinnedRegsWritten
Pinned registers are renamed.
Definition: dyn_inst.hh:162
gem5::o3::DynInst::translationCompleted
bool translationCompleted() const
True if the DTB address translation has completed.
Definition: dyn_inst.hh:415
gem5::o3::DynInst::clearCanIssue
void clearCanIssue()
Clears this instruction being able to issue.
Definition: dyn_inst.hh:749
gem5::o3::DynInst::Arrays::readySrcIdx
uint8_t * readySrcIdx
Definition: dyn_inst.hh:95
gem5::o3::DynInst::readPredicate
bool readPredicate() const override
Definition: dyn_inst.hh:893
gem5::ArmISA::si
Bitfield< 6 > si
Definition: misc_types.hh:825
gem5::o3::DynInst::setRegOperand
void setRegOperand(const StaticInst *si, int idx, RegVal val) override
Definition: dyn_inst.hh:1160
gem5::o3::DynInst::isFirstMicroop
bool isFirstMicroop() const
Definition: dyn_inst.hh:581
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::o3::DynInst::isHtmStop
bool isHtmStop() const
Definition: dyn_inst.hh:584
dyn_inst_ptr.hh
gem5::o3::DynInst::DynInst
DynInst(const StaticInstPtr &staticInst, const StaticInstPtr &macroop, InstSeqNum seq_num, CPU *cpu)
gem5::o3::DynInst::isCall
bool isCall() const
Definition: dyn_inst.hh:552
gem5::o3::DynInst::isAtCommit
bool isAtCommit()
Definition: dyn_inst.hh:777
gem5::o3::DynInst::setSerializeBefore
void setSerializeBefore()
Temporarily sets this instruction as a serialize before instruction.
Definition: dyn_inst.hh:640
gem5::o3::DynInst::_destMiscRegVal
std::vector< RegVal > _destMiscRegVal
Values to be written to the destination misc.
Definition: dyn_inst.hh:210
gem5::o3::DynInst::opClass
OpClass opClass() const
Returns the opclass of this instruction.
Definition: dyn_inst.hh:668
gem5::StaticInst::isLastMicroop
bool isLastMicroop() const
Definition: static_inst.hh:188
gem5::o3::DynInst::isSquashedInLSQ
bool isSquashedInLSQ() const
Returns whether or not this instruction is squashed in the LSQ.
Definition: dyn_inst.hh:824
gem5::o3::DynInst::setSerializeHandled
void setSerializeHandled()
Sets the serialization part of this instruction as handled.
Definition: dyn_inst.hh:658
gem5::o3::LSQUnit::SQIterator
CircularQueue< SQEntry >::iterator SQIterator
Definition: lsq_unit.hh:566
gem5::o3::DynInst::isLoad
bool isLoad() const
Definition: dyn_inst.hh:541
gem5::StaticInst::isMemRef
bool isMemRef() const
Definition: static_inst.hh:143
gem5::o3::DynInst::completeAcc
Fault completeAcc(PacketPtr pkt)
Completes the access.
Definition: dyn_inst.cc:373
gem5::PowerISA::so
Bitfield< 28 > so
Definition: misc.hh:54
gem5::o3::DynInst::mispredicted
bool mispredicted()
Returns whether the instruction mispredicted.
Definition: dyn_inst.hh:529
gem5::o3::DynInst::Executed
@ Executed
Instruction has issued.
Definition: dyn_inst.hh:153
gem5::o3::DynInst::setSquashed
void setSquashed()
Sets this instruction as squashed.
Definition: dyn_inst.cc:314
gem5::o3::DynInst::isSerializing
bool isSerializing() const
Definition: dyn_inst.hh:558
gem5::o3::DynInst::mwait
bool mwait(PacketPtr pkt) override
Definition: dyn_inst.hh:965
gem5::o3::DynInst::inHtmTransactionalState
bool inHtmTransactionalState() const override
Definition: dyn_inst.hh:603
gem5::o3::DynInst::NumStatus
@ NumStatus
Serialization has been handled.
Definition: dyn_inst.hh:171
gem5::ThreadState::contextId
ContextID contextId() const
Definition: thread_state.hh:63
gem5::o3::DynInst::_srcIdx
PhysRegIdPtr * _srcIdx
Definition: dyn_inst.hh:234
gem5::o3::DynInst::initiateMemMgmtCmd
Fault initiateMemMgmtCmd(Request::Flags flags) override
Initiate a memory management command with no valid address.
Definition: dyn_inst.cc:413
gem5::X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:92
gem5::o3::DynInst::Issued
@ Issued
Instruction can issue and execute.
Definition: dyn_inst.hh:152
gem5::o3::ThreadState::noSquashFromTC
bool noSquashFromTC
Definition: thread_state.hh:84
gem5::o3::DynInst::clearSerializeAfter
void clearSerializeAfter()
Clears the serializeAfter part of this instruction.
Definition: dyn_inst.hh:652
gem5::o3::DynInst::isPinnedRegsSquashDone
bool isPinnedRegsSquashDone() const
Return whether dest registers' pinning status updated after squash.
Definition: dyn_inst.hh:870
gem5::IntRegClass
@ IntRegClass
Integer register.
Definition: reg_class.hh:58
gem5::StaticInst::isReadBarrier
bool isReadBarrier() const
Definition: static_inst.hh:179
gem5::o3::ThreadState
Class that has various thread state, such as the status, the current instruction being processed,...
Definition: thread_state.hh:66
gem5::o3::DynInst::getRegOperand
void getRegOperand(const StaticInst *si, int idx, void *val) override
Definition: dyn_inst.hh:1142
gem5::o3::DynInst::initiateMemAMO
Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
Definition: dyn_inst.cc:435
gem5::RefCounted
Derive from RefCounted if you want to enable reference counting of this class.
Definition: refcnt.hh:60
gem5::o3::DynInst::isTempSerializeBefore
bool isTempSerializeBefore()
Checks if this serializeBefore is only temporarily set.
Definition: dyn_inst.hh:646
gem5::o3::DynInst::strictlyOrdered
bool strictlyOrdered() const
Is this instruction's memory access strictly ordered?
Definition: dyn_inst.hh:928
gem5::o3::DynInst::isReturn
bool isReturn() const
Definition: dyn_inst.hh:553
gem5::o3::DynInst::resultSize
uint8_t resultSize()
Return the size of the instResult queue.
Definition: dyn_inst.hh:696
gem5::o3::DynInst::getFault
Fault & getFault()
TODO: This I added for the LSQRequest side to be able to modify the fault.
Definition: dyn_inst.hh:504
state
atomic_var_t state
Definition: helpers.cc:188
gem5::o3::DynInst::setResult
void setResult(T &&t)
Pushes a result onto the instResult queue.
Definition: dyn_inst.hh:716
gem5::o3::DynInst::isNonSpeculative
bool isNonSpeculative() const
Definition: dyn_inst.hh:573
gem5::StaticInst::isInstPrefetch
bool isInstPrefetch() const
Definition: static_inst.hh:151
gem5::o3::DynInst::flattenedDestIdx
void flattenedDestIdx(int idx, const RegId &reg_id)
Definition: dyn_inst.hh:254
gem5::o3::DynInst::clearInIQ
void clearInIQ()
Sets this instruction as a entry the IQ.
Definition: dyn_inst.hh:797
gem5::o3::DynInst::HitExternalSnoop
@ HitExternalSnoop
Definition: dyn_inst.hh:180
gem5::o3::DynInst::getHtmTransactionalDepth
uint64_t getHtmTransactionalDepth() const override
Definition: dyn_inst.hh:609
gem5::o3::DynInst::getWritableRegOperand
void * getWritableRegOperand(const StaticInst *si, int idx) override
Definition: dyn_inst.hh:1151
gem5::o3::DynInst::clearSerializeBefore
void clearSerializeBefore()
Clears the serializeBefore part of this instruction.
Definition: dyn_inst.hh:643
gem5::o3::DynInst::setPredTarg
void setPredTarg(const PCStateBase &pred_pc)
Set the predicted target of this current instruction.
Definition: dyn_inst.hh:514
gem5::o3::DynInst::SquashedInROB
@ SquashedInROB
Instruction is squashed in the LSQ.
Definition: dyn_inst.hh:160
gem5::o3::DynInst::translationCompleted
void translationCompleted(bool f)
Definition: dyn_inst.hh:419
gem5::RegClassType
RegClassType
Enumerate the classes of registers.
Definition: reg_class.hh:56
gem5::o3::DynInst::Flags
Flags
Definition: dyn_inst.hh:174
gem5::o3::DynInst::CanCommit
@ CanCommit
Instruction has executed.
Definition: dyn_inst.hh:154
gem5::o3::DynInst::readMiscRegOperand
RegVal readMiscRegOperand(const StaticInst *si, int idx) override
Reads a misc.
Definition: dyn_inst.hh:1038
gem5::MiscRegClass
@ MiscRegClass
Control (misc) register.
Definition: reg_class.hh:66
gem5::o3::DynInst::readySrcIdx
void readySrcIdx(int idx, bool ready)
Definition: dyn_inst.hh:310
gem5::o3::DynInst::SerializeBefore
@ SerializeBefore
Is a thread synchronization instruction.
Definition: dyn_inst.hh:167
gem5::o3::DynInst::AtCommit
@ AtCommit
Instruction can commit.
Definition: dyn_inst.hh:155
gem5::o3::DynInst::clearHtmTransactionalState
void clearHtmTransactionalState()
Definition: dyn_inst.hh:626
gem5::o3::DynInst::mwaitAtomic
void mwaitAtomic(gem5::ThreadContext *tc) override
Definition: dyn_inst.hh:970
gem5::o3::DynInst::isDataPrefetch
bool isDataPrefetch() const
Definition: dyn_inst.hh:547
gem5::o3::DynInst::getFault
Fault getFault() const
Returns the fault type.
Definition: dyn_inst.hh:501
gem5::o3::DynInst::MemOpDone
@ MemOpDone
Definition: dyn_inst.hh:188
gem5::o3::DynInst::setSquashedInLSQ
void setSquashedInLSQ()
Sets this instruction as squashed in the LSQ.
Definition: dyn_inst.hh:821
gem5::StaticInst::isMacroop
bool isMacroop() const
Definition: static_inst.hh:185
gem5::o3::DynInst::isCondCtrl
bool isCondCtrl() const
Definition: dyn_inst.hh:556
gem5::StaticInst::isSquashAfter
bool isSquashAfter() const
Definition: static_inst.hh:173
gem5::ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:239
gem5::o3::DynInst::numDestRegs
size_t numDestRegs(RegClassType type) const
Definition: dyn_inst.hh:684
gem5::o3::DynInst::isStore
bool isStore() const
Definition: dyn_inst.hh:542
exec_context.hh
gem5::o3::DynInst::clearIssued
void clearIssued()
Clears this instruction as being issued.
Definition: dyn_inst.hh:758
gem5::o3::DynInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Returns the logical register index of the i'th source register.
Definition: dyn_inst.hh:693
gem5::StaticInst::numDestRegs
uint8_t numDestRegs() const
Number of destination registers.
Definition: static_inst.hh:125
reg_class.hh
gem5::o3::DynInst::traceData
Trace::InstRecord * traceData
InstRecord that tracks this instructions.
Definition: dyn_inst.hh:141
gem5::StaticInst::isSerializing
bool isSerializing() const
Definition: static_inst.hh:168
lsq_unit.hh
gem5::o3::CPU::readMiscReg
RegVal readMiscReg(int misc_reg, ThreadID tid)
Reads a misc.
Definition: cpu.cc:1020
gem5::StaticInst::isInteger
bool isInteger() const
Definition: static_inst.hh:156
gem5::o3::DynInst::setPinnedRegsRenamed
void setPinnedRegsRenamed()
Sets the destination registers as renamed.
Definition: dyn_inst.hh:849
gem5::o3::DynInst::initiateMemRead
Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable) override
Definition: dyn_inst.cc:402
gem5::ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:73
gem5::StaticInst::isCall
bool isCall() const
Definition: static_inst.hh:161
gem5::InstSeqNum
uint64_t InstSeqNum
Definition: inst_seq.hh:40
gem5::o3::DynInst::setIssued
void setIssued()
Sets this instruction as issued from the IQ.
Definition: dyn_inst.hh:752
gem5::StaticInst::branchTarget
virtual std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &pc) const
Return the target address for a PC-relative branch.
Definition: static_inst.cc:46
gem5::PhysRegId
Physical register ID.
Definition: reg_class.hh:245
gem5::o3::DynInst::NotAnInst
@ NotAnInst
Definition: dyn_inst.hh:176
gem5::o3::DynInst::memOpDone
bool memOpDone() const
Whether or not the memory operation is done.
Definition: dyn_inst.hh:378
gem5::o3::DynInst::isWriteBarrier
bool isWriteBarrier() const
Definition: dyn_inst.hh:572
gem5::o3::DynInst::isExecuted
bool isExecuted() const
Returns whether or not this instruction has executed.
Definition: dyn_inst.hh:764
gem5::o3::DynInst::clearCanCommit
void clearCanCommit()
Clears this instruction as being ready to commit.
Definition: dyn_inst.hh:770
gem5::o3::DynInst::isPinnedRegsWritten
bool isPinnedRegsWritten() const
Returns whether destination registers are written.
Definition: dyn_inst.hh:857
gem5::o3::DynInst::PossibleLoadViolation
@ PossibleLoadViolation
Definition: dyn_inst.hh:179
gem5::o3::DynInst::macroop
const StaticInstPtr macroop
The Macroop if one exists.
Definition: dyn_inst.hh:327
gem5::o3::DynInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: dyn_inst.hh:555
gem5::RequestorID
uint16_t RequestorID
Definition: request.hh:95
gem5::o3::DynInst::effAddr
Addr effAddr
The effective virtual address (lds & stores only).
Definition: dyn_inst.hh:335
trace.hh
gem5::StaticInst::isFullMemBarrier
bool isFullMemBarrier() const
Definition: static_inst.hh:175
gem5::StaticInst::isUncondCtrl
bool isUncondCtrl() const
Definition: static_inst.hh:166
gem5::o3::DynInst::isHtmCancel
bool isHtmCancel() const
Definition: dyn_inst.hh:585
gem5::o3::DynInst::effAddrValid
void effAddrValid(bool b)
Definition: dyn_inst.hh:375
gem5::Trace::InstRecord
Definition: insttracer.hh:61
gem5::o3::DynInst::isReadBarrier
bool isReadBarrier() const
Definition: dyn_inst.hh:571
gem5::VecRegClass
@ VecRegClass
Vector Register.
Definition: reg_class.hh:61
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::PCStateBase
Definition: pcstate.hh:57
gem5::StaticInst::isSyscall
bool isSyscall() const
Definition: static_inst.hh:184
gem5::o3::DynInst::htmDepth
uint64_t htmDepth
Definition: dyn_inst.hh:983
gem5::o3::DynInst::readStCondFailures
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: dyn_inst.hh:945
gem5::StaticInst::isStoreConditional
bool isStoreConditional() const
Definition: static_inst.hh:150
gem5::o3::DynInst::isDelayedCommit
bool isDelayedCommit() const
Definition: dyn_inst.hh:579
gem5::RegIndex
uint16_t RegIndex
Definition: types.hh:176
cpu.hh
std::list
STL list class.
Definition: stl.hh:51
gem5::o3::DynInst::renamedDestIdx
PhysRegIdPtr renamedDestIdx(int idx) const
Definition: dyn_inst.hh:262
gem5::o3::DynInst::SquashedInIQ
@ SquashedInIQ
Instruction is squashed.
Definition: dyn_inst.hh:158
gem5::o3::DynInst::setMemAccPredicate
void setMemAccPredicate(bool val) override
Definition: dyn_inst.hh:912
gem5::o3::DynInst::forwardOldRegs
void forwardOldRegs()
Definition: dyn_inst.hh:1075
gem5::AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:242
gem5::o3::DynInst::fault
Fault fault
The kind of fault this instruction has generated.
Definition: dyn_inst.hh:138
gem5::o3::DynInst::firstIssue
Tick firstIssue
Definition: dyn_inst.hh:1001
gem5::o3::DynInst::renamedSrcIdx
PhysRegIdPtr renamedSrcIdx(int idx) const
Definition: dyn_inst.hh:291
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::RegId::classValue
constexpr RegClassType classValue() const
Class accessor.
Definition: reg_class.hh:191
gem5::o3::DynInst::demapPage
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: dyn_inst.hh:392
gem5::o3::DynInst::strictlyOrdered
void strictlyOrdered(bool so)
Definition: dyn_inst.hh:929
gem5::o3::DynInst::isVector
bool isVector() const
Definition: dyn_inst.hh:550
gem5::o3::DynInst::CanIssue
@ CanIssue
Instruction has its result.
Definition: dyn_inst.hh:151
gem5::o3::DynInst::isHtmCmd
bool isHtmCmd() const
Definition: dyn_inst.hh:586
gem5::o3::DynInst::Arrays::numDests
size_t numDests
Definition: dyn_inst.hh:89
gem5::o3::DynInst::_numSrcs
size_t _numSrcs
Definition: dyn_inst.hh:218
gem5::o3::DynInst::isUncondCtrl
bool isUncondCtrl() const
Definition: dyn_inst.hh:557
gem5::o3::DynInst::LsqEntry
@ LsqEntry
Instruction is in the ROB.
Definition: dyn_inst.hh:148
gem5::o3::DynInst::_flatDestIdx
RegId * _flatDestIdx
Definition: dyn_inst.hh:223
gem5::o3::DynInst::setSquashedInROB
void setSquashedInROB()
Sets this instruction as squashed in the ROB.
Definition: dyn_inst.hh:839
gem5::o3::DynInst::numDests
size_t numDests() const
Definition: dyn_inst.hh:241
gem5::o3::DynInst::_destIdx
PhysRegIdPtr * _destIdx
Definition: dyn_inst.hh:227
gem5::o3::DynInst::effAddrValid
bool effAddrValid() const
Is the effective virtual address valid.
Definition: dyn_inst.hh:374
gem5::o3::DynInst::reqToVerify
RequestPtr reqToVerify
Definition: dyn_inst.hh:367
gem5::o3::DynInst::lqIdx
ssize_t lqIdx
Load queue index.
Definition: dyn_inst.hh:350
gem5::o3::DynInst::isSquashed
bool isSquashed() const
Returns whether or not this instruction is squashed.
Definition: dyn_inst.hh:789
gem5::InstResult
Definition: inst_res.hh:50
gem5::o3::DynInst::memOpDone
void memOpDone(bool f)
Definition: dyn_inst.hh:379
gem5::o3::DynInst::PredTaken
@ PredTaken
Definition: dyn_inst.hh:185
gem5::o3::DynInst::setStCondFailures
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: dyn_inst.hh:952
gem5::o3::DynInst::Status
Status
Definition: dyn_inst.hh:144
gem5::o3::DynInst::BlockingInst
@ BlockingInst
Is a recover instruction.
Definition: dyn_inst.hh:165
gem5::o3::DynInst::isHtmStart
bool isHtmStart() const
Definition: dyn_inst.hh:583
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235
gem5::o3::DynInst::isAtomic
bool isAtomic() const
Definition: dyn_inst.hh:543
gem5::o3::DynInst
Definition: dyn_inst.hh:76
gem5::o3::DynInst::setPredicate
void setPredicate(bool val) override
Definition: dyn_inst.hh:896
gem5::o3::DynInst::memData
uint8_t * memData
Pointer to the data for the memory access.
Definition: dyn_inst.hh:347
gem5::o3::DynInst::hitExternalSnoop
bool hitExternalSnoop() const
True if the address hit a external snoop while sitting in the LSQ.
Definition: dyn_inst.hh:441
gem5::RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:126
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:178
gem5::o3::DynInst::isSerializeAfter
bool isSerializeAfter() const
Definition: dyn_inst.hh:565
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::o3::DynInst::isSerializeBefore
bool isSerializeBefore() const
Definition: dyn_inst.hh:560
gem5::o3::DynInst::setInROB
void setInROB()
Sets this instruction as a entry the ROB.
Definition: dyn_inst.hh:830

Generated on Thu Jul 28 2022 13:32:28 for gem5 by doxygen 1.8.17