gem5  v21.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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 <algorithm>
47 #include <array>
48 #include <bitset>
49 #include <deque>
50 #include <list>
51 #include <string>
52 
53 #include "arch/generic/tlb.hh"
54 #include "arch/utility.hh"
55 #include "base/trace.hh"
56 #include "config/the_isa.hh"
57 #include "cpu/checker/cpu.hh"
58 #include "cpu/exec_context.hh"
59 #include "cpu/exetrace.hh"
60 #include "cpu/inst_res.hh"
61 #include "cpu/inst_seq.hh"
62 #include "cpu/op_class.hh"
63 #include "cpu/static_inst.hh"
64 #include "cpu/translation.hh"
65 #include "debug/HtmCpu.hh"
66 #include "mem/packet.hh"
67 #include "mem/request.hh"
68 #include "sim/byteswap.hh"
69 #include "sim/system.hh"
70 
76 template <class Impl>
77 class BaseDynInst : public ExecContext, public RefCounted
78 {
79  public:
80  // Typedef for the CPU.
81  typedef typename Impl::CPUType ImplCPU;
82  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  protected:
96  enum Status {
123  };
124 
125  enum Flags {
141  };
142 
143  public:
146 
149 
152 
153  BaseCPU *getCpuPtr() { return cpu; }
154 
157 
160 
163 
164  protected:
168  std::queue<InstResult> instResult;
169 
172 
173  private:
174  /* An amalgamation of a lot of boolean values into one */
175  std::bitset<MaxFlags> instFlags;
176 
178  std::bitset<NumStatus> status;
179 
180  protected:
188  struct Regs
189  {
190  private:
191  size_t _numSrcs;
192  size_t _numDests;
193 
194  size_t srcsReady = 0;
195 
196  using BackingStorePtr = std::unique_ptr<uint8_t[]>;
197  using BufCursor = BackingStorePtr::pointer;
198 
200 
201  // Members should be ordered based on required alignment so that they
202  // can be allocated contiguously.
203 
204  // Flattened register index of the destination registers of this
205  // instruction.
207 
208  // Physical register index of the destination registers of this
209  // instruction.
211 
212  // Physical register index of the previous producers of the
213  // architected destinations.
215 
216  static inline size_t
217  bytesForDests(size_t num)
218  {
219  return (sizeof(RegId) + 2 * sizeof(PhysRegIdPtr)) * num;
220  }
221 
222  // Physical register index of the source registers of this instruction.
224 
225  // Whether or not the source register is ready, one bit per register.
226  uint8_t *_readySrcIdx;
227 
228  static inline size_t
229  bytesForSources(size_t num)
230  {
231  return sizeof(PhysRegIdPtr) * num +
232  sizeof(uint8_t) * ((num + 7) / 8);
233  }
234 
235  template <class T>
236  static inline void
237  allocate(T *&ptr, BufCursor &cur, size_t count)
238  {
239  ptr = new (cur) T[count];
240  cur += sizeof(T) * count;
241  }
242 
243  public:
244  size_t numSrcs() const { return _numSrcs; }
245  size_t numDests() const { return _numDests; }
246 
247  void
249  {
250  std::fill(_readySrcIdx, _readySrcIdx + (numSrcs() + 7) / 8, 0);
251  }
252 
253  Regs(size_t srcs, size_t dests) : _numSrcs(srcs), _numDests(dests),
254  buf(new uint8_t[bytesForSources(srcs) + bytesForDests(dests)])
255  {
256  BufCursor cur = buf.get();
257  allocate(_flatDestIdx, cur, dests);
258  allocate(_destIdx, cur, dests);
259  allocate(_prevDestIdx, cur, dests);
260  allocate(_srcIdx, cur, srcs);
261  allocate(_readySrcIdx, cur, (srcs + 7) / 8);
262 
263  init();
264  }
265 
266  // Returns the flattened register index of the idx'th destination
267  // register.
268  const RegId &
269  flattenedDestIdx(int idx) const
270  {
271  return _flatDestIdx[idx];
272  }
273 
274  // Flattens a destination architectural register index into a logical
275  // index.
276  void
277  flattenedDestIdx(int idx, const RegId &reg_id)
278  {
279  _flatDestIdx[idx] = reg_id;
280  }
281 
282  // Returns the physical register index of the idx'th destination
283  // register.
285  renamedDestIdx(int idx) const
286  {
287  return _destIdx[idx];
288  }
289 
290  // Set the renamed dest register id.
291  void
292  renamedDestIdx(int idx, PhysRegIdPtr phys_reg_id)
293  {
294  _destIdx[idx] = phys_reg_id;
295  }
296 
297  // Returns the physical register index of the previous physical
298  // register that remapped to the same logical register index.
300  prevDestIdx(int idx) const
301  {
302  return _prevDestIdx[idx];
303  }
304 
305  // Set the previous renamed dest register id.
306  void
307  prevDestIdx(int idx, PhysRegIdPtr phys_reg_id)
308  {
309  _prevDestIdx[idx] = phys_reg_id;
310  }
311 
312  // Returns the physical register index of the i'th source register.
314  renamedSrcIdx(int idx) const
315  {
316  return _srcIdx[idx];
317  }
318 
319  void
320  renamedSrcIdx(int idx, PhysRegIdPtr phys_reg_id)
321  {
322  _srcIdx[idx] = phys_reg_id;
323  }
324 
325  bool
326  readySrcIdx(int idx) const
327  {
328  uint8_t &byte = _readySrcIdx[idx / 8];
329  return bits(byte, idx % 8);
330  }
331 
332  void
333  readySrcIdx(int idx, bool ready)
334  {
335  uint8_t &byte = _readySrcIdx[idx / 8];
336  replaceBits(byte, idx % 8, ready ? 1 : 0);
337  }
338  };
339 
340  public:
342 
345 
348 
350 
352 
355 
357  uint8_t readyRegs;
358 
359  public:
361 
363 
366 
368  unsigned memReqFlags;
369 
371  unsigned effSize;
372 
374  uint8_t *memData;
375 
377  ssize_t lqIdx;
379 
381  ssize_t sqIdx;
383 
384 
386 
391 
393  // Need a copy of main request pointer to verify on writes.
395 
396  private:
397  // hardware transactional memory
398  uint64_t htmUid;
399  uint64_t htmDepth;
400 
401  public:
403  void recordResult(bool f) { instFlags[RecordResult] = f; }
404 
406  bool effAddrValid() const { return instFlags[EffAddrValid]; }
407  void effAddrValid(bool b) { instFlags[EffAddrValid] = b; }
408 
410  bool memOpDone() const { return instFlags[MemOpDone]; }
411  void memOpDone(bool f) { instFlags[MemOpDone] = f; }
412 
413  bool notAnInst() const { return instFlags[NotAnInst]; }
414  void setNotAnInst() { instFlags[NotAnInst] = true; }
415 
416 
418  //
419  // INSTRUCTION EXECUTION
420  //
422 
423  void
424  demapPage(Addr vaddr, uint64_t asn) override
425  {
426  cpu->demapPage(vaddr, asn);
427  }
428 
429  Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags,
430  const std::vector<bool> &byte_enable) override;
431 
432  Fault initiateHtmCmd(Request::Flags flags) override;
433 
434  Fault writeMem(uint8_t *data, unsigned size, Addr addr,
435  Request::Flags flags, uint64_t *res,
436  const std::vector<bool> &byte_enable) override;
437 
438  Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags,
439  AtomicOpFunctorPtr amo_op) override;
440 
444 
448 
454  bool
456  {
458  }
459  void
461  {
463  }
464 
469  bool hitExternalSnoop() const { return instFlags[HitExternalSnoop]; }
471 
476  bool
478  {
479  return (translationStarted() && !translationCompleted());
480  }
481 
482  public:
483 #ifdef DEBUG
484  void dumpSNList();
485 #endif
486 
490  void
491  renameDestReg(int idx, PhysRegIdPtr renamed_dest,
492  PhysRegIdPtr previous_rename)
493  {
494  regs.renamedDestIdx(idx, renamed_dest);
495  regs.prevDestIdx(idx, previous_rename);
496  if (renamed_dest->isPinned())
498  }
499 
504  void
505  renameSrcReg(int idx, PhysRegIdPtr renamed_src)
506  {
507  regs.renamedSrcIdx(idx, renamed_src);
508  }
509 
519  InstSeqNum seq_num, ImplCPU *cpu);
520 
525 
527  ~BaseDynInst();
528 
529  private:
531  void initVars();
532 
533  public:
535  void dump();
536 
538  void dump(std::string &outstring);
539 
541  int cpuId() const { return cpu->cpuId(); }
542 
544  uint32_t socketId() const { return cpu->socketId(); }
545 
547  RequestorID requestorId() const { return cpu->dataRequestorId(); }
548 
550  ContextID contextId() const { return thread->contextId(); }
551 
553  Fault getFault() const { return fault; }
556  Fault& getFault() { return fault; }
557 
563  bool doneTargCalc() { return false; }
564 
566  void setPredTarg(const TheISA::PCState &_predPC) { predPC = _predPC; }
567 
568  const TheISA::PCState &readPredTarg() { return predPC; }
569 
571  Addr predInstAddr() { return predPC.instAddr(); }
572 
574  Addr predNextInstAddr() { return predPC.nextInstAddr(); }
575 
577  Addr predMicroPC() { return predPC.microPC(); }
578 
580  bool readPredTaken() { return instFlags[PredTaken]; }
581 
582  void
583  setPredTaken(bool predicted_taken)
584  {
585  instFlags[PredTaken] = predicted_taken;
586  }
587 
589  bool
591  {
592  TheISA::PCState tempPC = pc;
593  TheISA::advancePC(tempPC, staticInst);
594  return !(tempPC == predPC);
595  }
596 
597  //
598  // Instruction types. Forward checks to StaticInst object.
599  //
600  bool isNop() const { return staticInst->isNop(); }
601  bool isMemRef() const { return staticInst->isMemRef(); }
602  bool isLoad() const { return staticInst->isLoad(); }
603  bool isStore() const { return staticInst->isStore(); }
604  bool isAtomic() const { return staticInst->isAtomic(); }
605  bool isStoreConditional() const
606  { return staticInst->isStoreConditional(); }
607  bool isInstPrefetch() const { return staticInst->isInstPrefetch(); }
608  bool isDataPrefetch() const { return staticInst->isDataPrefetch(); }
609  bool isInteger() const { return staticInst->isInteger(); }
610  bool isFloating() const { return staticInst->isFloating(); }
611  bool isVector() const { return staticInst->isVector(); }
612  bool isControl() const { return staticInst->isControl(); }
613  bool isCall() const { return staticInst->isCall(); }
614  bool isReturn() const { return staticInst->isReturn(); }
615  bool isDirectCtrl() const { return staticInst->isDirectCtrl(); }
616  bool isIndirectCtrl() const { return staticInst->isIndirectCtrl(); }
617  bool isCondCtrl() const { return staticInst->isCondCtrl(); }
618  bool isUncondCtrl() const { return staticInst->isUncondCtrl(); }
619  bool isSerializing() const { return staticInst->isSerializing(); }
620  bool
622  {
624  }
625  bool
627  {
629  }
630  bool isSquashAfter() const { return staticInst->isSquashAfter(); }
631  bool isFullMemBarrier() const { return staticInst->isFullMemBarrier(); }
632  bool isReadBarrier() const { return staticInst->isReadBarrier(); }
633  bool isWriteBarrier() const { return staticInst->isWriteBarrier(); }
634  bool isNonSpeculative() const { return staticInst->isNonSpeculative(); }
635  bool isQuiesce() const { return staticInst->isQuiesce(); }
636  bool isUnverifiable() const { return staticInst->isUnverifiable(); }
637  bool isSyscall() const { return staticInst->isSyscall(); }
638  bool isMacroop() const { return staticInst->isMacroop(); }
639  bool isMicroop() const { return staticInst->isMicroop(); }
640  bool isDelayedCommit() const { return staticInst->isDelayedCommit(); }
641  bool isLastMicroop() const { return staticInst->isLastMicroop(); }
642  bool isFirstMicroop() const { return staticInst->isFirstMicroop(); }
643  // hardware transactional memory
644  bool isHtmStart() const { return staticInst->isHtmStart(); }
645  bool isHtmStop() const { return staticInst->isHtmStop(); }
646  bool isHtmCancel() const { return staticInst->isHtmCancel(); }
647  bool isHtmCmd() const { return staticInst->isHtmCmd(); }
648 
649  uint64_t
650  getHtmTransactionUid() const override
651  {
652  assert(instFlags[HtmFromTransaction]);
653  return this->htmUid;
654  }
655 
656  uint64_t
657  newHtmTransactionUid() const override
658  {
659  panic("Not yet implemented\n");
660  return 0;
661  }
662 
663  bool
664  inHtmTransactionalState() const override
665  {
667  }
668 
669  uint64_t
670  getHtmTransactionalDepth() const override
671  {
673  return this->htmDepth;
674  else
675  return 0;
676  }
677 
678  void
679  setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
680  {
682  htmUid = htm_uid;
683  htmDepth = htm_depth;
684  }
685 
686  void
688  {
689  if (inHtmTransactionalState()) {
690  DPRINTF(HtmCpu,
691  "clearing instuction's transactional state htmUid=%u\n",
693 
695  htmUid = -1;
696  htmDepth = 0;
697  }
698  }
699 
702 
705 
708 
711 
714 
717 
720 
727 
729  OpClass opClass() const { return staticInst->opClass(); }
730 
733  { return staticInst->branchTarget(pc); }
734 
736  size_t numSrcRegs() const { return regs.numSrcs(); }
737 
739  size_t numDestRegs() const { return regs.numDests(); }
740 
741  // the following are used to track physical register usage
742  // for machines with separate int & FP reg files
743  int8_t numFPDestRegs() const { return staticInst->numFPDestRegs(); }
744  int8_t numIntDestRegs() const { return staticInst->numIntDestRegs(); }
745  int8_t numCCDestRegs() const { return staticInst->numCCDestRegs(); }
746  int8_t numVecDestRegs() const { return staticInst->numVecDestRegs(); }
747  int8_t
749  {
750  return staticInst->numVecElemDestRegs();
751  }
752  int8_t
754  {
755  return staticInst->numVecPredDestRegs();
756  }
757 
759  const RegId& destRegIdx(int i) const { return staticInst->destRegIdx(i); }
760 
762  const RegId& srcRegIdx(int i) const { return staticInst->srcRegIdx(i); }
763 
765  uint8_t resultSize() { return instResult.size(); }
766 
770  InstResult
772  {
773  if (!instResult.empty()) {
774  InstResult t = instResult.front();
775  instResult.pop();
776  return t;
777  }
778  return dflt;
779  }
780 
784  template<typename T>
785  void
787  {
788  if (instFlags[RecordResult]) {
789  instResult.push(InstResult(std::forward<T>(t),
791  }
792  }
793 
795  template<typename T>
796  void
798  {
799  if (instFlags[RecordResult]) {
800  instResult.push(InstResult(std::forward<T>(t),
802  }
803  }
804 
806  template<typename T>
807  void
809  {
810  if (instFlags[RecordResult]) {
811  instResult.push(InstResult(std::forward<T>(t),
813  }
814  }
815 
817  template<typename T>
818  void
820  {
821  if (instFlags[RecordResult]) {
822  instResult.push(InstResult(std::forward<T>(t),
824  }
825  }
829  void
830  setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
831  {
833  }
834 
836  void
837  setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
838  {
840  }
841 
843  void
844  setVecRegOperand(const StaticInst *si, int idx,
845  const TheISA::VecRegContainer &val) override
846  {
847  setVecResult(val);
848  }
849 
851  void
852  setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
853  {
855  }
856 
858  void
859  setVecElemOperand(const StaticInst *si, int idx,
860  const TheISA::VecElem val) override
861  {
863  }
864 
866  void
868  const TheISA::VecPredRegContainer &val) override
869  {
871  }
872 
874  void markSrcRegReady();
875 
877  void markSrcRegReady(RegIndex src_idx);
878 
880  void setCompleted() { status.set(Completed); }
881 
883  bool isCompleted() const { return status[Completed]; }
884 
887 
889  bool isResultReady() const { return status[ResultReady]; }
890 
892  void setCanIssue() { status.set(CanIssue); }
893 
895  bool readyToIssue() const { return status[CanIssue]; }
896 
898  void clearCanIssue() { status.reset(CanIssue); }
899 
901  void setIssued() { status.set(Issued); }
902 
904  bool isIssued() const { return status[Issued]; }
905 
907  void clearIssued() { status.reset(Issued); }
908 
910  void setExecuted() { status.set(Executed); }
911 
913  bool isExecuted() const { return status[Executed]; }
914 
916  void setCanCommit() { status.set(CanCommit); }
917 
919  void clearCanCommit() { status.reset(CanCommit); }
920 
922  bool readyToCommit() const { return status[CanCommit]; }
923 
924  void setAtCommit() { status.set(AtCommit); }
925 
926  bool isAtCommit() { return status[AtCommit]; }
927 
929  void setCommitted() { status.set(Committed); }
930 
932  bool isCommitted() const { return status[Committed]; }
933 
935  void setSquashed();
936 
938  bool isSquashed() const { return status[Squashed]; }
939 
940  //Instruction Queue Entry
941  //-----------------------
943  void setInIQ() { status.set(IqEntry); }
944 
946  void clearInIQ() { status.reset(IqEntry); }
947 
949  bool isInIQ() const { return status[IqEntry]; }
950 
953 
955  bool isSquashedInIQ() const { return status[SquashedInIQ]; }
956 
957 
958  //Load / Store Queue Functions
959  //-----------------------
961  void setInLSQ() { status.set(LsqEntry); }
962 
964  void removeInLSQ() { status.reset(LsqEntry); }
965 
967  bool isInLSQ() const { return status[LsqEntry]; }
968 
971 
973  bool isSquashedInLSQ() const { return status[SquashedInLSQ]; }
974 
975 
976  //Reorder Buffer Functions
977  //-----------------------
979  void setInROB() { status.set(RobEntry); }
980 
982  void clearInROB() { status.reset(RobEntry); }
983 
985  bool isInROB() const { return status[RobEntry]; }
986 
989 
991  bool isSquashedInROB() const { return status[SquashedInROB]; }
992 
994  bool isPinnedRegsRenamed() const { return status[PinnedRegsRenamed]; }
995 
997  void
999  {
1000  assert(!status[PinnedRegsSquashDone]);
1001  assert(!status[PinnedRegsWritten]);
1003  }
1004 
1007 
1009  void
1011  {
1012  assert(!status[PinnedRegsSquashDone]);
1013  assert(status[PinnedRegsRenamed]);
1015  }
1016 
1018  bool
1020 
1022  void
1024  assert(!status[PinnedRegsSquashDone]);
1026  }
1027 
1029  TheISA::PCState pcState() const override { return pc; }
1030 
1032  void pcState(const TheISA::PCState &val) override { pc = val; }
1033 
1035  Addr instAddr() const { return pc.instAddr(); }
1036 
1038  Addr nextInstAddr() const { return pc.nextInstAddr(); }
1039 
1041  Addr microPC() const { return pc.microPC(); }
1042 
1043  bool readPredicate() const override { return instFlags[Predicate]; }
1044 
1045  void
1046  setPredicate(bool val) override
1047  {
1048  instFlags[Predicate] = val;
1049 
1050  if (traceData) {
1052  }
1053  }
1054 
1055  bool
1056  readMemAccPredicate() const override
1057  {
1058  return instFlags[MemAccPredicate];
1059  }
1060 
1061  void
1062  setMemAccPredicate(bool val) override
1063  {
1065  }
1066 
1068  void setTid(ThreadID tid) { threadNumber = tid; }
1069 
1071  void setThreadState(ImplState *state) { thread = state; }
1072 
1074  ThreadContext *tcBase() const override { return thread->getTC(); }
1075 
1076  public:
1078  bool eaSrcsReady() const;
1079 
1081  bool strictlyOrdered() const { return instFlags[IsStrictlyOrdered]; }
1083 
1085  bool hasRequest() const { return instFlags[ReqMade]; }
1087  void setRequest() { instFlags[ReqMade] = true; }
1088 
1091 
1093  void setInstListIt(ListIt _instListIt) { instListIt = _instListIt; }
1094 
1095  public:
1097  unsigned int
1098  readStCondFailures() const override
1099  {
1100  return thread->storeCondFailures;
1101  }
1102 
1104  void
1105  setStCondFailures(unsigned int sc_failures) override
1106  {
1107  thread->storeCondFailures = sc_failures;
1108  }
1109 
1110  public:
1111  // monitor/mwait funtions
1112  void
1113  armMonitor(Addr address) override
1114  {
1115  cpu->armMonitor(threadNumber, address);
1116  }
1117  bool
1118  mwait(PacketPtr pkt) override
1119  {
1120  return cpu->mwait(threadNumber, pkt);
1121  }
1122  void
1124  {
1125  return cpu->mwaitAtomic(threadNumber, tc, cpu->mmu);
1126  }
1127  AddressMonitor *
1128  getAddrMonitor() override
1129  {
1130  return cpu->getCpuAddrMonitor(threadNumber);
1131  }
1132 };
1133 
1134 template<class Impl>
1135 Fault
1137  Request::Flags flags,
1138  const std::vector<bool> &byte_enable)
1139 {
1140  assert(byte_enable.size() == size);
1141  return cpu->pushRequest(
1142  dynamic_cast<typename DynInstPtr::PtrType>(this),
1143  /* ld */ true, nullptr, size, addr, flags, nullptr, nullptr,
1144  byte_enable);
1145 }
1146 
1147 template<class Impl>
1148 Fault
1150 {
1151  return cpu->pushRequest(
1152  dynamic_cast<typename DynInstPtr::PtrType>(this),
1153  /* ld */ true, nullptr, 8, 0x0ul, flags, nullptr, nullptr);
1154 }
1155 
1156 template<class Impl>
1157 Fault
1158 BaseDynInst<Impl>::writeMem(uint8_t *data, unsigned size, Addr addr,
1159  Request::Flags flags, uint64_t *res,
1160  const std::vector<bool> &byte_enable)
1161 {
1162  assert(byte_enable.size() == size);
1163  return cpu->pushRequest(
1164  dynamic_cast<typename DynInstPtr::PtrType>(this),
1165  /* st */ false, data, size, addr, flags, res, nullptr,
1166  byte_enable);
1167 }
1168 
1169 template<class Impl>
1170 Fault
1172  Request::Flags flags,
1173  AtomicOpFunctorPtr amo_op)
1174 {
1175  // atomic memory instructions do not have data to be written to memory yet
1176  // since the atomic operations will be executed directly in cache/memory.
1177  // Therefore, its `data` field is nullptr.
1178  // Atomic memory requests need to carry their `amo_op` fields to cache/
1179  // memory
1180  return cpu->pushRequest(
1181  dynamic_cast<typename DynInstPtr::PtrType>(this),
1182  /* atomic */ false, nullptr, size, addr, flags, nullptr,
1183  std::move(amo_op), std::vector<bool>(size, true));
1184 }
1185 
1186 #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:837
StaticInst::isSyscall
bool isSyscall() const
Definition: static_inst.hh:203
BaseDynInst::isSerializeAfter
bool isSerializeAfter() const
Definition: base_dyn_inst.hh:626
BaseDynInst::isHtmStop
bool isHtmStop() const
Definition: base_dyn_inst.hh:645
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:985
BaseDynInst::Regs::_srcIdx
PhysRegIdPtr * _srcIdx
Definition: base_dyn_inst.hh:223
BaseDynInst::isCondCtrl
bool isCondCtrl() const
Definition: base_dyn_inst.hh:617
BaseDynInst::predPC
TheISA::PCState predPC
Predicted PC state after this instruction.
Definition: base_dyn_inst.hh:351
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:1074
BaseDynInst::AtCommit
@ AtCommit
Instruction can commit.
Definition: base_dyn_inst.hh:106
StaticInst::numCCDestRegs
int8_t numCCDestRegs() const
Number of coprocesor destination regs.
Definition: static_inst.hh:150
BaseDynInst::Squashed
@ Squashed
Instruction has committed.
Definition: base_dyn_inst.hh:108
BaseDynInst::numIntDestRegs
int8_t numIntDestRegs() const
Definition: base_dyn_inst.hh:744
BaseDynInst::CanCommit
@ CanCommit
Instruction has executed.
Definition: base_dyn_inst.hh:105
BaseDynInst::IsStrictlyOrdered
@ IsStrictlyOrdered
Definition: base_dyn_inst.hh:136
BaseDynInst::isNop
bool isNop() const
Definition: base_dyn_inst.hh:600
BaseDynInst::SquashedInIQ
@ SquashedInIQ
Instruction is squashed.
Definition: base_dyn_inst.hh:109
BaseDynInst::BlockingInst
@ BlockingInst
Is a recover instruction.
Definition: base_dyn_inst.hh:116
StaticInst::isDirectCtrl
bool isDirectCtrl() const
Definition: static_inst.hh:182
BaseDynInst::translationStarted
void translationStarted(bool f)
Definition: base_dyn_inst.hh:443
BaseDynInst::seqNum
InstSeqNum seqNum
The sequence number of the instruction.
Definition: base_dyn_inst.hh:145
BaseDynInst::isQuiesce
bool isQuiesce() const
Definition: base_dyn_inst.hh:635
BaseDynInst::setStCondFailures
void setStCondFailures(unsigned int sc_failures) override
Sets the number of consecutive store conditional failures.
Definition: base_dyn_inst.hh:1105
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:390
BaseDynInst::setVecPredResult
void setVecPredResult(T &&t)
Predicate result.
Definition: base_dyn_inst.hh:819
BaseDynInst::isUnverifiable
bool isUnverifiable() const
Definition: base_dyn_inst.hh:636
BaseDynInst::hitExternalSnoop
void hitExternalSnoop(bool f)
Definition: base_dyn_inst.hh:470
BaseDynInst::Regs::_numDests
size_t _numDests
Definition: base_dyn_inst.hh:192
BaseDynInst::Regs::buf
BackingStorePtr buf
Definition: base_dyn_inst.hh:199
system.hh
BaseDynInst::ImplCPU
Impl::CPUType ImplCPU
Definition: base_dyn_inst.hh:81
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:234
BaseDynInst::Regs::renamedDestIdx
void renamedDestIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: base_dyn_inst.hh:292
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:491
data
const char data[]
Definition: circlebuf.test.cc:47
BaseDynInst::isSquashed
bool isSquashed() const
Returns whether or not this instruction is squashed.
Definition: base_dyn_inst.hh:938
StaticInst::isMemRef
bool isMemRef() const
Definition: static_inst.hh:162
ArmISA::VecRegContainer
VecReg::Container VecRegContainer
Definition: registers.hh:63
BaseDynInst::HtmFromTransaction
@ HtmFromTransaction
Definition: base_dyn_inst.hh:139
BaseDynInst::thread
ImplState * thread
Pointer to the thread state.
Definition: base_dyn_inst.hh:156
BaseDynInst::EffAddrValid
@ EffAddrValid
Definition: base_dyn_inst.hh:131
BaseDynInst::getFault
Fault & getFault()
TODO: This I added for the LSQRequest side to be able to modify the fault.
Definition: base_dyn_inst.hh:556
BaseDynInst::clearSerializeBefore
void clearSerializeBefore()
Clears the serializeBefore part of this instruction.
Definition: base_dyn_inst.hh:704
BaseDynInst::clearIssued
void clearIssued()
Clears this instruction as being issued.
Definition: base_dyn_inst.hh:907
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:910
StaticInst::isSerializing
bool isSerializing() const
Definition: static_inst.hh:187
ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:233
BaseDynInst::fault
Fault fault
The kind of fault this instruction has generated.
Definition: base_dyn_inst.hh:159
BaseDynInst::memData
uint8_t * memData
Pointer to the data for the memory access.
Definition: base_dyn_inst.hh:374
BaseDynInst::readyToCommit
bool readyToCommit() const
Returns whether or not this instruction is ready to commit.
Definition: base_dyn_inst.hh:922
BaseDynInst::initiateMemRead
Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, const std::vector< bool > &byte_enable) override
Definition: base_dyn_inst.hh:1136
BaseDynInst::Regs::flattenedDestIdx
const RegId & flattenedDestIdx(int idx) const
Definition: base_dyn_inst.hh:269
InstResult::ResultType::VecElem
@ VecElem
BaseDynInst::Regs::_readySrcIdx
uint8_t * _readySrcIdx
Definition: base_dyn_inst.hh:226
Flags
Wrapper that groups a few flag bits under the same undelying container.
Definition: flags.hh:41
BaseDynInst::MaxFlags
@ MaxFlags
Definition: base_dyn_inst.hh:140
BaseDynInst::nextInstAddr
Addr nextInstAddr() const
Read the PC of the next instruction.
Definition: base_dyn_inst.hh:1038
BaseDynInst::htmUid
uint64_t htmUid
Definition: base_dyn_inst.hh:398
BaseDynInst::numCCDestRegs
int8_t numCCDestRegs() const
Definition: base_dyn_inst.hh:745
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:1032
BaseDynInst::newHtmTransactionUid
uint64_t newHtmTransactionUid() const override
Definition: base_dyn_inst.hh:657
BaseDynInst::mwaitAtomic
void mwaitAtomic(ThreadContext *tc) override
Definition: base_dyn_inst.hh:1123
ArmISA::si
Bitfield< 6 > si
Definition: miscregs_types.hh:766
ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:237
BaseDynInst::ThreadsyncWait
@ ThreadsyncWait
Is a blocking instruction.
Definition: base_dyn_inst.hh:117
BaseDynInst::IqEntry
@ IqEntry
Definition: base_dyn_inst.hh:97
BaseDynInst::setSquashed
void setSquashed()
Sets this instruction as squashed.
Definition: base_dyn_inst_impl.hh:244
BaseDynInst::isInstPrefetch
bool isInstPrefetch() const
Definition: base_dyn_inst.hh:607
StaticInst::numIntDestRegs
int8_t numIntDestRegs() const
Number of integer destination regs.
Definition: static_inst.hh:142
tlb.hh
BaseDynInst::isInteger
bool isInteger() const
Definition: base_dyn_inst.hh:609
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:505
BaseDynInst::TranslationStarted
@ TranslationStarted
Definition: base_dyn_inst.hh:127
BaseDynInst::setPredTarg
void setPredTarg(const TheISA::PCState &_predPC)
Set the predicted target of this current instruction.
Definition: base_dyn_inst.hh:566
BaseDynInst::hitExternalSnoop
bool hitExternalSnoop() const
True if the address hit a external snoop while sitting in the LSQ.
Definition: base_dyn_inst.hh:469
BaseDynInst::setVecElemResult
void setVecElemResult(T &&t)
Vector element result.
Definition: base_dyn_inst.hh:808
BaseDynInst::isStore
bool isStore() const
Definition: base_dyn_inst.hh:603
BaseDynInst::readPredTaken
bool readPredTaken()
Returns whether the instruction was predicted taken or not.
Definition: base_dyn_inst.hh:580
BaseDynInst::hasRequest
bool hasRequest() const
Has this instruction generated a memory request.
Definition: base_dyn_inst.hh:1085
ArmISA::VecPredRegContainer
VecPredReg::Container VecPredRegContainer
Definition: registers.hh:69
BaseDynInst::isVector
bool isVector() const
Definition: base_dyn_inst.hh:611
BaseDynInst::readStCondFailures
unsigned int readStCondFailures() const override
Returns the number of consecutive store conditional failures.
Definition: base_dyn_inst.hh:1098
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:455
Trace::InstRecord
Definition: insttracer.hh:55
BaseDynInst::~BaseDynInst
~BaseDynInst()
BaseDynInst destructor.
Definition: base_dyn_inst_impl.hh:144
BaseDynInst::isLoad
bool isLoad() const
Definition: base_dyn_inst.hh:602
RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:86
BaseDynInst::HitExternalSnoop
@ HitExternalSnoop
Definition: base_dyn_inst.hh:130
BaseDynInst::isSquashedInIQ
bool isSquashedInIQ() const
Returns whether or not this instruction is squashed in the IQ.
Definition: base_dyn_inst.hh:955
BaseDynInst::isSyscall
bool isSyscall() const
Definition: base_dyn_inst.hh:637
BaseDynInst::regs
Regs regs
Definition: base_dyn_inst.hh:341
BaseDynInst::isReadBarrier
bool isReadBarrier() const
Definition: base_dyn_inst.hh:632
BaseDynInst::isHtmStart
bool isHtmStart() const
Definition: base_dyn_inst.hh:644
BaseDynInst::status
std::bitset< NumStatus > status
The status of this BaseDynInst.
Definition: base_dyn_inst.hh:178
BaseDynInst::reqToVerify
RequestPtr reqToVerify
Definition: base_dyn_inst.hh:394
std::vector< bool >
BaseDynInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: base_dyn_inst.hh:616
InstResult::ResultType::VecReg
@ VecReg
BaseDynInst::MemOpDone
@ MemOpDone
Definition: base_dyn_inst.hh:138
BaseDynInst::memReqFlags
unsigned memReqFlags
The memory request flags (from translation).
Definition: base_dyn_inst.hh:368
BaseDynInst::isAtCommit
bool isAtCommit()
Definition: base_dyn_inst.hh:926
BaseDynInst::traceData
Trace::InstRecord * traceData
InstRecord that tracks this instructions.
Definition: base_dyn_inst.hh:162
StaticInst::opClass
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
Definition: static_inst.hh:229
RefCounted::count
int count
Definition: refcnt.hh:64
StaticInst::isSerializeAfter
bool isSerializeAfter() const
Definition: static_inst.hh:191
BaseDynInst::readyRegs
uint8_t readyRegs
How many source registers are ready.
Definition: base_dyn_inst.hh:357
BaseDynInst::isPinnedRegsRenamed
bool isPinnedRegsRenamed() const
Returns whether pinned registers are renamed.
Definition: base_dyn_inst.hh:994
BaseDynInst::RobEntry
@ RobEntry
Instruction is in the IQ.
Definition: base_dyn_inst.hh:98
BaseDynInst::isSerializeBefore
bool isSerializeBefore() const
Definition: base_dyn_inst.hh:621
StaticInst::isFullMemBarrier
bool isFullMemBarrier() const
Definition: static_inst.hh:194
BaseDynInst::setAtCommit
void setAtCommit()
Definition: base_dyn_inst.hh:924
BaseDynInst::Regs::numSrcs
size_t numSrcs() const
Definition: base_dyn_inst.hh:244
inst_res.hh
BaseDynInst::ListIt
std::list< DynInstPtr >::iterator ListIt
Definition: base_dyn_inst.hh:93
BaseDynInst::RecordResult
@ RecordResult
Definition: base_dyn_inst.hh:132
BaseDynInst::Regs::_numSrcs
size_t _numSrcs
Definition: base_dyn_inst.hh:191
request.hh
ArmISA::advancePC
void advancePC(PCState &pc, const StaticInstPtr &inst)
Definition: utility.hh:392
BaseDynInst::clearSerializeAfter
void clearSerializeAfter()
Clears the serializeAfter part of this instruction.
Definition: base_dyn_inst.hh:713
BaseDynInst::isTempSerializeAfter
bool isTempSerializeAfter()
Checks if this serializeAfter is only temporarily set.
Definition: base_dyn_inst.hh:716
BaseDynInst::setTid
void setTid(ThreadID tid)
Sets the thread id.
Definition: base_dyn_inst.hh:1068
BaseDynInst::doneTargCalc
bool doneTargCalc()
Checks whether or not this instruction has had its branch target calculated yet.
Definition: base_dyn_inst.hh:563
BaseDynInst::setThreadState
void setThreadState(ImplState *state)
Sets the pointer to the thread state.
Definition: base_dyn_inst.hh:1071
BaseDynInst::SerializeBefore
@ SerializeBefore
Is a thread synchronization instruction.
Definition: base_dyn_inst.hh:118
BaseDynInst::destRegIdx
const RegId & destRegIdx(int i) const
Returns the logical register index of the i'th destination register.
Definition: base_dyn_inst.hh:759
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:646
BaseDynInst::Regs::flattenedDestIdx
void flattenedDestIdx(int idx, const RegId &reg_id)
Definition: base_dyn_inst.hh:277
BaseDynInst::setHtmTransactionalState
void setHtmTransactionalState(uint64_t htm_uid, uint64_t htm_depth)
Definition: base_dyn_inst.hh:679
BaseDynInst::ReqMade
@ ReqMade
Definition: base_dyn_inst.hh:137
BaseDynInst::setCommitted
void setCommitted()
Sets this instruction as committed.
Definition: base_dyn_inst.hh:929
BaseDynInst::writeMem
Fault writeMem(uint8_t *data, unsigned size, Addr addr, Request::Flags flags, uint64_t *res, const std::vector< bool > &byte_enable) override
Definition: base_dyn_inst.hh:1158
packet.hh
BaseDynInst::setPinnedRegsWritten
void setPinnedRegsWritten()
Sets destination registers as written.
Definition: base_dyn_inst.hh:1010
BaseDynInst::Regs::allocate
static void allocate(T *&ptr, BufCursor &cur, size_t count)
Definition: base_dyn_inst.hh:237
BaseDynInst::Regs::_destIdx
PhysRegIdPtr * _destIdx
Definition: base_dyn_inst.hh:210
BaseDynInst::PredTaken
@ PredTaken
Definition: base_dyn_inst.hh:135
BaseDynInst::isCall
bool isCall() const
Definition: base_dyn_inst.hh:613
StaticInst::isInteger
bool isInteger() const
Definition: static_inst.hh:175
BaseDynInst::isFloating
bool isFloating() const
Definition: base_dyn_inst.hh:610
BaseDynInst::CanIssue
@ CanIssue
Instruction has its result.
Definition: base_dyn_inst.hh:102
BaseDynInst::readyToIssue
bool readyToIssue() const
Returns whether or not this instruction is ready to issue.
Definition: base_dyn_inst.hh:895
BaseDynInst::Regs::_prevDestIdx
PhysRegIdPtr * _prevDestIdx
Definition: base_dyn_inst.hh:214
BaseDynInst::setInIQ
void setInIQ()
Sets this instruction as a entry the IQ.
Definition: base_dyn_inst.hh:943
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:830
BaseDynInst::isUncondCtrl
bool isUncondCtrl() const
Definition: base_dyn_inst.hh:618
BaseDynInst::isSquashedInLSQ
bool isSquashedInLSQ() const
Returns whether or not this instruction is squashed in the LSQ.
Definition: base_dyn_inst.hh:973
BaseDynInst::isDataPrefetch
bool isDataPrefetch() const
Definition: base_dyn_inst.hh:608
BaseDynInst::instResult
std::queue< InstResult > instResult
The result of the instruction; assumes an instruction can have many destination registers.
Definition: base_dyn_inst.hh:168
RequestorID
uint16_t RequestorID
Definition: request.hh:89
BaseDynInst::markSrcRegReady
void markSrcRegReady()
Records that one of the source registers is ready.
Definition: base_dyn_inst_impl.hh:207
StaticInst::isStore
bool isStore() const
Definition: static_inst.hh:167
StaticInst::isHtmCmd
bool isHtmCmd() const
Definition: static_inst.hh:217
BaseDynInst::strictlyOrdered
void strictlyOrdered(bool so)
Definition: base_dyn_inst.hh:1082
StaticInst::isFirstMicroop
bool isFirstMicroop() const
Definition: static_inst.hh:208
BaseDynInst::setVecRegOperand
void setVecRegOperand(const StaticInst *si, int idx, const TheISA::VecRegContainer &val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:844
BaseDynInst::resultSize
uint8_t resultSize()
Return the size of the instResult queue.
Definition: base_dyn_inst.hh:765
BaseDynInst::SerializeHandled
@ SerializeHandled
Needs to serialize instructions behind it.
Definition: base_dyn_inst.hh:121
BaseDynInst::translationStarted
bool translationStarted() const
True if the DTB address translation has started.
Definition: base_dyn_inst.hh:442
ArmISA::VecElem
uint32_t VecElem
Definition: registers.hh:60
BaseDynInst::Regs::Regs
Regs(size_t srcs, size_t dests)
Definition: base_dyn_inst.hh:253
StaticInst::isLoad
bool isLoad() const
Definition: static_inst.hh:166
BaseDynInst::getCpuPtr
BaseCPU * getCpuPtr()
Definition: base_dyn_inst.hh:153
StaticInst::isHtmStart
bool isHtmStart() const
Definition: static_inst.hh:212
BaseDynInst::cpuId
int cpuId() const
Read this CPU's ID.
Definition: base_dyn_inst.hh:541
BaseDynInst::Regs::renamedSrcIdx
void renamedSrcIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: base_dyn_inst.hh:320
inst_seq.hh
BaseDynInst::getHtmTransactionUid
uint64_t getHtmTransactionUid() const override
Definition: base_dyn_inst.hh:650
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:206
BaseDynInst::isFirstMicroop
bool isFirstMicroop() const
Definition: base_dyn_inst.hh:642
PhysRegIdPtr
PhysRegId * PhysRegIdPtr
Definition: reg_class.hh:354
BaseDynInst::Regs::srcsReady
size_t srcsReady
Definition: base_dyn_inst.hh:194
StaticInst::branchTarget
virtual TheISA::PCState branchTarget(const TheISA::PCState &pc) const
Return the target address for a PC-relative branch.
Definition: static_inst.cc:103
BaseDynInst::pc
TheISA::PCState pc
PC state for this instruction.
Definition: base_dyn_inst.hh:171
BaseDynInst::branchTarget
TheISA::PCState branchTarget() const
Returns the branch target address.
Definition: base_dyn_inst.hh:732
BaseDynInst::setVecResult
void setVecResult(T &&t)
Full vector result.
Definition: base_dyn_inst.hh:797
BaseDynInst::sqIt
SQIterator sqIt
Definition: base_dyn_inst.hh:382
StaticInst::isHtmCancel
bool isHtmCancel() const
Definition: static_inst.hh:214
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:237
BaseDynInst::setPinnedRegsRenamed
void setPinnedRegsRenamed()
Sets the destination registers as renamed.
Definition: base_dyn_inst.hh:998
BaseDynInst::requestorId
RequestorID requestorId() const
Read this CPU's data requestor ID.
Definition: base_dyn_inst.hh:547
StaticInst::isAtomic
bool isAtomic() const
Definition: static_inst.hh:168
BaseDynInst::getAddrMonitor
AddressMonitor * getAddrMonitor() override
Definition: base_dyn_inst.hh:1128
StaticInst::isControl
bool isControl() const
Definition: static_inst.hh:179
BaseDynInst::setScalarResult
void setScalarResult(T &&t)
Pushes a result onto the instResult queue.
Definition: base_dyn_inst.hh:786
Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:246
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
StaticInst::isSerializeBefore
bool isSerializeBefore() const
Definition: static_inst.hh:190
BaseDynInst::PinnedRegsWritten
@ PinnedRegsWritten
Pinned registers are renamed.
Definition: base_dyn_inst.hh:113
BaseDynInst::setSerializeBefore
void setSerializeBefore()
Temporarily sets this instruction as a serialize before instruction.
Definition: base_dyn_inst.hh:701
BaseDynInst::mispredicted
bool mispredicted()
Returns whether the instruction mispredicted.
Definition: base_dyn_inst.hh:590
StaticInst::isMacroop
bool isMacroop() const
Definition: static_inst.hh:204
StaticInst::isSquashAfter
bool isSquashAfter() const
Definition: static_inst.hh:192
StaticInst::isDataPrefetch
bool isDataPrefetch() const
Definition: static_inst.hh:171
cpu.hh
BaseDynInst::Regs::prevDestIdx
void prevDestIdx(int idx, PhysRegIdPtr phys_reg_id)
Definition: base_dyn_inst.hh:307
BaseDynInst::predMicroPC
Addr predMicroPC()
Returns the predicted micro PC after the branch.
Definition: base_dyn_inst.hh:577
InstResult::ResultType::Scalar
@ Scalar
BaseDynInst::getInstListIt
ListIt & getInstListIt()
Returns iterator to this instruction in the list of all insts.
Definition: base_dyn_inst.hh:1090
BaseDynInst::setMemAccPredicate
void setMemAccPredicate(bool val) override
Definition: base_dyn_inst.hh:1062
BaseDynInst::contextId
ContextID contextId() const
Read this context's system-wide ID.
Definition: base_dyn_inst.hh:550
BaseDynInst::predInstAddr
Addr predInstAddr()
Returns the predicted PC immediately after the branch.
Definition: base_dyn_inst.hh:571
BaseDynInst::isNonSpeculative
bool isNonSpeculative() const
Definition: base_dyn_inst.hh:634
BaseDynInst::SquashedInROB
@ SquashedInROB
Instruction is squashed in the LSQ.
Definition: base_dyn_inst.hh:111
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:961
BaseDynInst::clearCanCommit
void clearCanCommit()
Clears this instruction as being ready to commit.
Definition: base_dyn_inst.hh:919
BaseDynInst::setCanCommit
void setCanCommit()
Sets this instruction as ready to commit.
Definition: base_dyn_inst.hh:916
BaseDynInst::isPinnedRegsWritten
bool isPinnedRegsWritten() const
Returns whether destination registers are written.
Definition: base_dyn_inst.hh:1006
BaseDynInst::isResultReady
bool isResultReady() const
Returns whether or not the result is ready.
Definition: base_dyn_inst.hh:889
StaticInst::isNonSpeculative
bool isNonSpeculative() const
Definition: static_inst.hh:200
BaseDynInst::Regs::numDests
size_t numDests() const
Definition: base_dyn_inst.hh:245
BaseDynInst::Regs::init
void init()
Definition: base_dyn_inst.hh:248
BaseDynInst::instListIt
ListIt instListIt
Iterator pointing to this BaseDynInst in the list of all insts.
Definition: base_dyn_inst.hh:347
BaseDynInst::NotAnInst
@ NotAnInst
Definition: base_dyn_inst.hh:126
BaseDynInst::numSrcRegs
size_t numSrcRegs() const
Returns the number of source registers.
Definition: base_dyn_inst.hh:736
BaseDynInst::Regs::bytesForDests
static size_t bytesForDests(size_t num)
Definition: base_dyn_inst.hh:217
BaseDynInst::isStoreConditional
bool isStoreConditional() const
Definition: base_dyn_inst.hh:605
BaseDynInst
Definition: base_dyn_inst.hh:77
BaseDynInst::effSize
unsigned effSize
The size of the request.
Definition: base_dyn_inst.hh:371
BaseDynInst::sqIdx
ssize_t sqIdx
Store queue index.
Definition: base_dyn_inst.hh:381
BaseDynInst::ImplState
ImplCPU::ImplState ImplState
Definition: base_dyn_inst.hh:82
BaseDynInst::strictlyOrdered
bool strictlyOrdered() const
Is this instruction's memory access strictly ordered?
Definition: base_dyn_inst.hh:1081
static_inst.hh
BaseDynInst::popResult
InstResult popResult(InstResult dflt=InstResult())
Pops a result off the instResult queue.
Definition: base_dyn_inst.hh:771
BaseDynInst::cpu
ImplCPU * cpu
Pointer to the Impl's CPU object.
Definition: base_dyn_inst.hh:151
BaseDynInst::Regs::renamedSrcIdx
PhysRegIdPtr renamedSrcIdx(int idx) const
Definition: base_dyn_inst.hh:314
BaseDynInst::Regs::renamedDestIdx
PhysRegIdPtr renamedDestIdx(int idx) const
Definition: base_dyn_inst.hh:285
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:852
BaseDynInst::numFPDestRegs
int8_t numFPDestRegs() const
Definition: base_dyn_inst.hh:743
BaseDynInst::Executed
@ Executed
Instruction has issued.
Definition: base_dyn_inst.hh:104
BaseDynInst::isDelayedCommit
bool isDelayedCommit() const
Definition: base_dyn_inst.hh:640
BaseDynInst::isExecuted
bool isExecuted() const
Returns whether or not this instruction has executed.
Definition: base_dyn_inst.hh:913
StaticInst::isIndirectCtrl
bool isIndirectCtrl() const
Definition: static_inst.hh:183
StaticInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
Definition: static_inst.hh:244
BaseDynInst::RecoverInst
@ RecoverInst
Regs pinning status updated after squash.
Definition: base_dyn_inst.hh:115
BaseDynInst::effAddrValid
void effAddrValid(bool b)
Definition: base_dyn_inst.hh:407
BaseDynInst::numDestRegs
size_t numDestRegs() const
Returns the number of destination registers.
Definition: base_dyn_inst.hh:739
BaseDynInst::readPredicate
bool readPredicate() const override
Definition: base_dyn_inst.hh:1043
BaseDynInst::setInstListIt
void setInstListIt(ListIt _instListIt)
Sets iterator for this instruction in the list of all insts.
Definition: base_dyn_inst.hh:1093
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:134
BaseDynInst::clearInIQ
void clearInIQ()
Sets this instruction as a entry the IQ.
Definition: base_dyn_inst.hh:946
BaseDynInst::clearInROB
void clearInROB()
Sets this instruction as a entry the ROB.
Definition: base_dyn_inst.hh:982
BaseDynInst::isSerializing
bool isSerializing() const
Definition: base_dyn_inst.hh:619
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:148
BaseDynInst::Status
Status
Definition: base_dyn_inst.hh:96
BaseDynInst::initiateHtmCmd
Fault initiateHtmCmd(Request::Flags flags) override
Initiate an HTM command, e.g.
Definition: base_dyn_inst.hh:1149
BaseDynInst::memOpDone
void memOpDone(bool f)
Definition: base_dyn_inst.hh:411
BaseDynInst::translationCompleted
bool translationCompleted() const
True if the DTB address translation has completed.
Definition: base_dyn_inst.hh:446
BaseDynInst::Issued
@ Issued
Instruction can issue and execute.
Definition: base_dyn_inst.hh:103
BaseDynInst::isFullMemBarrier
bool isFullMemBarrier() const
Definition: base_dyn_inst.hh:631
BaseDynInst::microPC
Addr microPC() const
Read the micro PC of this instruction.
Definition: base_dyn_inst.hh:1041
BaseDynInst::SquashedInLSQ
@ SquashedInLSQ
Instruction is squashed in the IQ.
Definition: base_dyn_inst.hh:110
BaseDynInst::setSquashedInLSQ
void setSquashedInLSQ()
Sets this instruction as squashed in the LSQ.
Definition: base_dyn_inst.hh:970
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:205
StaticInst::isWriteBarrier
bool isWriteBarrier() const
Definition: static_inst.hh:199
BaseDynInst::Regs::_flatDestIdx
RegId * _flatDestIdx
Definition: base_dyn_inst.hh:206
MipsISA::fill
fill
Definition: pra_constants.hh:54
BaseDynInst::instFlags
std::bitset< MaxFlags > instFlags
Definition: base_dyn_inst.hh:175
BaseDynInst::eaSrcsReady
bool eaSrcsReady() const
Returns whether or not the eff.
Definition: base_dyn_inst_impl.hh:226
X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:80
BaseDynInst::mwait
bool mwait(PacketPtr pkt) override
Definition: base_dyn_inst.hh:1118
BaseDynInst::effAddrValid
bool effAddrValid() const
Is the effective virtual address valid.
Definition: base_dyn_inst.hh:406
BaseCPU
Definition: base.hh:104
BaseDynInst::SerializeAfter
@ SerializeAfter
Needs to serialize on instructions ahead of it.
Definition: base_dyn_inst.hh:120
BaseDynInst::isTempSerializeBefore
bool isTempSerializeBefore()
Checks if this serializeBefore is only temporarily set.
Definition: base_dyn_inst.hh:707
StaticInst::isInstPrefetch
bool isInstPrefetch() const
Definition: static_inst.hh:170
BaseDynInst::ResultReady
@ ResultReady
Instruction has completed.
Definition: base_dyn_inst.hh:101
BaseDynInst::inHtmTransactionalState
bool inHtmTransactionalState() const override
Definition: base_dyn_inst.hh:664
StaticInst::isLastMicroop
bool isLastMicroop() const
Definition: static_inst.hh:207
StaticInst::isNop
bool isNop() const
Definition: static_inst.hh:159
BaseDynInst::setNotAnInst
void setNotAnInst()
Definition: base_dyn_inst.hh:414
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:477
BaseDynInst::Regs::prevDestIdx
PhysRegIdPtr prevDestIdx(int idx) const
Definition: base_dyn_inst.hh:300
BaseDynInst::pcState
TheISA::PCState pcState() const override
Read the PC state of this instruction.
Definition: base_dyn_inst.hh:1029
BaseDynInst::possibleLoadViolation
void possibleLoadViolation(bool f)
Definition: base_dyn_inst.hh:460
BaseDynInst::isReturn
bool isReturn() const
Definition: base_dyn_inst.hh:614
BaseDynInst::setSquashedInROB
void setSquashedInROB()
Sets this instruction as squashed in the ROB.
Definition: base_dyn_inst.hh:988
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:144
BaseDynInst::isSquashAfter
bool isSquashAfter() const
Definition: base_dyn_inst.hh:630
BaseDynInst::staticInst
const StaticInstPtr staticInst
The StaticInst used by this BaseDynInst.
Definition: base_dyn_inst.hh:148
BaseDynInst::setPinnedRegsSquashDone
void setPinnedRegsSquashDone()
Sets dest registers' status updated after squash.
Definition: base_dyn_inst.hh:1023
BaseDynInst::lqIt
LQIterator lqIt
Definition: base_dyn_inst.hh:378
BaseDynInst::setVecPredRegOperand
void setVecPredRegOperand(const StaticInst *si, int idx, const TheISA::VecPredRegContainer &val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:867
BaseDynInst::predNextInstAddr
Addr predNextInstAddr()
Returns the predicted PC two instructions after the branch.
Definition: base_dyn_inst.hh:574
PhysRegId::isPinned
bool isPinned() const
Definition: reg_class.hh:336
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:410
BaseDynInst::clearHtmTransactionalState
void clearHtmTransactionalState()
Definition: base_dyn_inst.hh:687
StaticInst::isHtmStop
bool isHtmStop() const
Definition: static_inst.hh:213
BaseDynInst::isLastMicroop
bool isLastMicroop() const
Definition: base_dyn_inst.hh:641
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:107
BaseDynInst::setCompleted
void setCompleted()
Sets this instruction as completed.
Definition: base_dyn_inst.hh:880
BaseDynInst::isWriteBarrier
bool isWriteBarrier() const
Definition: base_dyn_inst.hh:633
BaseDynInst::isMemRef
bool isMemRef() const
Definition: base_dyn_inst.hh:601
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:258
BaseDynInst::isCommitted
bool isCommitted() const
Returns whether or not this instruction is committed.
Definition: base_dyn_inst.hh:932
BaseDynInst::numVecPredDestRegs
int8_t numVecPredDestRegs() const
Definition: base_dyn_inst.hh:753
BaseDynInst::setIssued
void setIssued()
Sets this instruction as issued from the IQ.
Definition: base_dyn_inst.hh:901
BaseDynInst::setCanIssue
void setCanIssue()
Sets this instruction as ready to issue.
Definition: base_dyn_inst.hh:892
BaseDynInst::opClass
OpClass opClass() const
Returns the opclass of this instruction.
Definition: base_dyn_inst.hh:729
BaseDynInst::Predicate
@ Predicate
Definition: base_dyn_inst.hh:133
BaseDynInst::armMonitor
void armMonitor(Addr address) override
Definition: base_dyn_inst.hh:1113
InstResult::ResultType::VecPredReg
@ VecPredReg
BaseDynInst::numVecElemDestRegs
int8_t numVecElemDestRegs() const
Definition: base_dyn_inst.hh:748
exec_context.hh
BaseDynInst::LQIterator
typename Impl::CPUPol::LSQUnit::LQIterator LQIterator
Definition: base_dyn_inst.hh:85
BaseDynInst::Regs::BackingStorePtr
std::unique_ptr< uint8_t[]> BackingStorePtr
Definition: base_dyn_inst.hh:196
BaseDynInst::htmDepth
uint64_t htmDepth
Definition: base_dyn_inst.hh:399
BaseDynInst::setRequest
void setRequest()
Assert this instruction has generated a memory request.
Definition: base_dyn_inst.hh:1087
StaticInst::isReadBarrier
bool isReadBarrier() const
Definition: static_inst.hh:198
StaticInst::isCall
bool isCall() const
Definition: static_inst.hh:180
BaseDynInst::isAtomic
bool isAtomic() const
Definition: base_dyn_inst.hh:604
BaseDynInst::demapPage
void demapPage(Addr vaddr, uint64_t asn) override
Invalidate a page in the DTLB and ITLB.
Definition: base_dyn_inst.hh:424
BaseDynInst::SQIterator
typename Impl::CPUPol::LSQUnit::SQIterator SQIterator
Definition: base_dyn_inst.hh:86
BaseDynInst::isMacroop
bool isMacroop() const
Definition: base_dyn_inst.hh:638
BaseDynInst::readMemAccPredicate
bool readMemAccPredicate() const override
Definition: base_dyn_inst.hh:1056
BaseDynInst::instAddr
Addr instAddr() const
Read the PC of this instruction.
Definition: base_dyn_inst.hh:1035
BaseDynInst::Regs::readySrcIdx
void readySrcIdx(int idx, bool ready)
Definition: base_dyn_inst.hh:333
BaseDynInst::isDirectCtrl
bool isDirectCtrl() const
Definition: base_dyn_inst.hh:615
BaseDynInst::srcRegIdx
const RegId & srcRegIdx(int i) const
Returns the logical register index of the i'th source register.
Definition: base_dyn_inst.hh:762
BaseDynInst::LsqEntry
@ LsqEntry
Instruction is in the ROB.
Definition: base_dyn_inst.hh:99
BaseDynInst::isHtmCmd
bool isHtmCmd() const
Definition: base_dyn_inst.hh:647
BaseDynInst::Regs
Collect register related information into a single struct.
Definition: base_dyn_inst.hh:188
BaseDynInst::isPinnedRegsSquashDone
bool isPinnedRegsSquashDone() const
Return whether dest registers' pinning status updated after squash.
Definition: base_dyn_inst.hh:1019
BaseDynInst::isSerializeHandled
bool isSerializeHandled()
Checks if the serialization part of this instruction has been handled.
Definition: base_dyn_inst.hh:726
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:73
BaseDynInst::isCompleted
bool isCompleted() const
Returns whether or not this instruction is completed.
Definition: base_dyn_inst.hh:883
PhysRegId
Physical register ID.
Definition: reg_class.hh:223
StaticInst::isUnverifiable
bool isUnverifiable() const
Definition: static_inst.hh:202
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:904
StaticInst::isFloating
bool isFloating() const
Definition: static_inst.hh:176
BaseDynInst::PinnedRegsRenamed
@ PinnedRegsRenamed
Instruction is squashed in the ROB.
Definition: base_dyn_inst.hh:112
BaseDynInst::recordResult
void recordResult(bool f)
Records changes to result?
Definition: base_dyn_inst.hh:403
BaseDynInst::threadNumber
ThreadID threadNumber
The thread this instruction is from.
Definition: base_dyn_inst.hh:344
BaseDynInst::numVecDestRegs
int8_t numVecDestRegs() const
Definition: base_dyn_inst.hh:746
RefCountingPtr
If you want a reference counting pointer to a mutable object, create it like this:
Definition: refcnt.hh:123
trace.hh
BaseDynInst::TranslationCompleted
@ TranslationCompleted
Definition: base_dyn_inst.hh:128
BaseDynInst::setPredicate
void setPredicate(bool val) override
Definition: base_dyn_inst.hh:1046
StaticInst::isCondCtrl
bool isCondCtrl() const
Definition: static_inst.hh:184
BaseDynInst::Completed
@ Completed
Instruction is in the LSQ.
Definition: base_dyn_inst.hh:100
BaseDynInst::translationCompleted
void translationCompleted(bool f)
Definition: base_dyn_inst.hh:447
BaseDynInst::dump
void dump()
Dumps out contents of this BaseDynInst.
Definition: base_dyn_inst_impl.hh:187
BaseDynInst::initiateMemAMO
Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctorPtr amo_op) override
Definition: base_dyn_inst.hh:1171
BaseDynInst::setSquashedInIQ
void setSquashedInIQ()
Sets this instruction as squashed in the IQ.
Definition: base_dyn_inst.hh:952
BaseDynInst::Regs::readySrcIdx
bool readySrcIdx(int idx) const
Definition: base_dyn_inst.hh:326
std::list
STL list class.
Definition: stl.hh:51
StaticInst::isQuiesce
bool isQuiesce() const
Definition: static_inst.hh:201
BaseDynInst::physEffAddr
Addr physEffAddr
The effective physical address.
Definition: base_dyn_inst.hh:365
BaseDynInst::isControl
bool isControl() const
Definition: base_dyn_inst.hh:612
BaseDynInst::isSquashedInROB
bool isSquashedInROB() const
Returns whether or not this instruction is squashed in the ROB.
Definition: base_dyn_inst.hh:991
BaseDynInst::macroop
const StaticInstPtr macroop
The Macroop if one exists.
Definition: base_dyn_inst.hh:354
BaseDynInst::PossibleLoadViolation
@ PossibleLoadViolation
Definition: base_dyn_inst.hh:129
BaseDynInst::setPredTaken
void setPredTaken(bool predicted_taken)
Definition: base_dyn_inst.hh:583
BaseDynInst::lqIdx
ssize_t lqIdx
Load queue index.
Definition: base_dyn_inst.hh:377
BaseDynInst::getHtmTransactionalDepth
uint64_t getHtmTransactionalDepth() const override
Definition: base_dyn_inst.hh:670
BaseDynInst::Regs::bytesForSources
static size_t bytesForSources(size_t num)
Definition: base_dyn_inst.hh:229
BaseDynInst::initVars
void initVars()
Function to initialize variables in the constructors.
Definition: base_dyn_inst_impl.hh:94
BaseDynInst::Regs::BufCursor
BackingStorePtr::pointer BufCursor
Definition: base_dyn_inst.hh:197
BaseDynInst::socketId
uint32_t socketId() const
Read this CPU's Socket ID.
Definition: base_dyn_inst.hh:544
BaseDynInst::setInROB
void setInROB()
Sets this instruction as a entry the ROB.
Definition: base_dyn_inst.hh:979
StaticInst::isReturn
bool isReturn() const
Definition: static_inst.hh:181
BaseDynInst::setResultReady
void setResultReady()
Marks the result as ready.
Definition: base_dyn_inst.hh:886
BaseDynInst::clearCanIssue
void clearCanIssue()
Clears this instruction being able to issue.
Definition: base_dyn_inst.hh:898
StaticInst::isVector
bool isVector() const
Definition: static_inst.hh:177
StaticInst::numFPDestRegs
int8_t numFPDestRegs() const
Number of floating-point destination regs.
Definition: static_inst.hh:140
StaticInst::numVecElemDestRegs
int8_t numVecElemDestRegs() const
Number of vector element destination regs.
Definition: static_inst.hh:146
StaticInst::numVecPredDestRegs
int8_t numVecPredDestRegs() const
Number of predicate destination regs.
Definition: static_inst.hh:148
BaseDynInst::getFault
Fault getFault() const
Returns the fault type.
Definition: base_dyn_inst.hh:553
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:710
BaseDynInst::notAnInst
bool notAnInst() const
Definition: base_dyn_inst.hh:413
BaseDynInst::setSerializeHandled
void setSerializeHandled()
Sets the serialization part of this instruction as handled.
Definition: base_dyn_inst.hh:719
BaseDynInst::NumStatus
@ NumStatus
Serialization has been handled.
Definition: base_dyn_inst.hh:122
BaseDynInst::isMicroop
bool isMicroop() const
Definition: base_dyn_inst.hh:639
BaseDynInst::PinnedRegsSquashDone
@ PinnedRegsSquashDone
Pinned registers are written back.
Definition: base_dyn_inst.hh:114
BaseDynInst::readPredTarg
const TheISA::PCState & readPredTarg()
Definition: base_dyn_inst.hh:568
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:174
BaseDynInst::isInLSQ
bool isInLSQ() const
Returns whether or not this instruction is in the LSQ.
Definition: base_dyn_inst.hh:967
BaseDynInst::effAddr
Addr effAddr
The effective virtual address (lds & stores only).
Definition: base_dyn_inst.hh:362
RegVal
uint64_t RegVal
Definition: types.hh:174
StaticInst::isUncondCtrl
bool isUncondCtrl() const
Definition: static_inst.hh:185
BaseDynInst::isInIQ
bool isInIQ() const
Returns whether or not this instruction has issued.
Definition: base_dyn_inst.hh:949
byteswap.hh
BaseDynInst::setVecElemOperand
void setVecElemOperand(const StaticInst *si, int idx, const TheISA::VecElem val) override
Record a vector register being set to a value.
Definition: base_dyn_inst.hh:859
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:169
BaseDynInst::removeInLSQ
void removeInLSQ()
Sets this instruction as a entry the LSQ.
Definition: base_dyn_inst.hh:964

Generated on Tue Mar 23 2021 19:41:24 for gem5 by doxygen 1.8.17