gem5  v21.0.1.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
isa.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2012-2021 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2009 The Regents of The University of Michigan
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions are
19  * met: redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer;
21  * redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution;
24  * neither the name of the copyright holders nor the names of its
25  * contributors may be used to endorse or promote products derived from
26  * this software without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  */
40 
41 #ifndef __ARCH_ARM_ISA_HH__
42 #define __ARCH_ARM_ISA_HH__
43 
44 #include "arch/arm/isa_device.hh"
45 #include "arch/arm/miscregs.hh"
46 #include "arch/arm/registers.hh"
47 #include "arch/arm/self_debug.hh"
48 #include "arch/arm/system.hh"
49 #include "arch/arm/tlb.hh"
50 #include "arch/arm/types.hh"
51 #include "arch/arm/utility.hh"
52 #include "arch/generic/isa.hh"
53 #include "arch/generic/traits.hh"
54 #include "debug/Checkpoint.hh"
55 #include "enums/DecoderFlavor.hh"
56 #include "enums/VecRegRenameMode.hh"
57 #include "sim/sim_object.hh"
58 
59 struct ArmISAParams;
60 struct DummyArmISADeviceParams;
61 class Checkpoint;
62 class EventManager;
63 
64 namespace ArmISA
65 {
66  class ISA : public BaseISA
67  {
68  protected:
69  // Parent system
71 
72  // Micro Architecture
73  const Enums::DecoderFlavor _decoderFlavor;
74  const Enums::VecRegRenameMode _vecRegRenameMode;
75 
78 
79  // PMU belonging to this ISA
81 
82  // Generic timer interface belonging to this ISA
83  std::unique_ptr<BaseISADevice> timer;
84 
85  // GICv3 CPU interface belonging to this ISA
86  std::unique_ptr<BaseISADevice> gicv3CpuInterface;
87 
88  // Cached copies of system-level properties
91  bool haveLPAE;
93  bool haveCrypto;
95  uint8_t physAddrRange;
96  bool haveSVE;
97  bool haveLSE;
98  bool haveVHE;
99  bool havePAN;
101  bool haveTME;
102 
104  unsigned sveVL;
105 
111 
113 
115 
118  uint32_t lower; // Lower half mapped to this register
119  uint32_t upper; // Upper half mapped to this register
120  uint64_t _reset; // value taken on reset (i.e. initialization)
121  uint64_t _res0; // reserved
122  uint64_t _res1; // reserved
123  uint64_t _raz; // read as zero (fixed at 0)
124  uint64_t _rao; // read as one (fixed at 1)
125  public:
127  lower(0), upper(0),
128  _reset(0), _res0(0), _res1(0), _raz(0), _rao(0) {}
129  uint64_t reset() const { return _reset; }
130  uint64_t res0() const { return _res0; }
131  uint64_t res1() const { return _res1; }
132  uint64_t raz() const { return _raz; }
133  uint64_t rao() const { return _rao; }
134  // raz/rao implies writes ignored
135  uint64_t wi() const { return _raz | _rao; }
136  };
137 
140 
143  std::bitset<NUM_MISCREG_INFOS> &info;
145  public:
146  chain mapsTo(uint32_t l, uint32_t u = 0) const {
147  entry.lower = l;
148  entry.upper = u;
149  return *this;
150  }
151  chain res0(uint64_t mask) const {
152  entry._res0 = mask;
153  return *this;
154  }
155  chain res1(uint64_t mask) const {
156  entry._res1 = mask;
157  return *this;
158  }
159  chain raz(uint64_t mask) const {
160  entry._raz = mask;
161  return *this;
162  }
163  chain rao(uint64_t mask) const {
164  entry._rao = mask;
165  return *this;
166  }
167  chain implemented(bool v = true) const {
169  return *this;
170  }
172  return implemented(false);
173  }
174  chain unverifiable(bool v = true) const {
176  return *this;
177  }
178  chain warnNotFail(bool v = true) const {
180  return *this;
181  }
182  chain mutex(bool v = true) const {
183  info[MISCREG_MUTEX] = v;
184  return *this;
185  }
186  chain banked(bool v = true) const {
187  info[MISCREG_BANKED] = v;
188  return *this;
189  }
190  chain banked64(bool v = true) const {
192  return *this;
193  }
194  chain bankedChild(bool v = true) const {
196  return *this;
197  }
198  chain userNonSecureRead(bool v = true) const {
200  return *this;
201  }
202  chain userNonSecureWrite(bool v = true) const {
204  return *this;
205  }
206  chain userSecureRead(bool v = true) const {
208  return *this;
209  }
210  chain userSecureWrite(bool v = true) const {
212  return *this;
213  }
214  chain user(bool v = true) const {
217  userSecureRead(v);
219  return *this;
220  }
221  chain privNonSecureRead(bool v = true) const {
223  return *this;
224  }
225  chain privNonSecureWrite(bool v = true) const {
227  return *this;
228  }
229  chain privNonSecure(bool v = true) const {
232  return *this;
233  }
234  chain privSecureRead(bool v = true) const {
236  return *this;
237  }
238  chain privSecureWrite(bool v = true) const {
240  return *this;
241  }
242  chain privSecure(bool v = true) const {
243  privSecureRead(v);
245  return *this;
246  }
247  chain priv(bool v = true) const {
248  privSecure(v);
249  privNonSecure(v);
250  return *this;
251  }
252  chain privRead(bool v = true) const {
253  privSecureRead(v);
255  return *this;
256  }
257  chain hypE2HSecureRead(bool v = true) const {
259  return *this;
260  }
261  chain hypE2HNonSecureRead(bool v = true) const {
263  return *this;
264  }
265  chain hypE2HRead(bool v = true) const {
268  return *this;
269  }
270  chain hypE2HSecureWrite(bool v = true) const {
272  return *this;
273  }
274  chain hypE2HNonSecureWrite(bool v = true) const {
276  return *this;
277  }
278  chain hypE2HWrite(bool v = true) const {
281  return *this;
282  }
283  chain hypE2H(bool v = true) const {
284  hypE2HRead(v);
285  hypE2HWrite(v);
286  return *this;
287  }
288  chain hypSecureRead(bool v = true) const {
290  return *this;
291  }
292  chain hypNonSecureRead(bool v = true) const {
294  return *this;
295  }
296  chain hypRead(bool v = true) const {
297  hypE2HRead(v);
298  hypSecureRead(v);
300  return *this;
301  }
302  chain hypSecureWrite(bool v = true) const {
304  return *this;
305  }
306  chain hypNonSecureWrite(bool v = true) const {
308  return *this;
309  }
310  chain hypWrite(bool v = true) const {
311  hypE2HWrite(v);
312  hypSecureWrite(v);
314  return *this;
315  }
316  chain hypSecure(bool v = true) const {
319  hypSecureRead(v);
320  hypSecureWrite(v);
321  return *this;
322  }
323  chain hyp(bool v = true) const {
324  hypRead(v);
325  hypWrite(v);
326  return *this;
327  }
328  chain monE2HRead(bool v = true) const {
330  return *this;
331  }
332  chain monE2HWrite(bool v = true) const {
334  return *this;
335  }
336  chain monE2H(bool v = true) const {
337  monE2HRead(v);
338  monE2HWrite(v);
339  return *this;
340  }
341  chain monSecureRead(bool v = true) const {
342  monE2HRead(v);
344  return *this;
345  }
346  chain monSecureWrite(bool v = true) const {
347  monE2HWrite(v);
349  return *this;
350  }
351  chain monNonSecureRead(bool v = true) const {
352  monE2HRead(v);
354  return *this;
355  }
356  chain monNonSecureWrite(bool v = true) const {
357  monE2HWrite(v);
359  return *this;
360  }
361  chain mon(bool v = true) const {
362  monSecureRead(v);
363  monSecureWrite(v);
366  return *this;
367  }
368  chain monSecure(bool v = true) const {
369  monSecureRead(v);
370  monSecureWrite(v);
371  return *this;
372  }
373  chain monNonSecure(bool v = true) const {
376  return *this;
377  }
378  chain allPrivileges(bool v = true) const {
381  userSecureRead(v);
385  privSecureRead(v);
387  hypRead(v);
388  hypWrite(v);
389  monSecureRead(v);
390  monSecureWrite(v);
393  return *this;
394  }
395  chain nonSecure(bool v = true) const {
400  hypRead(v);
401  hypWrite(v);
404  return *this;
405  }
406  chain secure(bool v = true) const {
407  userSecureRead(v);
409  privSecureRead(v);
411  monSecureRead(v);
412  monSecureWrite(v);
413  return *this;
414  }
415  chain reads(bool v) const {
417  userSecureRead(v);
419  privSecureRead(v);
420  hypRead(v);
421  monSecureRead(v);
423  return *this;
424  }
425  chain writes(bool v) const {
430  hypWrite(v);
431  monSecureWrite(v);
433  return *this;
434  }
436  user(0);
437  return *this;
438  }
439  chain highest(ArmSystem *const sys) const;
441  std::bitset<NUM_MISCREG_INFOS> &i)
442  : entry(e),
443  info(i)
444  {
445  // force unimplemented registers to be thusly declared
446  implemented(1);
447  }
448  };
449 
452  miscRegInfo[reg]);
453  }
454 
456 
459 
460  void
461  updateRegMap(CPSR cpsr)
462  {
463  if (cpsr.width == 0) {
465  } else {
466  switch (cpsr.mode) {
467  case MODE_USER:
468  case MODE_SYSTEM:
470  break;
471  case MODE_FIQ:
473  break;
474  case MODE_IRQ:
476  break;
477  case MODE_SVC:
479  break;
480  case MODE_MON:
482  break;
483  case MODE_ABORT:
485  break;
486  case MODE_HYP:
488  break;
489  case MODE_UNDEFINED:
491  break;
492  default:
493  panic("Unrecognized mode setting in CPSR.\n");
494  }
495  }
496  }
497 
500 
501  private:
502  void assert32() { assert(((CPSR)readMiscReg(MISCREG_CPSR)).width); }
503  void assert64() { assert(!((CPSR)readMiscReg(MISCREG_CPSR)).width); }
504 
505  public:
506  void clear();
507 
508  protected:
509  void clear32(const ArmISAParams &p, const SCTLR &sctlr_rst);
510  void clear64(const ArmISAParams &p);
511  void initID32(const ArmISAParams &p);
512  void initID64(const ArmISAParams &p);
513 
518 
519  public:
520  SelfDebug*
521  getSelfDebug() const
522  {
523  return selfDebug;
524  }
525 
526  static SelfDebug*
528  {
529  auto *arm_isa = static_cast<ArmISA::ISA *>(tc->getIsaPtr());
530  return arm_isa->getSelfDebug();
531  }
532 
533  RegVal readMiscRegNoEffect(int misc_reg) const;
534  RegVal readMiscReg(int misc_reg);
535  void setMiscRegNoEffect(int misc_reg, RegVal val);
536  void setMiscReg(int misc_reg, RegVal val);
537 
538  RegId
539  flattenRegId(const RegId& regId) const
540  {
541  switch (regId.classValue()) {
542  case IntRegClass:
543  return RegId(IntRegClass, flattenIntIndex(regId.index()));
544  case FloatRegClass:
545  return RegId(FloatRegClass, flattenFloatIndex(regId.index()));
546  case VecRegClass:
547  return RegId(VecRegClass, flattenVecIndex(regId.index()));
548  case VecElemClass:
549  return RegId(VecElemClass, flattenVecElemIndex(regId.index()),
550  regId.elemIndex());
551  case VecPredRegClass:
552  return RegId(VecPredRegClass,
553  flattenVecPredIndex(regId.index()));
554  case CCRegClass:
555  return RegId(CCRegClass, flattenCCIndex(regId.index()));
556  case MiscRegClass:
557  return RegId(MiscRegClass, flattenMiscIndex(regId.index()));
558  }
559  return RegId();
560  }
561 
562  int
563  flattenIntIndex(int reg) const
564  {
565  assert(reg >= 0);
566  if (reg < NUM_ARCH_INTREGS) {
567  return intRegMap[reg];
568  } else if (reg < NUM_INTREGS) {
569  return reg;
570  } else if (reg == INTREG_SPX) {
571  CPSR cpsr = miscRegs[MISCREG_CPSR];
573  (OperatingMode) (uint8_t) cpsr.mode);
574  if (!cpsr.sp && el != EL0)
575  return INTREG_SP0;
576  switch (el) {
577  case EL3:
578  return INTREG_SP3;
579  case EL2:
580  return INTREG_SP2;
581  case EL1:
582  return INTREG_SP1;
583  case EL0:
584  return INTREG_SP0;
585  default:
586  panic("Invalid exception level");
587  return 0; // Never happens.
588  }
589  } else {
590  return flattenIntRegModeIndex(reg);
591  }
592  }
593 
594  int
596  {
597  assert(reg >= 0);
598  return reg;
599  }
600 
601  int
602  flattenVecIndex(int reg) const
603  {
604  assert(reg >= 0);
605  return reg;
606  }
607 
608  int
610  {
611  assert(reg >= 0);
612  return reg;
613  }
614 
615  int
617  {
618  assert(reg >= 0);
619  return reg;
620  }
621 
622  int
623  flattenCCIndex(int reg) const
624  {
625  assert(reg >= 0);
626  return reg;
627  }
628 
629  int
631  {
632  assert(reg >= 0);
633  int flat_idx = reg;
634 
635  if (reg == MISCREG_SPSR) {
636  CPSR cpsr = miscRegs[MISCREG_CPSR];
637  switch (cpsr.mode) {
638  case MODE_EL0T:
639  warn("User mode does not have SPSR\n");
640  flat_idx = MISCREG_SPSR;
641  break;
642  case MODE_EL1T:
643  case MODE_EL1H:
644  flat_idx = MISCREG_SPSR_EL1;
645  break;
646  case MODE_EL2T:
647  case MODE_EL2H:
648  flat_idx = MISCREG_SPSR_EL2;
649  break;
650  case MODE_EL3T:
651  case MODE_EL3H:
652  flat_idx = MISCREG_SPSR_EL3;
653  break;
654  case MODE_USER:
655  warn("User mode does not have SPSR\n");
656  flat_idx = MISCREG_SPSR;
657  break;
658  case MODE_FIQ:
659  flat_idx = MISCREG_SPSR_FIQ;
660  break;
661  case MODE_IRQ:
662  flat_idx = MISCREG_SPSR_IRQ;
663  break;
664  case MODE_SVC:
665  flat_idx = MISCREG_SPSR_SVC;
666  break;
667  case MODE_MON:
668  flat_idx = MISCREG_SPSR_MON;
669  break;
670  case MODE_ABORT:
671  flat_idx = MISCREG_SPSR_ABT;
672  break;
673  case MODE_HYP:
674  flat_idx = MISCREG_SPSR_HYP;
675  break;
676  case MODE_UNDEFINED:
677  flat_idx = MISCREG_SPSR_UND;
678  break;
679  default:
680  warn("Trying to access SPSR in an invalid mode: %d\n",
681  cpsr.mode);
682  flat_idx = MISCREG_SPSR;
683  break;
684  }
685  } else if (miscRegInfo[reg][MISCREG_MUTEX]) {
686  // Mutually exclusive CP15 register
687  switch (reg) {
688  case MISCREG_PRRR_MAIR0:
691  {
692  TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
693  // If the muxed reg has been flattened, work out the
694  // offset and apply it to the unmuxed reg
695  int idxOffset = reg - MISCREG_PRRR_MAIR0;
696  if (ttbcr.eae)
697  flat_idx = flattenMiscIndex(MISCREG_MAIR0 +
698  idxOffset);
699  else
700  flat_idx = flattenMiscIndex(MISCREG_PRRR +
701  idxOffset);
702  }
703  break;
704  case MISCREG_NMRR_MAIR1:
707  {
708  TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
709  // If the muxed reg has been flattened, work out the
710  // offset and apply it to the unmuxed reg
711  int idxOffset = reg - MISCREG_NMRR_MAIR1;
712  if (ttbcr.eae)
713  flat_idx = flattenMiscIndex(MISCREG_MAIR1 +
714  idxOffset);
715  else
716  flat_idx = flattenMiscIndex(MISCREG_NMRR +
717  idxOffset);
718  }
719  break;
721  {
722  PMSELR pmselr = miscRegs[MISCREG_PMSELR];
723  if (pmselr.sel == 31)
725  else
727  }
728  break;
729  default:
730  panic("Unrecognized misc. register.\n");
731  break;
732  }
733  } else {
735  bool secureReg = haveSecurity && !highestELIs64 &&
738  flat_idx += secureReg ? 2 : 1;
739  } else {
740  flat_idx = snsBankedIndex64((MiscRegIndex)reg,
743  }
744  }
745  return flat_idx;
746  }
747 
752  int
753  redirectRegVHE(ThreadContext * tc, int misc_reg)
754  {
755  const HCR hcr = readMiscRegNoEffect(MISCREG_HCR_EL2);
756  if (hcr.e2h == 0x0 || currEL(tc) != EL2)
757  return misc_reg;
759  bool sec_el2 = scr.eel2 && haveSecEL2;
760  switch(misc_reg) {
761  case MISCREG_SPSR_EL1:
762  return MISCREG_SPSR_EL2;
763  case MISCREG_ELR_EL1:
764  return MISCREG_ELR_EL2;
765  case MISCREG_SCTLR_EL1:
766  return MISCREG_SCTLR_EL2;
767  case MISCREG_CPACR_EL1:
768  return MISCREG_CPTR_EL2;
769  // case :
770  // return MISCREG_TRFCR_EL2;
771  case MISCREG_TTBR0_EL1:
772  return MISCREG_TTBR0_EL2;
773  case MISCREG_TTBR1_EL1:
774  return MISCREG_TTBR1_EL2;
775  case MISCREG_TCR_EL1:
776  return MISCREG_TCR_EL2;
777  case MISCREG_AFSR0_EL1:
778  return MISCREG_AFSR0_EL2;
779  case MISCREG_AFSR1_EL1:
780  return MISCREG_AFSR1_EL2;
781  case MISCREG_ESR_EL1:
782  return MISCREG_ESR_EL2;
783  case MISCREG_FAR_EL1:
784  return MISCREG_FAR_EL2;
785  case MISCREG_MAIR_EL1:
786  return MISCREG_MAIR_EL2;
787  case MISCREG_AMAIR_EL1:
788  return MISCREG_AMAIR_EL2;
789  case MISCREG_VBAR_EL1:
790  return MISCREG_VBAR_EL2;
792  return MISCREG_CONTEXTIDR_EL2;
793  case MISCREG_CNTKCTL_EL1:
794  return MISCREG_CNTHCTL_EL2;
796  return sec_el2? MISCREG_CNTHPS_TVAL_EL2:
799  return sec_el2? MISCREG_CNTHPS_CTL_EL2:
802  return sec_el2? MISCREG_CNTHPS_CVAL_EL2:
805  return sec_el2? MISCREG_CNTHVS_TVAL_EL2:
808  return sec_el2? MISCREG_CNTHVS_CTL_EL2:
811  return sec_el2? MISCREG_CNTHVS_CVAL_EL2:
813  default:
814  return misc_reg;
815  }
816  /*should not be accessible */
817  return misc_reg;
818  }
819 
820  int
822  {
823  int reg_as_int = static_cast<int>(reg);
825  reg_as_int += (haveSecurity && !ns) ? 2 : 1;
826  }
827  return reg_as_int;
828  }
829 
830  std::pair<int,int> getMiscIndices(int misc_reg) const
831  {
832  // Note: indexes of AArch64 registers are left unchanged
833  int flat_idx = flattenMiscIndex(misc_reg);
834 
835  if (lookUpMiscReg[flat_idx].lower == 0) {
836  return std::make_pair(flat_idx, 0);
837  }
838 
839  // do additional S/NS flattenings if mapped to NS while in S
840  bool S = haveSecurity && !highestELIs64 &&
843  int lower = lookUpMiscReg[flat_idx].lower;
844  int upper = lookUpMiscReg[flat_idx].upper;
845  // upper == 0, which is CPSR, is not MISCREG_BANKED_CHILD (no-op)
846  lower += S && miscRegInfo[lower][MISCREG_BANKED_CHILD];
847  upper += S && miscRegInfo[upper][MISCREG_BANKED_CHILD];
848  return std::make_pair(lower, upper);
849  }
850 
851  unsigned getCurSveVecLenInBits() const;
852 
853  unsigned getCurSveVecLenInBitsAtReset() const { return sveVL * 128; }
854 
855  static void zeroSveVecRegUpperPart(VecRegContainer &vc,
856  unsigned eCount);
857 
858  void serialize(CheckpointOut &cp) const override;
859  void unserialize(CheckpointIn &cp) override;
860 
861  void startup() override;
862 
863  void setupThreadContext();
864 
865  void takeOverFrom(ThreadContext *new_tc,
866  ThreadContext *old_tc) override;
867 
868  Enums::DecoderFlavor decoderFlavor() const { return _decoderFlavor; }
869 
871  bool haveGICv3CpuIfc() const
872  {
873  // gicv3CpuInterface is initialized at startup time, hence
874  // trying to read its value before the startup stage will lead
875  // to an error
876  assert(afterStartup);
877  return gicv3CpuInterface != nullptr;
878  }
879 
880  Enums::VecRegRenameMode
882  {
883  return _vecRegRenameMode;
884  }
885 
886  PARAMS(ArmISA);
887 
888  ISA(const Params &p);
889 
890  uint64_t
891  getExecutingAsid() const override
892  {
894  }
895 
896  bool
897  inUserMode() const override
898  {
899  CPSR cpsr = miscRegs[MISCREG_CPSR];
900  return ArmISA::inUserMode(cpsr);
901  }
902  };
903 }
904 
905 template<>
906 struct RenameMode<ArmISA::ISA>
907 {
908  static Enums::VecRegRenameMode
909  init(const BaseISA* isa)
910  {
911  auto arm_isa = dynamic_cast<const ArmISA::ISA *>(isa);
912  assert(arm_isa);
913  return arm_isa->vecRegRenameMode();
914  }
915 
916  static Enums::VecRegRenameMode
918  {
919  if (pc.aarch64()) {
920  return Enums::Full;
921  } else {
922  return Enums::Elem;
923  }
924  }
925 
926  static bool
927  equalsInit(const BaseISA* isa1, const BaseISA* isa2)
928  {
929  return init(isa1) == init(isa2);
930  }
931 };
932 
933 #endif
ArmISA::ISA::MiscRegLUTEntryInitializer::userSecureWrite
chain userSecureWrite(bool v=true) const
Definition: isa.hh:210
ArmISA::ISA::setupThreadContext
void setupThreadContext()
Definition: isa.cc:457
ArmISA::ISA::MiscRegLUTEntryInitializer::monNonSecure
chain monNonSecure(bool v=true) const
Definition: isa.hh:373
isa_device.hh
ArmISA::SelfDebug
Definition: self_debug.hh:273
ArmISA::ISA::flattenCCIndex
int flattenCCIndex(int reg) const
Definition: isa.hh:623
ArmISA::ISA::MiscRegLUTEntryInitializer::reads
chain reads(bool v) const
Definition: isa.hh:415
ArmISA::IntReg64Map
const IntRegMap IntReg64Map
Definition: intregs.hh:304
ArmISA::ISA::MiscRegLUTEntryInitializer::privSecureRead
chain privSecureRead(bool v=true) const
Definition: isa.hh:234
ArmISA::MISCREG_BANKED64
@ MISCREG_BANKED64
Definition: miscregs.hh:1107
ArmISA::ISA::MiscRegLUTEntryInitializer::hypSecure
chain hypSecure(bool v=true) const
Definition: isa.hh:316
ArmISA::ns
Bitfield< 0 > ns
Definition: miscregs_types.hh:328
ArmISA::ISA::getMiscIndices
std::pair< int, int > getMiscIndices(int misc_reg) const
Definition: isa.hh:830
ArmISA::MODE_HYP
@ MODE_HYP
Definition: types.hh:642
ArmISA::MISCREG_HYP_NS_WR
@ MISCREG_HYP_NS_WR
Definition: miscregs.hh:1127
ArmISA::MISCREG_CNTHPS_TVAL_EL2
@ MISCREG_CNTHPS_TVAL_EL2
Definition: miscregs.hh:775
ArmISA::ISA::initializeMiscRegMetadata
void initializeMiscRegMetadata()
Definition: miscregs.cc:3397
warn
#define warn(...)
Definition: logging.hh:239
SimObject::Params
SimObjectParams Params
Definition: sim_object.hh:162
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HSecureWrite
chain hypE2HSecureWrite(bool v=true) const
Definition: isa.hh:270
ArmISA::ISA::MiscRegLUTEntryInitializer::res1
chain res1(uint64_t mask) const
Definition: isa.hh:155
ArmISA::MISCREG_IMPLEMENTED
@ MISCREG_IMPLEMENTED
Definition: miscregs.hh:1096
ArmISA::MISCREG_CNTHV_TVAL_EL2
@ MISCREG_CNTHV_TVAL_EL2
Definition: miscregs.hh:779
ArmISA::MISCREG_CNTHP_CTL_EL2
@ MISCREG_CNTHP_CTL_EL2
Definition: miscregs.hh:770
ArmISA::EL2
@ EL2
Definition: types.hh:624
ArmISA::ISA::MiscRegLUTEntry::wi
uint64_t wi() const
Definition: isa.hh:135
ArmISA::ISA::clear
void clear()
Definition: isa.cc:126
ArmISA::ISA::MiscRegLUTEntryInitializer::banked64
chain banked64(bool v=true) const
Definition: isa.hh:190
ArmISA::MODE_UNDEFINED
@ MODE_UNDEFINED
Definition: types.hh:643
ArmISA::MISCREG_MON_E2H_WR
@ MISCREG_MON_E2H_WR
Definition: miscregs.hh:1143
ArmISA::ISA::MiscRegLUTEntry::res1
uint64_t res1() const
Definition: isa.hh:131
ArmISA::ISA::decoderFlavor
Enums::DecoderFlavor decoderFlavor() const
Definition: isa.hh:868
ArmISA::MODE_EL0T
@ MODE_EL0T
Definition: types.hh:629
ArmISA::ISA::haveVHE
bool haveVHE
Definition: isa.hh:98
ArmISA::MISCREG_HYP_S_RD
@ MISCREG_HYP_S_RD
Definition: miscregs.hh:1128
ArmISA::ISA::flattenMiscIndex
int flattenMiscIndex(int reg) const
Definition: isa.hh:630
ArmISA::MISCREG_PRRR_MAIR0_NS
@ MISCREG_PRRR_MAIR0_NS
Definition: miscregs.hh:81
ArmISA::MISCREG_SPSR_HYP
@ MISCREG_SPSR_HYP
Definition: miscregs.hh:64
ArmISA::ISA::MiscRegLUTEntryInitializer::hypWrite
chain hypWrite(bool v=true) const
Definition: isa.hh:310
ArmISA::MISCREG_HYP_S_WR
@ MISCREG_HYP_S_WR
Definition: miscregs.hh:1129
ArmISA::ISA::MiscRegLUTEntryInitializer::user
chain user(bool v=true) const
Definition: isa.hh:214
VecElemClass
@ VecElemClass
Vector Register Native Elem lane.
Definition: reg_class.hh:58
ArmISA::MISCREG_CONTEXTIDR_EL1
@ MISCREG_CONTEXTIDR_EL1
Definition: miscregs.hh:741
ArmISA::ISA::vecRegRenameMode
Enums::VecRegRenameMode vecRegRenameMode() const
Definition: isa.hh:881
ArmISA::MISCREG_SPSR_UND
@ MISCREG_SPSR_UND
Definition: miscregs.hh:65
ArmISA::MISCREG_HYP_E2H_NS_RD
@ MISCREG_HYP_E2H_NS_RD
Definition: miscregs.hh:1131
ArmISA::BaseISADevice
Base class for devices that use the MiscReg interfaces.
Definition: isa_device.hh:58
ArmISA::TLB::ArmTranslationType
ArmTranslationType
Definition: tlb.hh:127
ArmISA::ISA::getSelfDebug
static SelfDebug * getSelfDebug(ThreadContext *tc)
Definition: isa.hh:527
ArmISA::ISA::miscRegs
RegVal miscRegs[NumMiscRegs]
Definition: isa.hh:457
ArmISA::MISCREG_PMXEVTYPER
@ MISCREG_PMXEVTYPER
Definition: miscregs.hh:356
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
ArmISA::ISA::haveLPAE
bool haveLPAE
Definition: isa.hh:91
ArmISA::ISA::MiscRegLUTEntryInitializer::hypSecureWrite
chain hypSecureWrite(bool v=true) const
Definition: isa.hh:302
ArmISA::EL0
@ EL0
Definition: types.hh:622
ArmISA::ISA::MiscRegLUTEntryInitializer::info
std::bitset< NUM_MISCREG_INFOS > & info
Definition: isa.hh:143
ArmISA::MODE_EL3H
@ MODE_EL3H
Definition: types.hh:635
Flags< FlagsType >
ArmISA::ISA::gicv3CpuInterface
std::unique_ptr< BaseISADevice > gicv3CpuInterface
Definition: isa.hh:86
ArmISA::MISCREG_CNTP_TVAL_EL0
@ MISCREG_CNTP_TVAL_EL0
Definition: miscregs.hh:754
ArmISA::ISA::clear32
void clear32(const ArmISAParams &p, const SCTLR &sctlr_rst)
Definition: isa.cc:218
ArmISA::width
Bitfield< 4 > width
Definition: miscregs_types.hh:68
ArmISA::MISCREG_TTBR0_EL1
@ MISCREG_TTBR0_EL1
Definition: miscregs.hh:593
ArmISA::OperatingMode
OperatingMode
Definition: types.hh:628
ArmISA::ISA::MiscRegLUTEntry::MiscRegLUTEntry
MiscRegLUTEntry()
Definition: isa.hh:126
ArmISA::currEL
static ExceptionLevel currEL(const ThreadContext *tc)
Definition: utility.hh:131
ArmISA::ISA::MiscRegLUTEntry::_reset
uint64_t _reset
Definition: isa.hh:120
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2H
chain hypE2H(bool v=true) const
Definition: isa.hh:283
ArmISA::MISCREG_CNTV_CVAL_EL0
@ MISCREG_CNTV_CVAL_EL0
Definition: miscregs.hh:756
ArmISA::IntRegUndMap
const IntRegMap IntRegUndMap
Definition: intregs.hh:405
BaseTLB::Mode
Mode
Definition: tlb.hh:57
ArmISA::ISA::MiscRegLUTEntryInitializer::allPrivileges
chain allPrivileges(bool v=true) const
Definition: isa.hh:378
ArmISA::MISCREG_MON_E2H_RD
@ MISCREG_MON_E2H_RD
Definition: miscregs.hh:1142
ArmISA::MISCREG_HYP_E2H_S_RD
@ MISCREG_HYP_E2H_S_RD
Definition: miscregs.hh:1133
ArmISA::ISA::setMiscReg
void setMiscReg(int misc_reg, RegVal val)
Definition: isa.cc:833
ArmISA::IntRegIndex
IntRegIndex
Definition: intregs.hh:51
ArmISA::MODE_SYSTEM
@ MODE_SYSTEM
Definition: types.hh:644
ArmISA::ISA::MiscRegLUTEntry::lower
uint32_t lower
Definition: isa.hh:118
ArmISA::MISCREG_CNTV_TVAL_EL0
@ MISCREG_CNTV_TVAL_EL0
Definition: miscregs.hh:757
ArmISA::inSecureState
static bool inSecureState(SCR scr, CPSR cpsr)
Definition: utility.hh:235
ArmISA::ISA::MiscRegLUTEntryInitializer::mutex
chain mutex(bool v=true) const
Definition: isa.hh:182
ArmISA::ISA::MiscRegLUTEntryInitializer::monSecureRead
chain monSecureRead(bool v=true) const
Definition: isa.hh:341
ArmISA::MISCREG_MON_NS0_WR
@ MISCREG_MON_NS0_WR
Definition: miscregs.hh:1137
ArmISA::MISCREG_USR_NS_WR
@ MISCREG_USR_NS_WR
Definition: miscregs.hh:1117
ArmISA::ISA::getExecutingAsid
uint64_t getExecutingAsid() const override
Definition: isa.hh:891
ArmISA::MISCREG_NMRR_MAIR1
@ MISCREG_NMRR_MAIR1
Definition: miscregs.hh:83
ArmISA::ISA::MiscRegLUTEntryInitializer::mapsTo
chain mapsTo(uint32_t l, uint32_t u=0) const
Definition: isa.hh:146
ArmISA::MODE_EL1T
@ MODE_EL1T
Definition: types.hh:630
tlb.hh
std::vector
STL vector class.
Definition: stl.hh:37
ArmISA::MISCREG_CNTHPS_CTL_EL2
@ MISCREG_CNTHPS_CTL_EL2
Definition: miscregs.hh:773
ArmISA::ISA::redirectRegVHE
int redirectRegVHE(ThreadContext *tc, int misc_reg)
Returns the enconcing equivalent when VHE is implemented and HCR_EL2.E2H is enabled and executing at ...
Definition: isa.hh:753
ArmISA::EL3
@ EL3
Definition: types.hh:625
ArmISA::MISCREG_ELR_EL2
@ MISCREG_ELR_EL2
Definition: miscregs.hh:622
ArmISA::MISCREG_PRI_S_RD
@ MISCREG_PRI_S_RD
Definition: miscregs.hh:1123
ArmISA::MISCREG_ESR_EL1
@ MISCREG_ESR_EL1
Definition: miscregs.hh:635
ArmISA::MISCREG_TCR_EL2
@ MISCREG_TCR_EL2
Definition: miscregs.hh:600
ArmISA::ISA
Definition: isa.hh:66
ArmISA::ISA::MiscRegLUTEntry
MiscReg metadata.
Definition: isa.hh:117
ArmISA::ISA::MiscRegLUTEntry::_rao
uint64_t _rao
Definition: isa.hh:124
ArmISA::ISA::MiscRegLUTEntry::raz
uint64_t raz() const
Definition: isa.hh:132
ArmISA::MISCREG_CNTHPS_CVAL_EL2
@ MISCREG_CNTHPS_CVAL_EL2
Definition: miscregs.hh:774
ArmISA::MISCREG_ELR_EL1
@ MISCREG_ELR_EL1
Definition: miscregs.hh:610
ArmISA::ISA::MiscRegLUTEntryInitializer::monE2HRead
chain monE2HRead(bool v=true) const
Definition: isa.hh:328
ArmISA::ISA::MiscRegLUTEntryInitializer::monE2H
chain monE2H(bool v=true) const
Definition: isa.hh:336
system.hh
ArmISA::MISCREG_CNTV_CTL_EL0
@ MISCREG_CNTV_CTL_EL0
Definition: miscregs.hh:755
RenameMode
Helper structure to get the vector register mode for a given ISA.
Definition: traits.hh:53
ArmISA::ISA::sveVL
unsigned sveVL
SVE vector length in quadwords.
Definition: isa.hh:104
ArmISA::ISA::MiscRegLUTEntryInitializer::res0
chain res0(uint64_t mask) const
Definition: isa.hh:151
ArmISA
Definition: ccregs.hh:41
types.hh
ArmISA::ISA::haveSecEL2
bool haveSecEL2
Definition: isa.hh:100
X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:88
ArmISA::ISA::readMiscRegNoEffect
RegVal readMiscRegNoEffect(int misc_reg) const
Definition: isa.cc:485
ArmISA::ISA::zeroSveVecRegUpperPart
static void zeroSveVecRegUpperPart(VecRegContainer &vc, unsigned eCount)
Definition: isa.cc:2351
ArmISA::ISA::takeOverFrom
void takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc) override
Definition: isa.cc:478
ArmISA::MISCREG_AFSR1_EL2
@ MISCREG_AFSR1_EL2
Definition: miscregs.hh:639
RegId::elemIndex
const RegIndex & elemIndex() const
Elem accessor.
Definition: reg_class.hh:197
ArmISA::MISCREG_CNTKCTL_EL1
@ MISCREG_CNTKCTL_EL1
Definition: miscregs.hh:764
ArmISA::ISA::assert32
void assert32()
Definition: isa.hh:502
ArmISA::MISCREG_HYP_E2H_S_WR
@ MISCREG_HYP_E2H_S_WR
Definition: miscregs.hh:1134
ArmISA::ISA::system
ArmSystem * system
Definition: isa.hh:70
ArmISA::ISA::addressTranslation
void addressTranslation(TLB::ArmTranslationType tran_type, BaseTLB::Mode mode, Request::Flags flags, RegVal val)
Definition: isa.cc:2427
RegId
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:75
ArmISA::ISA::MiscRegLUTEntry::_res1
uint64_t _res1
Definition: isa.hh:122
ArmISA::ISA::timer
std::unique_ptr< BaseISADevice > timer
Definition: isa.hh:83
ArmISA::ISA::MiscRegLUTEntry::upper
uint32_t upper
Definition: isa.hh:119
ArmISA::ISA::MiscRegLUTEntry::res0
uint64_t res0() const
Definition: isa.hh:130
ArmISA::ISA::_vecRegRenameMode
const Enums::VecRegRenameMode _vecRegRenameMode
Definition: isa.hh:74
ThreadContext::getIsaPtr
virtual BaseISA * getIsaPtr()=0
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HSecureRead
chain hypE2HSecureRead(bool v=true) const
Definition: isa.hh:257
ArmISA::MISCREG_CNTP_CVAL_EL0
@ MISCREG_CNTP_CVAL_EL0
Definition: miscregs.hh:753
ArmISA::ISA::haveGICv3CpuIfc
bool haveGICv3CpuIfc() const
Returns true if the ISA has a GICv3 cpu interface.
Definition: isa.hh:871
ArmISA::MISCREG_VBAR_EL2
@ MISCREG_VBAR_EL2
Definition: miscregs.hh:736
ArmISA::ISA::impdefAsNop
bool impdefAsNop
If true, accesses to IMPLEMENTATION DEFINED registers are treated as NOP hence not causing UNDEFINED ...
Definition: isa.hh:110
ArmISA::MISCREG_CNTHVS_TVAL_EL2
@ MISCREG_CNTHVS_TVAL_EL2
Definition: miscregs.hh:782
ArmISA::MISCREG_AFSR0_EL2
@ MISCREG_AFSR0_EL2
Definition: miscregs.hh:638
ArmISA::ISA::haveLargeAsid64
bool haveLargeAsid64
Definition: isa.hh:94
ArmISA::ISA::haveLSE
bool haveLSE
Definition: isa.hh:97
ArmISA::INTREG_SPX
@ INTREG_SPX
Definition: intregs.hh:160
ArmISA::MISCREG_PRRR_MAIR0
@ MISCREG_PRRR_MAIR0
Definition: miscregs.hh:80
ArmISA::MISCREG_AMAIR_EL1
@ MISCREG_AMAIR_EL1
Definition: miscregs.hh:724
ArmISA::MISCREG_PMSELR
@ MISCREG_PMSELR
Definition: miscregs.hh:352
ArmISA::MISCREG_NMRR_MAIR1_S
@ MISCREG_NMRR_MAIR1_S
Definition: miscregs.hh:85
ArmISA::ISA::assert64
void assert64()
Definition: isa.hh:503
ArmISA::ISA::MiscRegLUTEntryInitializer::userSecureRead
chain userSecureRead(bool v=true) const
Definition: isa.hh:206
ArmISA::ISA::haveTME
bool haveTME
Definition: isa.hh:101
ArmISA::ISA::MiscRegLUTEntryInitializer::exceptUserMode
chain exceptUserMode() const
Definition: isa.hh:435
ArmISA::MISCREG_CONTEXTIDR
@ MISCREG_CONTEXTIDR
Definition: miscregs.hh:395
cp
Definition: cprintf.cc:37
ArmISA::ISA::MiscRegLUTEntryInitializer::privRead
chain privRead(bool v=true) const
Definition: isa.hh:252
ArmISA::MISCREG_USR_S_WR
@ MISCREG_USR_S_WR
Definition: miscregs.hh:1119
FloatRegClass
@ FloatRegClass
Floating-point register.
Definition: reg_class.hh:54
ArmISA::ISA::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: isa.cc:2360
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
ArmISA::IntRegHypMap
const IntRegMap IntRegHypMap
Definition: intregs.hh:333
ArmISA::ISA::MiscRegLUTEntryInitializer::privNonSecureRead
chain privNonSecureRead(bool v=true) const
Definition: isa.hh:221
ArmISA::MISCREG_MON_NS0_RD
@ MISCREG_MON_NS0_RD
Definition: miscregs.hh:1136
ArmISA::MISCREG_ESR_EL2
@ MISCREG_ESR_EL2
Definition: miscregs.hh:640
ArmISA::ISA::haveSVE
bool haveSVE
Definition: isa.hh:96
ArmISA::MODE_EL1H
@ MODE_EL1H
Definition: types.hh:631
ArmISA::ISA::dummyDevice
DummyISADevice dummyDevice
Dummy device for to handle non-existing ISA devices.
Definition: isa.hh:77
ArmISA::IntRegUsrMap
const IntRegMap IntRegUsrMap
Definition: intregs.hh:315
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HRead
chain hypE2HRead(bool v=true) const
Definition: isa.hh:265
ArmISA::MISCREG_AMAIR_EL2
@ MISCREG_AMAIR_EL2
Definition: miscregs.hh:727
sim_object.hh
ArmISA::ISA::MiscRegLUTEntry::reset
uint64_t reset() const
Definition: isa.hh:129
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HNonSecureWrite
chain hypE2HNonSecureWrite(bool v=true) const
Definition: isa.hh:274
ArmISA::MISCREG_CONTEXTIDR_EL2
@ MISCREG_CONTEXTIDR_EL2
Definition: miscregs.hh:813
ArmISA::MISCREG_AFSR0_EL1
@ MISCREG_AFSR0_EL1
Definition: miscregs.hh:631
ArmISA::ISA::MiscRegLUTEntryInitializer::unverifiable
chain unverifiable(bool v=true) const
Definition: isa.hh:174
ArmISA::ISA::haveCrypto
bool haveCrypto
Definition: isa.hh:93
BaseISA::tc
ThreadContext * tc
Definition: isa.hh:52
ArmISA::ISA::MiscRegLUTEntryInitializer
Definition: isa.hh:141
ArmISA::ExceptionLevel
ExceptionLevel
Definition: types.hh:621
ArmISA::ISA::MiscRegLUTEntryInitializer::monNonSecureWrite
chain monNonSecureWrite(bool v=true) const
Definition: isa.hh:356
ArmISA::MISCREG_PRRR_MAIR0_S
@ MISCREG_PRRR_MAIR0_S
Definition: miscregs.hh:82
MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:240
ArmISA::DummyISADevice
Dummy device that prints a warning when it is accessed.
Definition: isa_device.hh:94
ArmISA::ISA::snsBankedIndex64
int snsBankedIndex64(MiscRegIndex reg, bool ns) const
Definition: isa.hh:821
ArmISA::MISCREG_VBAR_EL1
@ MISCREG_VBAR_EL1
Definition: miscregs.hh:732
ArmISA::ISA::MiscRegLUTEntryInitializer::banked
chain banked(bool v=true) const
Definition: isa.hh:186
traits.hh
ArmISA::flattenIntRegModeIndex
static int flattenIntRegModeIndex(int reg)
Definition: intregs.hh:469
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HNonSecureRead
chain hypE2HNonSecureRead(bool v=true) const
Definition: isa.hh:261
ArmISA::MISCREG_SPSR_IRQ
@ MISCREG_SPSR_IRQ
Definition: miscregs.hh:60
ArmISA::MISCREG_TCR_EL1
@ MISCREG_TCR_EL1
Definition: miscregs.hh:597
ArmISA::mode
Bitfield< 4, 0 > mode
Definition: miscregs_types.hh:70
RenameMode::init
static Enums::VecRegRenameMode init(const BaseISA *)
Definition: traits.hh:55
ArmISA::el
Bitfield< 3, 2 > el
Definition: miscregs_types.hh:69
ArmISA::ISA::getGICv3CPUInterface
BaseISADevice & getGICv3CPUInterface()
Definition: isa.cc:2300
ArmISA::MISCREG_UNVERIFIABLE
@ MISCREG_UNVERIFIABLE
Definition: miscregs.hh:1097
RenameMode< ArmISA::ISA >::init
static Enums::VecRegRenameMode init(const BaseISA *isa)
Definition: isa.hh:909
ArmISA::MISCREG_SPSR_ABT
@ MISCREG_SPSR_ABT
Definition: miscregs.hh:63
ArmISA::ISA::MiscRegLUTEntryInitializer::privSecureWrite
chain privSecureWrite(bool v=true) const
Definition: isa.hh:238
ArmISA::MISCREG_TTBCR
@ MISCREG_TTBCR
Definition: miscregs.hh:256
ArmISA::ISA::MiscRegLUTEntryInitializer::hypNonSecureWrite
chain hypNonSecureWrite(bool v=true) const
Definition: isa.hh:306
ArmISA::ISA::intRegMap
const IntRegIndex * intRegMap
Definition: isa.hh:458
ArmISA::opModeToEL
static ExceptionLevel opModeToEL(OperatingMode mode)
Definition: types.hh:736
ArmISA::MISCREG_CNTHVS_CVAL_EL2
@ MISCREG_CNTHVS_CVAL_EL2
Definition: miscregs.hh:781
ArmISA::MISCREG_FAR_EL1
@ MISCREG_FAR_EL1
Definition: miscregs.hh:645
ArmISA::ISA::MiscRegLUTEntryInitializer::unimplemented
chain unimplemented() const
Definition: isa.hh:171
ArmISA::MODE_SVC
@ MODE_SVC
Definition: types.hh:639
ArmISA::ISA::MiscRegLUTEntry::_raz
uint64_t _raz
Definition: isa.hh:123
ArmISA::ISA::flattenRegId
RegId flattenRegId(const RegId &regId) const
Definition: isa.hh:539
ArmISA::ISA::selfDebug
SelfDebug * selfDebug
Definition: isa.hh:114
ArmISA::MISCREG_TTBR0_EL2
@ MISCREG_TTBR0_EL2
Definition: miscregs.hh:599
ArmISA::INTREG_SP0
@ INTREG_SP0
Definition: intregs.hh:118
ArmISA::ISA::MiscRegLUTEntry::rao
uint64_t rao() const
Definition: isa.hh:133
ArmISA::ISA::MiscRegLUTEntryInitializer::hypRead
chain hypRead(bool v=true) const
Definition: isa.hh:296
ArmISA::ISA::MiscRegLUTEntryInitializer::monNonSecureRead
chain monNonSecureRead(bool v=true) const
Definition: isa.hh:351
std::pair< int, int >
VecPredRegClass
@ VecPredRegClass
Definition: reg_class.hh:59
ArmISA::MODE_FIQ
@ MODE_FIQ
Definition: types.hh:637
ArmISA::IntRegMonMap
const IntRegMap IntRegMonMap
Definition: intregs.hh:369
ArmISA::ISA::MiscRegLUTEntryInitializer::highest
chain highest(ArmSystem *const sys) const
Definition: isa.cc:2494
ArmISA::MISCREG_HCR_EL2
@ MISCREG_HCR_EL2
Definition: miscregs.hh:582
ArmISA::MODE_EL2T
@ MODE_EL2T
Definition: types.hh:632
ArmISA::ISA::setMiscRegNoEffect
void setMiscRegNoEffect(int misc_reg, RegVal val)
Definition: isa.cc:811
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
ArmISA::MISCREG_PRI_S_WR
@ MISCREG_PRI_S_WR
Definition: miscregs.hh:1124
ArmISA::MISCREG_TTBR1_EL1
@ MISCREG_TTBR1_EL1
Definition: miscregs.hh:595
ArmISA::MISCREG_SPSR
@ MISCREG_SPSR
Definition: miscregs.hh:58
ArmISA::EL1
@ EL1
Definition: types.hh:623
ArmISA::IntRegAbtMap
const IntRegMap IntRegAbtMap
Definition: intregs.hh:387
ArmISA::MISCREG_WARN_NOT_FAIL
@ MISCREG_WARN_NOT_FAIL
Definition: miscregs.hh:1099
ArmISA::ISA::clear64
void clear64(const ArmISAParams &p)
Definition: isa.cc:270
ArmISA::ISA::flattenFloatIndex
int flattenFloatIndex(int reg) const
Definition: isa.hh:595
ArmISA::ISA::MiscRegLUTEntryInitializer::hypE2HWrite
chain hypE2HWrite(bool v=true) const
Definition: isa.hh:278
IntRegClass
@ IntRegClass
Integer register.
Definition: reg_class.hh:53
ArmISA::ISA::MiscRegLUTEntryInitializer::rao
chain rao(uint64_t mask) const
Definition: isa.hh:163
ArmISA::MISCREG_CNTHP_TVAL_EL2
@ MISCREG_CNTHP_TVAL_EL2
Definition: miscregs.hh:772
ArmISA::ISA::flattenIntIndex
int flattenIntIndex(int reg) const
Definition: isa.hh:563
ArmISA::ISA::MiscRegLUTEntryInitializer::monSecure
chain monSecure(bool v=true) const
Definition: isa.hh:368
ArmISA::ISA::afterStartup
bool afterStartup
Definition: isa.hh:112
ArmISA::ISA::MiscRegLUTEntryInitializer::hyp
chain hyp(bool v=true) const
Definition: isa.hh:323
ArmISA::ISA::updateRegMap
void updateRegMap(CPSR cpsr)
Definition: isa.hh:461
utility.hh
CCRegClass
@ CCRegClass
Condition-code register.
Definition: reg_class.hh:60
ArmISA::MISCREG_NMRR
@ MISCREG_NMRR
Definition: miscregs.hh:371
ArmISA::ISA::initID32
void initID32(const ArmISAParams &p)
Definition: isa.cc:319
ArmISA::ISA::MiscRegLUTEntryInitializer::userNonSecureRead
chain userNonSecureRead(bool v=true) const
Definition: isa.hh:198
ArmISA::e
Bitfield< 9 > e
Definition: miscregs_types.hh:61
ArmISA::ISA::getGenericTimer
BaseISADevice & getGenericTimer()
Definition: isa.cc:2279
ArmISA::ISA::flattenVecIndex
int flattenVecIndex(int reg) const
Definition: isa.hh:602
ArmISA::ISA::getSelfDebug
SelfDebug * getSelfDebug() const
Definition: isa.hh:521
ArmISA::MISCREG_CNTHCTL_EL2
@ MISCREG_CNTHCTL_EL2
Definition: miscregs.hh:769
ArmISA::MISCREG_MON_NS1_WR
@ MISCREG_MON_NS1_WR
Definition: miscregs.hh:1140
ArmISA::ISA::haveVirtualization
bool haveVirtualization
Definition: isa.hh:92
ArmISA::ISA::MiscRegLUTEntryInitializer::writes
chain writes(bool v) const
Definition: isa.hh:425
ArmISA::MISCREG_PRI_NS_RD
@ MISCREG_PRI_NS_RD
Definition: miscregs.hh:1121
ArmISA::MODE_EL3T
@ MODE_EL3T
Definition: types.hh:634
ArmISA::ISA::MiscRegLUTEntryInitializer::chain
const typedef MiscRegLUTEntryInitializer & chain
Definition: isa.hh:144
ArmISA::ISA::MiscRegLUTEntryInitializer::hypSecureRead
chain hypSecureRead(bool v=true) const
Definition: isa.hh:288
ArmISA::MISCREG_PRRR
@ MISCREG_PRRR
Definition: miscregs.hh:365
ArmSystem
Definition: system.hh:59
miscregs.hh
ArmISA::u
Bitfield< 22 > u
Definition: miscregs_types.hh:348
ArmISA::MISCREG_SCR_EL3
@ MISCREG_SCR_EL3
Definition: miscregs.hh:589
ArmISA::MISCREG_CNTHVS_CTL_EL2
@ MISCREG_CNTHVS_CTL_EL2
Definition: miscregs.hh:780
isa.hh
ArmISA::ISA::haveSecurity
bool haveSecurity
Definition: isa.hh:90
ArmISA::MISCREG_CPTR_EL2
@ MISCREG_CPTR_EL2
Definition: miscregs.hh:584
ArmISA::MISCREG_BANKED_CHILD
@ MISCREG_BANKED_CHILD
Definition: miscregs.hh:1110
ArmISA::MISCREG_SPSR_MON
@ MISCREG_SPSR_MON
Definition: miscregs.hh:62
ArmISA::MODE_IRQ
@ MODE_IRQ
Definition: types.hh:638
ArmISA::MODE_ABORT
@ MODE_ABORT
Definition: types.hh:641
MiscRegClass
@ MiscRegClass
Control (misc) register.
Definition: reg_class.hh:61
VecRegClass
@ VecRegClass
Vector Register.
Definition: reg_class.hh:56
ArmISA::MISCREG_PMCCFILTR
@ MISCREG_PMCCFILTR
Definition: miscregs.hh:357
ArmISA::ISA::MiscRegLUTEntryInitializer::raz
chain raz(uint64_t mask) const
Definition: isa.hh:159
ArmISA::MISCREG_MAIR1
@ MISCREG_MAIR1
Definition: miscregs.hh:374
ArmISA::NUM_ARCH_INTREGS
@ NUM_ARCH_INTREGS
Definition: intregs.hh:124
ArmISA::INTREG_SP3
@ INTREG_SP3
Definition: intregs.hh:121
ArmISA::MISCREG_MUTEX
@ MISCREG_MUTEX
Definition: miscregs.hh:1102
ArmISA::MISCREG_CPSR
@ MISCREG_CPSR
Definition: miscregs.hh:57
ArmISA::MISCREG_CNTHV_CTL_EL2
@ MISCREG_CNTHV_CTL_EL2
Definition: miscregs.hh:777
ArmISA::MISCREG_USR_NS_RD
@ MISCREG_USR_NS_RD
Definition: miscregs.hh:1116
ArmISA::MISCREG_CNTHP_CVAL_EL2
@ MISCREG_CNTHP_CVAL_EL2
Definition: miscregs.hh:771
ArmISA::ISA::physAddrRange
uint8_t physAddrRange
Definition: isa.hh:95
ArmISA::IntRegFiqMap
const IntRegMap IntRegFiqMap
Definition: intregs.hh:441
ArmISA::MISCREG_AFSR1_EL1
@ MISCREG_AFSR1_EL1
Definition: miscregs.hh:633
ArmISA::ISA::inUserMode
bool inUserMode() const override
Definition: isa.hh:897
ArmISA::ISA::MiscRegLUTEntryInitializer::monE2HWrite
chain monE2HWrite(bool v=true) const
Definition: isa.hh:332
ArmISA::ISA::pmu
BaseISADevice * pmu
Definition: isa.hh:80
MipsISA::PCState
GenericISA::DelaySlotPCState< MachInst > PCState
Definition: types.hh:41
registers.hh
ArmISA::MISCREG_USR_S_RD
@ MISCREG_USR_S_RD
Definition: miscregs.hh:1118
ArmISA::NUM_INTREGS
@ NUM_INTREGS
Definition: intregs.hh:123
ArmISA::ISA::MiscRegLUTEntryInitializer::warnNotFail
chain warnNotFail(bool v=true) const
Definition: isa.hh:178
ArmISA::MISCREG_MAIR_EL2
@ MISCREG_MAIR_EL2
Definition: miscregs.hh:726
ArmISA::MISCREG_PRI_NS_WR
@ MISCREG_PRI_NS_WR
Definition: miscregs.hh:1122
ArmISA::ISA::MiscRegLUTEntryInitializer::privNonSecure
chain privNonSecure(bool v=true) const
Definition: isa.hh:229
ArmISA::ISA::MiscRegLUTEntryInitializer::implemented
chain implemented(bool v=true) const
Definition: isa.hh:167
ArmISA::ISA::MiscRegLUTEntryInitializer::hypNonSecureRead
chain hypNonSecureRead(bool v=true) const
Definition: isa.hh:292
ArmISA::MISCREG_NMRR_MAIR1_NS
@ MISCREG_NMRR_MAIR1_NS
Definition: miscregs.hh:84
ArmISA::MISCREG_PMXEVTYPER_PMCCFILTR
@ MISCREG_PMXEVTYPER_PMCCFILTR
Definition: miscregs.hh:86
ArmISA::MISCREG_SPSR_SVC
@ MISCREG_SPSR_SVC
Definition: miscregs.hh:61
ArmISA::MISCREG_MON_NS1_RD
@ MISCREG_MON_NS1_RD
Definition: miscregs.hh:1139
ArmISA::MiscRegIndex
MiscRegIndex
Definition: miscregs.hh:56
ArmISA::ISA::initID64
void initID64(const ArmISAParams &p)
Definition: isa.cc:357
ArmISA::ISA::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: isa.cc:2367
ArmISA::ISA::MiscRegLUTEntryInitializer::bankedChild
chain bankedChild(bool v=true) const
Definition: isa.hh:194
ArmISA::IntRegIrqMap
const IntRegMap IntRegIrqMap
Definition: intregs.hh:423
ArmISA::MISCREG_HYP_E2H_NS_WR
@ MISCREG_HYP_E2H_NS_WR
Definition: miscregs.hh:1132
ArmISA::ISA::MiscRegLUTEntryInitializer::privNonSecureWrite
chain privNonSecureWrite(bool v=true) const
Definition: isa.hh:225
ArmISA::ISA::ISA
ISA(const Params &p)
Definition: isa.cc:63
ArmISA::ISA::InitReg
const MiscRegLUTEntryInitializer InitReg(uint32_t reg)
Definition: isa.hh:450
CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:64
ArmISA::MISCREG_MAIR0
@ MISCREG_MAIR0
Definition: miscregs.hh:368
ArmISA::MODE_MON
@ MODE_MON
Definition: types.hh:640
ArmISA::MISCREG_MAIR_EL1
@ MISCREG_MAIR_EL1
Definition: miscregs.hh:722
ArmISA::ISA::startup
void startup() override
startup() is the final initialization call before simulation.
Definition: isa.cc:440
ArmISA::ISA::readMiscReg
RegVal readMiscReg(int misc_reg)
Definition: isa.cc:509
EventManager
Definition: eventq.hh:984
ArmISA::MISCREG_CNTHV_CVAL_EL2
@ MISCREG_CNTHV_CVAL_EL2
Definition: miscregs.hh:778
ArmISA::ISA::MiscRegLUTEntryInitializer::mon
chain mon(bool v=true) const
Definition: isa.hh:361
RegId::index
const RegIndex & index() const
Index accessors.
Definition: reg_class.hh:171
ArmISA::ISA::addressTranslation64
void addressTranslation64(TLB::ArmTranslationType tran_type, BaseTLB::Mode mode, Request::Flags flags, RegVal val)
Definition: isa.cc:2376
ArmISA::ISA::MiscRegLUTEntryInitializer::entry
struct MiscRegLUTEntry & entry
Definition: isa.hh:142
ArmISA::MISCREG_TTBR1_EL2
@ MISCREG_TTBR1_EL2
Definition: miscregs.hh:816
ArmISA::ISA::getCurSveVecLenInBits
unsigned getCurSveVecLenInBits() const
Definition: isa.cc:2307
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
self_debug.hh
ArmISA::MISCREG_CPACR_EL1
@ MISCREG_CPACR_EL1
Definition: miscregs.hh:578
ArmISA::ISA::MiscRegLUTEntryInitializer::monSecureWrite
chain monSecureWrite(bool v=true) const
Definition: isa.hh:346
ArmISA::MISCREG_CNTP_CTL_EL0
@ MISCREG_CNTP_CTL_EL0
Definition: miscregs.hh:752
ArmISA::MODE_USER
@ MODE_USER
Definition: types.hh:636
ArmISA::ISA::MiscRegLUTEntryInitializer::priv
chain priv(bool v=true) const
Definition: isa.hh:247
ArmISA::MISCREG_FAR_EL2
@ MISCREG_FAR_EL2
Definition: miscregs.hh:647
ArmISA::INTREG_SP1
@ INTREG_SP1
Definition: intregs.hh:119
ArmISA::MISCREG_SPSR_EL3
@ MISCREG_SPSR_EL3
Definition: miscregs.hh:628
ArmISA::IntRegSvcMap
const IntRegMap IntRegSvcMap
Definition: intregs.hh:351
ArmISA::inUserMode
static bool inUserMode(CPSR cpsr)
Definition: utility.hh:108
CheckpointIn
Definition: serialize.hh:68
ArmISA::ISA::havePAN
bool havePAN
Definition: isa.hh:99
MipsISA::l
Bitfield< 5 > l
Definition: pra_constants.hh:320
ArmISA::ISA::MiscRegLUTEntryInitializer::privSecure
chain privSecure(bool v=true) const
Definition: isa.hh:242
ArmISA::NumMiscRegs
const int NumMiscRegs
Definition: registers.hh:77
RegId::classValue
const RegClass & classValue() const
Class accessor.
Definition: reg_class.hh:199
ArmISA::ISA::MiscRegLUTEntryInitializer::MiscRegLUTEntryInitializer
MiscRegLUTEntryInitializer(struct MiscRegLUTEntry &e, std::bitset< NUM_MISCREG_INFOS > &i)
Definition: isa.hh:440
ArmISA::MISCREG_SCR
@ MISCREG_SCR
Definition: miscregs.hh:239
ArmISA::ISA::MiscRegLUTEntryInitializer::secure
chain secure(bool v=true) const
Definition: isa.hh:406
RenameMode< ArmISA::ISA >::mode
static Enums::VecRegRenameMode mode(const ArmISA::PCState &pc)
Definition: isa.hh:917
ArmISA::MISCREG_BANKED
@ MISCREG_BANKED
Definition: miscregs.hh:1104
ArmISA::MODE_EL2H
@ MODE_EL2H
Definition: types.hh:633
BaseISA
Definition: isa.hh:47
ArmISA::MISCREG_SPSR_EL2
@ MISCREG_SPSR_EL2
Definition: miscregs.hh:621
ArmISA::miscRegInfo
std::bitset< NUM_MISCREG_INFOS > miscRegInfo[NUM_MISCREGS]
Definition: miscregs.cc:3394
ArmISA::MISCREG_SCTLR_EL2
@ MISCREG_SCTLR_EL2
Definition: miscregs.hh:580
ArmISA::ISA::MiscRegLUTEntry::_res0
uint64_t _res0
Definition: isa.hh:121
ArmISA::ISA::highestELIs64
bool highestELIs64
Definition: isa.hh:89
ArmISA::MISCREG_SPSR_FIQ
@ MISCREG_SPSR_FIQ
Definition: miscregs.hh:59
ArmISA::v
Bitfield< 28 > v
Definition: miscregs_types.hh:51
ArmISA::ISA::_decoderFlavor
const Enums::DecoderFlavor _decoderFlavor
Definition: isa.hh:73
ArmISA::ISA::flattenVecElemIndex
int flattenVecElemIndex(int reg) const
Definition: isa.hh:609
ArmISA::MISCREG_HYP_NS_RD
@ MISCREG_HYP_NS_RD
Definition: miscregs.hh:1126
RegVal
uint64_t RegVal
Definition: types.hh:174
VecRegContainer
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
Definition: vec_reg.hh:156
ArmISA::mask
Bitfield< 28, 24 > mask
Definition: miscregs_types.hh:711
ArmISA::MISCREG_SCTLR_EL1
@ MISCREG_SCTLR_EL1
Definition: miscregs.hh:575
ArmISA::ISA::lookUpMiscReg
static std::vector< struct MiscRegLUTEntry > lookUpMiscReg
Metadata table accessible via the value of the register.
Definition: isa.hh:139
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:171
RenameMode< ArmISA::ISA >::equalsInit
static bool equalsInit(const BaseISA *isa1, const BaseISA *isa2)
Definition: isa.hh:927
ArmISA::ISA::flattenVecPredIndex
int flattenVecPredIndex(int reg) const
Definition: isa.hh:616
ArmISA::ISA::PARAMS
PARAMS(ArmISA)
ArmISA::ISA::getCurSveVecLenInBitsAtReset
unsigned getCurSveVecLenInBitsAtReset() const
Definition: isa.hh:853
ArmISA::ISA::MiscRegLUTEntryInitializer::nonSecure
chain nonSecure(bool v=true) const
Definition: isa.hh:395
ArmISA::ISA::MiscRegLUTEntryInitializer::userNonSecureWrite
chain userNonSecureWrite(bool v=true) const
Definition: isa.hh:202
ArmISA::MISCREG_SPSR_EL1
@ MISCREG_SPSR_EL1
Definition: miscregs.hh:608
ArmISA::INTREG_SP2
@ INTREG_SP2
Definition: intregs.hh:120

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