2 * Copyright (c) 2010-2013, 2015-2018 ARM Limited
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.
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 #include "arch/arm/miscregs.hh"
46 #include "arch/arm/isa.hh"
47 #include "base/logging.hh"
48 #include "cpu/thread_context.hh"
49 #include "sim/full_system.hh"
55 decodeCP14Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
65 return MISCREG_DBGDIDR
;
67 return MISCREG_DBGDSCRint
;
91 return MISCREG_TEEHBR
;
101 return MISCREG_JOSCR
;
123 // If we get here then it must be a register that we haven't implemented
124 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
125 crn
, opc1
, crm
, opc2
);
126 return MISCREG_CP14_UNIMPL
;
132 decodeCP15Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
144 return MISCREG_TCMTR
;
146 return MISCREG_TLBTR
;
148 return MISCREG_MPIDR
;
150 return MISCREG_REVIDR
;
158 return MISCREG_ID_PFR0
;
160 return MISCREG_ID_PFR1
;
162 return MISCREG_ID_DFR0
;
164 return MISCREG_ID_AFR0
;
166 return MISCREG_ID_MMFR0
;
168 return MISCREG_ID_MMFR1
;
170 return MISCREG_ID_MMFR2
;
172 return MISCREG_ID_MMFR3
;
178 return MISCREG_ID_ISAR0
;
180 return MISCREG_ID_ISAR1
;
182 return MISCREG_ID_ISAR2
;
184 return MISCREG_ID_ISAR3
;
186 return MISCREG_ID_ISAR4
;
188 return MISCREG_ID_ISAR5
;
191 return MISCREG_RAZ
; // read as zero
195 return MISCREG_RAZ
; // read as zero
202 return MISCREG_CCSIDR
;
204 return MISCREG_CLIDR
;
211 if (crm
== 0 && opc2
== 0) {
212 return MISCREG_CSSELR
;
218 return MISCREG_VPIDR
;
220 return MISCREG_VMPIDR
;
230 return MISCREG_SCTLR
;
232 return MISCREG_ACTLR
;
234 return MISCREG_CPACR
;
236 } else if (crm
== 1) {
243 return MISCREG_NSACR
;
246 } else if (opc1
== 4) {
249 return MISCREG_HSCTLR
;
251 return MISCREG_HACTLR
;
252 } else if (crm
== 1) {
259 return MISCREG_HCPTR
;
269 if (opc1
== 0 && crm
== 0) {
272 return MISCREG_TTBR0
;
274 return MISCREG_TTBR1
;
276 return MISCREG_TTBCR
;
278 } else if (opc1
== 4) {
279 if (crm
== 0 && opc2
== 2)
281 else if (crm
== 1 && opc2
== 2)
286 if (opc1
== 0 && crm
== 0 && opc2
== 0) {
295 } else if (opc2
== 1) {
298 } else if (crm
== 1) {
300 return MISCREG_ADFSR
;
301 } else if (opc2
== 1) {
302 return MISCREG_AIFSR
;
305 } else if (opc1
== 4) {
308 return MISCREG_HADFSR
;
310 return MISCREG_HAIFSR
;
311 } else if (crm
== 2 && opc2
== 0) {
317 if (opc1
== 0 && crm
== 0) {
324 } else if (opc1
== 4 && crm
== 0) {
327 return MISCREG_HDFAR
;
329 return MISCREG_HIFAR
;
331 return MISCREG_HPFAR
;
346 return MISCREG_ICIALLUIS
;
348 return MISCREG_BPIALLIS
;
359 return MISCREG_ICIALLU
;
361 return MISCREG_ICIMVAU
;
363 return MISCREG_CP15ISB
;
365 return MISCREG_BPIALL
;
367 return MISCREG_BPIMVA
;
372 return MISCREG_DCIMVAC
;
373 } else if (opc2
== 2) {
374 return MISCREG_DCISW
;
380 return MISCREG_ATS1CPR
;
382 return MISCREG_ATS1CPW
;
384 return MISCREG_ATS1CUR
;
386 return MISCREG_ATS1CUW
;
388 return MISCREG_ATS12NSOPR
;
390 return MISCREG_ATS12NSOPW
;
392 return MISCREG_ATS12NSOUR
;
394 return MISCREG_ATS12NSOUW
;
400 return MISCREG_DCCMVAC
;
402 return MISCREG_DCCSW
;
404 return MISCREG_CP15DSB
;
406 return MISCREG_CP15DMB
;
411 return MISCREG_DCCMVAU
;
421 return MISCREG_DCCIMVAC
;
422 } else if (opc2
== 2) {
423 return MISCREG_DCCISW
;
427 } else if (opc1
== 4 && crm
== 8) {
429 return MISCREG_ATS1HR
;
431 return MISCREG_ATS1HW
;
440 return MISCREG_TLBIALLIS
;
442 return MISCREG_TLBIMVAIS
;
444 return MISCREG_TLBIASIDIS
;
446 return MISCREG_TLBIMVAAIS
;
448 return MISCREG_TLBIMVALIS
;
450 return MISCREG_TLBIMVAALIS
;
456 return MISCREG_ITLBIALL
;
458 return MISCREG_ITLBIMVA
;
460 return MISCREG_ITLBIASID
;
466 return MISCREG_DTLBIALL
;
468 return MISCREG_DTLBIMVA
;
470 return MISCREG_DTLBIASID
;
476 return MISCREG_TLBIALL
;
478 return MISCREG_TLBIMVA
;
480 return MISCREG_TLBIASID
;
482 return MISCREG_TLBIMVAA
;
484 return MISCREG_TLBIMVAL
;
486 return MISCREG_TLBIMVAAL
;
490 } else if (opc1
== 4) {
494 return MISCREG_TLBIIPAS2IS
;
496 return MISCREG_TLBIIPAS2LIS
;
498 } else if (crm
== 3) {
501 return MISCREG_TLBIALLHIS
;
503 return MISCREG_TLBIMVAHIS
;
505 return MISCREG_TLBIALLNSNHIS
;
507 return MISCREG_TLBIMVALHIS
;
509 } else if (crm
== 4) {
512 return MISCREG_TLBIIPAS2
;
514 return MISCREG_TLBIIPAS2L
;
516 } else if (crm
== 7) {
519 return MISCREG_TLBIALLH
;
521 return MISCREG_TLBIMVAH
;
523 return MISCREG_TLBIALLNSNH
;
525 return MISCREG_TLBIMVALH
;
531 // Every cop register with CRn = 9 and CRm in
532 // {0-2}, {5-8} is implementation defined regardless
542 return MISCREG_IMPDEF_UNIMPL
;
551 return MISCREG_PMCNTENSET
;
553 return MISCREG_PMCNTENCLR
;
555 return MISCREG_PMOVSR
;
557 return MISCREG_PMSWINC
;
559 return MISCREG_PMSELR
;
561 return MISCREG_PMCEID0
;
563 return MISCREG_PMCEID1
;
569 return MISCREG_PMCCNTR
;
571 // Selector is PMSELR.SEL
572 return MISCREG_PMXEVTYPER_PMCCFILTR
;
574 return MISCREG_PMXEVCNTR
;
580 return MISCREG_PMUSERENR
;
582 return MISCREG_PMINTENSET
;
584 return MISCREG_PMINTENCLR
;
586 return MISCREG_PMOVSSET
;
590 } else if (opc1
== 1) {
594 case 2: // L2CTLR, L2 Control Register
595 return MISCREG_L2CTLR
;
597 return MISCREG_L2ECTLR
;
606 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
608 return MISCREG_IMPDEF_UNIMPL
;
609 } else if (crm
== 2) { // TEX Remap Registers
611 // Selector is TTBCR.EAE
612 return MISCREG_PRRR_MAIR0
;
613 } else if (opc2
== 1) {
614 // Selector is TTBCR.EAE
615 return MISCREG_NMRR_MAIR1
;
617 } else if (crm
== 3) {
619 return MISCREG_AMAIR0
;
620 } else if (opc2
== 1) {
621 return MISCREG_AMAIR1
;
624 } else if (opc1
== 4) {
625 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
628 return MISCREG_HMAIR0
;
630 return MISCREG_HMAIR1
;
631 } else if (crm
== 3) {
633 return MISCREG_HAMAIR0
;
635 return MISCREG_HAMAIR1
;
652 // Reserved for DMA operations for TCM access
653 return MISCREG_IMPDEF_UNIMPL
;
664 } else if (opc2
== 1) {
665 return MISCREG_MVBAR
;
667 } else if (crm
== 1) {
672 } else if (opc1
== 4) {
673 if (crm
== 0 && opc2
== 0)
674 return MISCREG_HVBAR
;
682 return MISCREG_FCSEIDR
;
684 return MISCREG_CONTEXTIDR
;
686 return MISCREG_TPIDRURW
;
688 return MISCREG_TPIDRURO
;
690 return MISCREG_TPIDRPRW
;
693 } else if (opc1
== 4) {
694 if (crm
== 0 && opc2
== 2)
695 return MISCREG_HTPIDR
;
703 return MISCREG_CNTFRQ
;
707 return MISCREG_CNTKCTL
;
711 return MISCREG_CNTP_TVAL
;
713 return MISCREG_CNTP_CTL
;
717 return MISCREG_CNTV_TVAL
;
719 return MISCREG_CNTV_CTL
;
722 } else if (opc1
== 4) {
723 if (crm
== 1 && opc2
== 0) {
724 return MISCREG_CNTHCTL
;
725 } else if (crm
== 2) {
727 return MISCREG_CNTHP_TVAL
;
729 return MISCREG_CNTHP_CTL
;
734 // Implementation defined
735 return MISCREG_IMPDEF_UNIMPL
;
737 // Unrecognized register
738 return MISCREG_CP15_UNIMPL
;
742 decodeCP15Reg64(unsigned crm
, unsigned opc1
)
748 return MISCREG_TTBR0
;
750 return MISCREG_TTBR1
;
752 return MISCREG_HTTBR
;
754 return MISCREG_VTTBR
;
764 return MISCREG_CNTPCT
;
766 return MISCREG_CNTVCT
;
768 return MISCREG_CNTP_CVAL
;
770 return MISCREG_CNTV_CVAL
;
772 return MISCREG_CNTVOFF
;
774 return MISCREG_CNTHP_CVAL
;
779 return MISCREG_CPUMERRSR
;
781 return MISCREG_L2MERRSR
;
784 // Unrecognized register
785 return MISCREG_CP15_UNIMPL
;
788 std::tuple
<bool, bool>
789 canReadCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
791 bool secure
= !scr
.ns
;
792 bool canRead
= false;
793 bool undefined
= false;
797 canRead
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
798 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
806 canRead
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
807 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
810 canRead
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
811 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
814 canRead
= miscRegInfo
[reg
][MISCREG_HYP_RD
];
819 // can't do permissions checkes on the root of a banked pair of regs
820 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
821 return std::make_tuple(canRead
, undefined
);
824 std::tuple
<bool, bool>
825 canWriteCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
827 bool secure
= !scr
.ns
;
828 bool canWrite
= false;
829 bool undefined
= false;
833 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
834 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
842 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
843 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
846 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
847 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
850 canWrite
= miscRegInfo
[reg
][MISCREG_HYP_WR
];
855 // can't do permissions checkes on the root of a banked pair of regs
856 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
857 return std::make_tuple(canWrite
, undefined
);
861 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
)
863 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
864 return snsBankedIndex(reg
, tc
, scr
.ns
);
868 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
, bool ns
)
870 int reg_as_int
= static_cast<int>(reg
);
871 if (miscRegInfo
[reg
][MISCREG_BANKED
]) {
872 reg_as_int
+= (ArmSystem::haveSecurity(tc
) &&
873 !ArmSystem::highestELIs64(tc
) && !ns
) ? 2 : 1;
880 * If the reg is a child reg of a banked set, then the parent is the last
881 * banked one in the list. This is messy, and the wish is to eventually have
882 * the bitmap replaced with a better data structure. the preUnflatten function
883 * initializes a lookup table to speed up the search for these banked
887 int unflattenResultMiscReg
[NUM_MISCREGS
];
890 preUnflattenMiscReg()
893 for (int i
= 0 ; i
< NUM_MISCREGS
; i
++){
894 if (miscRegInfo
[i
][MISCREG_BANKED
])
896 if (miscRegInfo
[i
][MISCREG_BANKED_CHILD
])
897 unflattenResultMiscReg
[i
] = reg
;
899 unflattenResultMiscReg
[i
] = i
;
900 // if this assert fails, no parent was found, and something is broken
901 assert(unflattenResultMiscReg
[i
] > -1);
906 unflattenMiscReg(int reg
)
908 return unflattenResultMiscReg
[reg
];
912 canReadAArch64SysReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
, ThreadContext
*tc
)
914 // Check for SP_EL0 access while SPSEL == 0
915 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
918 // Check for RVBAR access
919 if (reg
== MISCREG_RVBAR_EL1
) {
920 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
921 if (highest_el
== EL2
|| highest_el
== EL3
)
924 if (reg
== MISCREG_RVBAR_EL2
) {
925 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
926 if (highest_el
== EL3
)
930 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
932 switch (opModeToEL((OperatingMode
) (uint8_t) cpsr
.mode
)) {
934 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
935 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
937 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
938 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
940 return miscRegInfo
[reg
][MISCREG_HYP_RD
];
942 return secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
943 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
945 panic("Invalid exception level");
950 canWriteAArch64SysReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
, ThreadContext
*tc
)
952 // Check for SP_EL0 access while SPSEL == 0
953 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
955 ExceptionLevel el
= opModeToEL((OperatingMode
) (uint8_t) cpsr
.mode
);
956 if (reg
== MISCREG_DAIF
) {
957 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
958 if (el
== EL0
&& !sctlr
.uma
)
961 if (FullSystem
&& reg
== MISCREG_DC_ZVA_Xt
) {
962 // In syscall-emulation mode, this test is skipped and DCZVA is always
964 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
965 if (el
== EL0
&& !sctlr
.dze
)
968 if (reg
== MISCREG_DC_CVAC_Xt
|| reg
== MISCREG_DC_CIVAC_Xt
) {
969 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
970 if (el
== EL0
&& !sctlr
.uci
)
974 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
978 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
979 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
981 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
982 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
984 return miscRegInfo
[reg
][MISCREG_HYP_WR
];
986 return secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
987 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
989 panic("Invalid exception level");
994 decodeAArch64SysReg(unsigned op0
, unsigned op1
,
995 unsigned crn
, unsigned crm
,
1008 return MISCREG_IC_IALLUIS
;
1014 return MISCREG_IC_IALLU
;
1020 return MISCREG_DC_IVAC_Xt
;
1022 return MISCREG_DC_ISW_Xt
;
1028 return MISCREG_AT_S1E1R_Xt
;
1030 return MISCREG_AT_S1E1W_Xt
;
1032 return MISCREG_AT_S1E0R_Xt
;
1034 return MISCREG_AT_S1E0W_Xt
;
1040 return MISCREG_DC_CSW_Xt
;
1046 return MISCREG_DC_CISW_Xt
;
1056 return MISCREG_DC_ZVA_Xt
;
1062 return MISCREG_IC_IVAU_Xt
;
1068 return MISCREG_DC_CVAC_Xt
;
1074 return MISCREG_DC_CVAU_Xt
;
1080 return MISCREG_DC_CIVAC_Xt
;
1090 return MISCREG_AT_S1E2R_Xt
;
1092 return MISCREG_AT_S1E2W_Xt
;
1094 return MISCREG_AT_S12E1R_Xt
;
1096 return MISCREG_AT_S12E1W_Xt
;
1098 return MISCREG_AT_S12E0R_Xt
;
1100 return MISCREG_AT_S12E0W_Xt
;
1110 return MISCREG_AT_S1E3R_Xt
;
1112 return MISCREG_AT_S1E3W_Xt
;
1126 return MISCREG_TLBI_VMALLE1IS
;
1128 return MISCREG_TLBI_VAE1IS_Xt
;
1130 return MISCREG_TLBI_ASIDE1IS_Xt
;
1132 return MISCREG_TLBI_VAAE1IS_Xt
;
1134 return MISCREG_TLBI_VALE1IS_Xt
;
1136 return MISCREG_TLBI_VAALE1IS_Xt
;
1142 return MISCREG_TLBI_VMALLE1
;
1144 return MISCREG_TLBI_VAE1_Xt
;
1146 return MISCREG_TLBI_ASIDE1_Xt
;
1148 return MISCREG_TLBI_VAAE1_Xt
;
1150 return MISCREG_TLBI_VALE1_Xt
;
1152 return MISCREG_TLBI_VAALE1_Xt
;
1162 return MISCREG_TLBI_IPAS2E1IS_Xt
;
1164 return MISCREG_TLBI_IPAS2LE1IS_Xt
;
1170 return MISCREG_TLBI_ALLE2IS
;
1172 return MISCREG_TLBI_VAE2IS_Xt
;
1174 return MISCREG_TLBI_ALLE1IS
;
1176 return MISCREG_TLBI_VALE2IS_Xt
;
1178 return MISCREG_TLBI_VMALLS12E1IS
;
1184 return MISCREG_TLBI_IPAS2E1_Xt
;
1186 return MISCREG_TLBI_IPAS2LE1_Xt
;
1192 return MISCREG_TLBI_ALLE2
;
1194 return MISCREG_TLBI_VAE2_Xt
;
1196 return MISCREG_TLBI_ALLE1
;
1198 return MISCREG_TLBI_VALE2_Xt
;
1200 return MISCREG_TLBI_VMALLS12E1
;
1210 return MISCREG_TLBI_ALLE3IS
;
1212 return MISCREG_TLBI_VAE3IS_Xt
;
1214 return MISCREG_TLBI_VALE3IS_Xt
;
1220 return MISCREG_TLBI_ALLE3
;
1222 return MISCREG_TLBI_VAE3_Xt
;
1224 return MISCREG_TLBI_VALE3_Xt
;
1242 return MISCREG_OSDTRRX_EL1
;
1244 return MISCREG_DBGBVR0_EL1
;
1246 return MISCREG_DBGBCR0_EL1
;
1248 return MISCREG_DBGWVR0_EL1
;
1250 return MISCREG_DBGWCR0_EL1
;
1256 return MISCREG_DBGBVR1_EL1
;
1258 return MISCREG_DBGBCR1_EL1
;
1260 return MISCREG_DBGWVR1_EL1
;
1262 return MISCREG_DBGWCR1_EL1
;
1268 return MISCREG_MDCCINT_EL1
;
1270 return MISCREG_MDSCR_EL1
;
1272 return MISCREG_DBGBVR2_EL1
;
1274 return MISCREG_DBGBCR2_EL1
;
1276 return MISCREG_DBGWVR2_EL1
;
1278 return MISCREG_DBGWCR2_EL1
;
1284 return MISCREG_OSDTRTX_EL1
;
1286 return MISCREG_DBGBVR3_EL1
;
1288 return MISCREG_DBGBCR3_EL1
;
1290 return MISCREG_DBGWVR3_EL1
;
1292 return MISCREG_DBGWCR3_EL1
;
1298 return MISCREG_DBGBVR4_EL1
;
1300 return MISCREG_DBGBCR4_EL1
;
1306 return MISCREG_DBGBVR5_EL1
;
1308 return MISCREG_DBGBCR5_EL1
;
1314 return MISCREG_OSECCR_EL1
;
1324 return MISCREG_TEECR32_EL1
;
1334 return MISCREG_MDCCSR_EL0
;
1340 return MISCREG_MDDTR_EL0
;
1346 return MISCREG_MDDTRRX_EL0
;
1356 return MISCREG_DBGVCR32_EL2
;
1370 return MISCREG_MDRAR_EL1
;
1372 return MISCREG_OSLAR_EL1
;
1378 return MISCREG_OSLSR_EL1
;
1384 return MISCREG_OSDLR_EL1
;
1390 return MISCREG_DBGPRCR_EL1
;
1400 return MISCREG_TEEHBR32_EL1
;
1414 return MISCREG_DBGCLAIMSET_EL1
;
1420 return MISCREG_DBGCLAIMCLR_EL1
;
1426 return MISCREG_DBGAUTHSTATUS_EL1
;
1444 return MISCREG_MIDR_EL1
;
1446 return MISCREG_MPIDR_EL1
;
1448 return MISCREG_REVIDR_EL1
;
1454 return MISCREG_ID_PFR0_EL1
;
1456 return MISCREG_ID_PFR1_EL1
;
1458 return MISCREG_ID_DFR0_EL1
;
1460 return MISCREG_ID_AFR0_EL1
;
1462 return MISCREG_ID_MMFR0_EL1
;
1464 return MISCREG_ID_MMFR1_EL1
;
1466 return MISCREG_ID_MMFR2_EL1
;
1468 return MISCREG_ID_MMFR3_EL1
;
1474 return MISCREG_ID_ISAR0_EL1
;
1476 return MISCREG_ID_ISAR1_EL1
;
1478 return MISCREG_ID_ISAR2_EL1
;
1480 return MISCREG_ID_ISAR3_EL1
;
1482 return MISCREG_ID_ISAR4_EL1
;
1484 return MISCREG_ID_ISAR5_EL1
;
1490 return MISCREG_MVFR0_EL1
;
1492 return MISCREG_MVFR1_EL1
;
1494 return MISCREG_MVFR2_EL1
;
1502 return MISCREG_ID_AA64PFR0_EL1
;
1504 return MISCREG_ID_AA64PFR1_EL1
;
1512 return MISCREG_ID_AA64DFR0_EL1
;
1514 return MISCREG_ID_AA64DFR1_EL1
;
1516 return MISCREG_ID_AA64AFR0_EL1
;
1518 return MISCREG_ID_AA64AFR1_EL1
;
1529 return MISCREG_ID_AA64ISAR0_EL1
;
1531 return MISCREG_ID_AA64ISAR1_EL1
;
1539 return MISCREG_ID_AA64MMFR0_EL1
;
1541 return MISCREG_ID_AA64MMFR1_EL1
;
1553 return MISCREG_CCSIDR_EL1
;
1555 return MISCREG_CLIDR_EL1
;
1557 return MISCREG_AIDR_EL1
;
1567 return MISCREG_CSSELR_EL1
;
1577 return MISCREG_CTR_EL0
;
1579 return MISCREG_DCZID_EL0
;
1589 return MISCREG_VPIDR_EL2
;
1591 return MISCREG_VMPIDR_EL2
;
1605 return MISCREG_SCTLR_EL1
;
1607 return MISCREG_ACTLR_EL1
;
1609 return MISCREG_CPACR_EL1
;
1619 return MISCREG_SCTLR_EL2
;
1621 return MISCREG_ACTLR_EL2
;
1627 return MISCREG_HCR_EL2
;
1629 return MISCREG_MDCR_EL2
;
1631 return MISCREG_CPTR_EL2
;
1633 return MISCREG_HSTR_EL2
;
1635 return MISCREG_HACR_EL2
;
1645 return MISCREG_SCTLR_EL3
;
1647 return MISCREG_ACTLR_EL3
;
1653 return MISCREG_SCR_EL3
;
1655 return MISCREG_SDER32_EL3
;
1657 return MISCREG_CPTR_EL3
;
1663 return MISCREG_MDCR_EL3
;
1677 return MISCREG_TTBR0_EL1
;
1679 return MISCREG_TTBR1_EL1
;
1681 return MISCREG_TCR_EL1
;
1691 return MISCREG_TTBR0_EL2
;
1693 return MISCREG_TTBR1_EL2
;
1695 return MISCREG_TCR_EL2
;
1701 return MISCREG_VTTBR_EL2
;
1703 return MISCREG_VTCR_EL2
;
1713 return MISCREG_TTBR0_EL3
;
1715 return MISCREG_TCR_EL3
;
1729 return MISCREG_DACR32_EL2
;
1743 return MISCREG_SPSR_EL1
;
1745 return MISCREG_ELR_EL1
;
1751 return MISCREG_SP_EL0
;
1757 return MISCREG_SPSEL
;
1759 return MISCREG_CURRENTEL
;
1769 return MISCREG_NZCV
;
1771 return MISCREG_DAIF
;
1777 return MISCREG_FPCR
;
1779 return MISCREG_FPSR
;
1785 return MISCREG_DSPSR_EL0
;
1787 return MISCREG_DLR_EL0
;
1797 return MISCREG_SPSR_EL2
;
1799 return MISCREG_ELR_EL2
;
1805 return MISCREG_SP_EL1
;
1811 return MISCREG_SPSR_IRQ_AA64
;
1813 return MISCREG_SPSR_ABT_AA64
;
1815 return MISCREG_SPSR_UND_AA64
;
1817 return MISCREG_SPSR_FIQ_AA64
;
1827 return MISCREG_SPSR_EL3
;
1829 return MISCREG_ELR_EL3
;
1835 return MISCREG_SP_EL2
;
1849 return MISCREG_AFSR0_EL1
;
1851 return MISCREG_AFSR1_EL1
;
1857 return MISCREG_ESR_EL1
;
1863 return MISCREG_ERRIDR_EL1
;
1865 return MISCREG_ERRSELR_EL1
;
1871 return MISCREG_ERXFR_EL1
;
1873 return MISCREG_ERXCTLR_EL1
;
1875 return MISCREG_ERXSTATUS_EL1
;
1877 return MISCREG_ERXADDR_EL1
;
1883 return MISCREG_ERXMISC0_EL1
;
1885 return MISCREG_ERXMISC1_EL1
;
1895 return MISCREG_IFSR32_EL2
;
1901 return MISCREG_AFSR0_EL2
;
1903 return MISCREG_AFSR1_EL2
;
1909 return MISCREG_ESR_EL2
;
1911 return MISCREG_VSESR_EL2
;
1917 return MISCREG_FPEXC32_EL2
;
1927 return MISCREG_AFSR0_EL3
;
1929 return MISCREG_AFSR1_EL3
;
1935 return MISCREG_ESR_EL3
;
1949 return MISCREG_FAR_EL1
;
1959 return MISCREG_FAR_EL2
;
1961 return MISCREG_HPFAR_EL2
;
1971 return MISCREG_FAR_EL3
;
1985 return MISCREG_PAR_EL1
;
1999 return MISCREG_PMINTENSET_EL1
;
2001 return MISCREG_PMINTENCLR_EL1
;
2011 return MISCREG_PMCR_EL0
;
2013 return MISCREG_PMCNTENSET_EL0
;
2015 return MISCREG_PMCNTENCLR_EL0
;
2017 return MISCREG_PMOVSCLR_EL0
;
2019 return MISCREG_PMSWINC_EL0
;
2021 return MISCREG_PMSELR_EL0
;
2023 return MISCREG_PMCEID0_EL0
;
2025 return MISCREG_PMCEID1_EL0
;
2031 return MISCREG_PMCCNTR_EL0
;
2033 return MISCREG_PMXEVTYPER_EL0
;
2035 return MISCREG_PMXEVCNTR_EL0
;
2041 return MISCREG_PMUSERENR_EL0
;
2043 return MISCREG_PMOVSSET_EL0
;
2057 return MISCREG_MAIR_EL1
;
2063 return MISCREG_AMAIR_EL1
;
2073 return MISCREG_MAIR_EL2
;
2079 return MISCREG_AMAIR_EL2
;
2089 return MISCREG_MAIR_EL3
;
2095 return MISCREG_AMAIR_EL3
;
2109 return MISCREG_L2CTLR_EL1
;
2111 return MISCREG_L2ECTLR_EL1
;
2117 // S3_<op1>_11_<Cm>_<op2>
2118 return MISCREG_IMPDEF_UNIMPL
;
2128 return MISCREG_VBAR_EL1
;
2130 return MISCREG_RVBAR_EL1
;
2136 return MISCREG_ISR_EL1
;
2138 return MISCREG_DISR_EL1
;
2148 return MISCREG_VBAR_EL2
;
2150 return MISCREG_RVBAR_EL2
;
2156 return MISCREG_VDISR_EL2
;
2166 return MISCREG_VBAR_EL3
;
2168 return MISCREG_RVBAR_EL3
;
2170 return MISCREG_RMR_EL3
;
2184 return MISCREG_CONTEXTIDR_EL1
;
2186 return MISCREG_TPIDR_EL1
;
2196 return MISCREG_TPIDR_EL0
;
2198 return MISCREG_TPIDRRO_EL0
;
2208 return MISCREG_CONTEXTIDR_EL2
;
2210 return MISCREG_TPIDR_EL2
;
2220 return MISCREG_TPIDR_EL3
;
2234 return MISCREG_CNTKCTL_EL1
;
2244 return MISCREG_CNTFRQ_EL0
;
2246 return MISCREG_CNTPCT_EL0
;
2248 return MISCREG_CNTVCT_EL0
;
2254 return MISCREG_CNTP_TVAL_EL0
;
2256 return MISCREG_CNTP_CTL_EL0
;
2258 return MISCREG_CNTP_CVAL_EL0
;
2264 return MISCREG_CNTV_TVAL_EL0
;
2266 return MISCREG_CNTV_CTL_EL0
;
2268 return MISCREG_CNTV_CVAL_EL0
;
2274 return MISCREG_PMEVCNTR0_EL0
;
2276 return MISCREG_PMEVCNTR1_EL0
;
2278 return MISCREG_PMEVCNTR2_EL0
;
2280 return MISCREG_PMEVCNTR3_EL0
;
2282 return MISCREG_PMEVCNTR4_EL0
;
2284 return MISCREG_PMEVCNTR5_EL0
;
2290 return MISCREG_PMEVTYPER0_EL0
;
2292 return MISCREG_PMEVTYPER1_EL0
;
2294 return MISCREG_PMEVTYPER2_EL0
;
2296 return MISCREG_PMEVTYPER3_EL0
;
2298 return MISCREG_PMEVTYPER4_EL0
;
2300 return MISCREG_PMEVTYPER5_EL0
;
2306 return MISCREG_PMCCFILTR_EL0
;
2315 return MISCREG_CNTVOFF_EL2
;
2321 return MISCREG_CNTHCTL_EL2
;
2327 return MISCREG_CNTHP_TVAL_EL2
;
2329 return MISCREG_CNTHP_CTL_EL2
;
2331 return MISCREG_CNTHP_CVAL_EL2
;
2337 return MISCREG_CNTHV_TVAL_EL2
;
2339 return MISCREG_CNTHV_CTL_EL2
;
2341 return MISCREG_CNTHV_CVAL_EL2
;
2351 return MISCREG_CNTPS_TVAL_EL1
;
2353 return MISCREG_CNTPS_CTL_EL1
;
2355 return MISCREG_CNTPS_CVAL_EL1
;
2369 return MISCREG_IL1DATA0_EL1
;
2371 return MISCREG_IL1DATA1_EL1
;
2373 return MISCREG_IL1DATA2_EL1
;
2375 return MISCREG_IL1DATA3_EL1
;
2381 return MISCREG_DL1DATA0_EL1
;
2383 return MISCREG_DL1DATA1_EL1
;
2385 return MISCREG_DL1DATA2_EL1
;
2387 return MISCREG_DL1DATA3_EL1
;
2389 return MISCREG_DL1DATA4_EL1
;
2399 return MISCREG_L2ACTLR_EL1
;
2405 return MISCREG_CPUACTLR_EL1
;
2407 return MISCREG_CPUECTLR_EL1
;
2409 return MISCREG_CPUMERRSR_EL1
;
2411 return MISCREG_L2MERRSR_EL1
;
2417 return MISCREG_CBAR_EL1
;
2424 // S3_<op1>_15_<Cm>_<op2>
2425 return MISCREG_IMPDEF_UNIMPL
;
2430 return MISCREG_UNKNOWN
;
2433 bitset
<NUM_MISCREG_INFOS
> miscRegInfo
[NUM_MISCREGS
]; // initialized below
2436 ISA::initializeMiscRegMetadata()
2438 // the MiscReg metadata tables are shared across all instances of the
2439 // ISA object, so there's no need to initialize them multiple times.
2440 static bool completed
= false;
2444 // This boolean variable specifies if the system is running in aarch32 at
2445 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
2446 // is running in aarch64 (aarch32EL3 = false)
2447 bool aarch32EL3
= haveSecurity
&& !highestELIs64
;
2450 * Some registers alias with others, and therefore need to be translated.
2451 * When two mapping registers are given, they are the 32b lower and
2452 * upper halves, respectively, of the 64b register being mapped.
2453 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
2455 * NAM = "not architecturally mandated",
2456 * from ARM DDI 0487A.i, template text
2457 * "AArch64 System register ___ can be mapped to
2458 * AArch32 System register ___, but this is not
2459 * architecturally mandated."
2462 InitReg(MISCREG_CPSR
)
2464 InitReg(MISCREG_SPSR
)
2466 InitReg(MISCREG_SPSR_FIQ
)
2468 InitReg(MISCREG_SPSR_IRQ
)
2470 InitReg(MISCREG_SPSR_SVC
)
2472 InitReg(MISCREG_SPSR_MON
)
2474 InitReg(MISCREG_SPSR_ABT
)
2476 InitReg(MISCREG_SPSR_HYP
)
2478 InitReg(MISCREG_SPSR_UND
)
2480 InitReg(MISCREG_ELR_HYP
)
2482 InitReg(MISCREG_FPSID
)
2484 InitReg(MISCREG_FPSCR
)
2486 InitReg(MISCREG_MVFR1
)
2488 InitReg(MISCREG_MVFR0
)
2490 InitReg(MISCREG_FPEXC
)
2494 InitReg(MISCREG_CPSR_MODE
)
2496 InitReg(MISCREG_CPSR_Q
)
2498 InitReg(MISCREG_FPSCR_EXC
)
2500 InitReg(MISCREG_FPSCR_QC
)
2502 InitReg(MISCREG_LOCKADDR
)
2504 InitReg(MISCREG_LOCKFLAG
)
2506 InitReg(MISCREG_PRRR_MAIR0
)
2509 InitReg(MISCREG_PRRR_MAIR0_NS
)
2511 .privSecure(!aarch32EL3
)
2513 InitReg(MISCREG_PRRR_MAIR0_S
)
2516 InitReg(MISCREG_NMRR_MAIR1
)
2519 InitReg(MISCREG_NMRR_MAIR1_NS
)
2521 .privSecure(!aarch32EL3
)
2523 InitReg(MISCREG_NMRR_MAIR1_S
)
2526 InitReg(MISCREG_PMXEVTYPER_PMCCFILTR
)
2528 InitReg(MISCREG_SCTLR_RST
)
2530 InitReg(MISCREG_SEV_MAILBOX
)
2533 // AArch32 CP14 registers
2534 InitReg(MISCREG_DBGDIDR
)
2535 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2536 InitReg(MISCREG_DBGDSCRint
)
2537 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2538 InitReg(MISCREG_DBGDCCINT
)
2541 InitReg(MISCREG_DBGDTRTXint
)
2544 InitReg(MISCREG_DBGDTRRXint
)
2547 InitReg(MISCREG_DBGWFAR
)
2550 InitReg(MISCREG_DBGVCR
)
2553 InitReg(MISCREG_DBGDTRRXext
)
2556 InitReg(MISCREG_DBGDSCRext
)
2560 InitReg(MISCREG_DBGDTRTXext
)
2563 InitReg(MISCREG_DBGOSECCR
)
2566 InitReg(MISCREG_DBGBVR0
)
2569 InitReg(MISCREG_DBGBVR1
)
2572 InitReg(MISCREG_DBGBVR2
)
2575 InitReg(MISCREG_DBGBVR3
)
2578 InitReg(MISCREG_DBGBVR4
)
2581 InitReg(MISCREG_DBGBVR5
)
2584 InitReg(MISCREG_DBGBCR0
)
2587 InitReg(MISCREG_DBGBCR1
)
2590 InitReg(MISCREG_DBGBCR2
)
2593 InitReg(MISCREG_DBGBCR3
)
2596 InitReg(MISCREG_DBGBCR4
)
2599 InitReg(MISCREG_DBGBCR5
)
2602 InitReg(MISCREG_DBGWVR0
)
2605 InitReg(MISCREG_DBGWVR1
)
2608 InitReg(MISCREG_DBGWVR2
)
2611 InitReg(MISCREG_DBGWVR3
)
2614 InitReg(MISCREG_DBGWCR0
)
2617 InitReg(MISCREG_DBGWCR1
)
2620 InitReg(MISCREG_DBGWCR2
)
2623 InitReg(MISCREG_DBGWCR3
)
2626 InitReg(MISCREG_DBGDRAR
)
2628 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2629 InitReg(MISCREG_DBGBXVR4
)
2632 InitReg(MISCREG_DBGBXVR5
)
2635 InitReg(MISCREG_DBGOSLAR
)
2637 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
2638 InitReg(MISCREG_DBGOSLSR
)
2640 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2641 InitReg(MISCREG_DBGOSDLR
)
2644 InitReg(MISCREG_DBGPRCR
)
2647 InitReg(MISCREG_DBGDSAR
)
2649 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2650 InitReg(MISCREG_DBGCLAIMSET
)
2653 InitReg(MISCREG_DBGCLAIMCLR
)
2656 InitReg(MISCREG_DBGAUTHSTATUS
)
2658 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2659 InitReg(MISCREG_DBGDEVID2
)
2661 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2662 InitReg(MISCREG_DBGDEVID1
)
2664 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2665 InitReg(MISCREG_DBGDEVID0
)
2667 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2668 InitReg(MISCREG_TEECR
)
2671 InitReg(MISCREG_JIDR
)
2673 InitReg(MISCREG_TEEHBR
)
2675 InitReg(MISCREG_JOSCR
)
2677 InitReg(MISCREG_JMCR
)
2680 // AArch32 CP15 registers
2681 InitReg(MISCREG_MIDR
)
2682 .allPrivileges().exceptUserMode().writes(0);
2683 InitReg(MISCREG_CTR
)
2684 .allPrivileges().exceptUserMode().writes(0);
2685 InitReg(MISCREG_TCMTR
)
2686 .allPrivileges().exceptUserMode().writes(0);
2687 InitReg(MISCREG_TLBTR
)
2688 .allPrivileges().exceptUserMode().writes(0);
2689 InitReg(MISCREG_MPIDR
)
2690 .allPrivileges().exceptUserMode().writes(0);
2691 InitReg(MISCREG_REVIDR
)
2694 .allPrivileges().exceptUserMode().writes(0);
2695 InitReg(MISCREG_ID_PFR0
)
2696 .allPrivileges().exceptUserMode().writes(0);
2697 InitReg(MISCREG_ID_PFR1
)
2698 .allPrivileges().exceptUserMode().writes(0);
2699 InitReg(MISCREG_ID_DFR0
)
2700 .allPrivileges().exceptUserMode().writes(0);
2701 InitReg(MISCREG_ID_AFR0
)
2702 .allPrivileges().exceptUserMode().writes(0);
2703 InitReg(MISCREG_ID_MMFR0
)
2704 .allPrivileges().exceptUserMode().writes(0);
2705 InitReg(MISCREG_ID_MMFR1
)
2706 .allPrivileges().exceptUserMode().writes(0);
2707 InitReg(MISCREG_ID_MMFR2
)
2708 .allPrivileges().exceptUserMode().writes(0);
2709 InitReg(MISCREG_ID_MMFR3
)
2710 .allPrivileges().exceptUserMode().writes(0);
2711 InitReg(MISCREG_ID_ISAR0
)
2712 .allPrivileges().exceptUserMode().writes(0);
2713 InitReg(MISCREG_ID_ISAR1
)
2714 .allPrivileges().exceptUserMode().writes(0);
2715 InitReg(MISCREG_ID_ISAR2
)
2716 .allPrivileges().exceptUserMode().writes(0);
2717 InitReg(MISCREG_ID_ISAR3
)
2718 .allPrivileges().exceptUserMode().writes(0);
2719 InitReg(MISCREG_ID_ISAR4
)
2720 .allPrivileges().exceptUserMode().writes(0);
2721 InitReg(MISCREG_ID_ISAR5
)
2722 .allPrivileges().exceptUserMode().writes(0);
2723 InitReg(MISCREG_CCSIDR
)
2724 .allPrivileges().exceptUserMode().writes(0);
2725 InitReg(MISCREG_CLIDR
)
2726 .allPrivileges().exceptUserMode().writes(0);
2727 InitReg(MISCREG_AIDR
)
2728 .allPrivileges().exceptUserMode().writes(0);
2729 InitReg(MISCREG_CSSELR
)
2731 InitReg(MISCREG_CSSELR_NS
)
2733 .privSecure(!aarch32EL3
)
2734 .nonSecure().exceptUserMode();
2735 InitReg(MISCREG_CSSELR_S
)
2737 .secure().exceptUserMode();
2738 InitReg(MISCREG_VPIDR
)
2739 .hyp().monNonSecure();
2740 InitReg(MISCREG_VMPIDR
)
2741 .hyp().monNonSecure();
2742 InitReg(MISCREG_SCTLR
)
2744 InitReg(MISCREG_SCTLR_NS
)
2746 .privSecure(!aarch32EL3
)
2747 .nonSecure().exceptUserMode();
2748 InitReg(MISCREG_SCTLR_S
)
2750 .secure().exceptUserMode();
2751 InitReg(MISCREG_ACTLR
)
2753 InitReg(MISCREG_ACTLR_NS
)
2755 .privSecure(!aarch32EL3
)
2756 .nonSecure().exceptUserMode();
2757 InitReg(MISCREG_ACTLR_S
)
2759 .secure().exceptUserMode();
2760 InitReg(MISCREG_CPACR
)
2761 .allPrivileges().exceptUserMode();
2762 InitReg(MISCREG_SCR
)
2763 .mon().secure().exceptUserMode()
2764 .res0(0xff40) // [31:16], [6]
2765 .res1(0x0030); // [5:4]
2766 InitReg(MISCREG_SDER
)
2768 InitReg(MISCREG_NSACR
)
2769 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
2770 InitReg(MISCREG_HSCTLR
)
2771 .hyp().monNonSecure();
2772 InitReg(MISCREG_HACTLR
)
2773 .hyp().monNonSecure();
2774 InitReg(MISCREG_HCR
)
2775 .hyp().monNonSecure();
2776 InitReg(MISCREG_HDCR
)
2777 .hyp().monNonSecure();
2778 InitReg(MISCREG_HCPTR
)
2779 .hyp().monNonSecure();
2780 InitReg(MISCREG_HSTR
)
2781 .hyp().monNonSecure();
2782 InitReg(MISCREG_HACR
)
2785 .hyp().monNonSecure();
2786 InitReg(MISCREG_TTBR0
)
2788 InitReg(MISCREG_TTBR0_NS
)
2790 .privSecure(!aarch32EL3
)
2791 .nonSecure().exceptUserMode();
2792 InitReg(MISCREG_TTBR0_S
)
2794 .secure().exceptUserMode();
2795 InitReg(MISCREG_TTBR1
)
2797 InitReg(MISCREG_TTBR1_NS
)
2799 .privSecure(!aarch32EL3
)
2800 .nonSecure().exceptUserMode();
2801 InitReg(MISCREG_TTBR1_S
)
2803 .secure().exceptUserMode();
2804 InitReg(MISCREG_TTBCR
)
2806 InitReg(MISCREG_TTBCR_NS
)
2808 .privSecure(!aarch32EL3
)
2809 .nonSecure().exceptUserMode();
2810 InitReg(MISCREG_TTBCR_S
)
2812 .secure().exceptUserMode();
2813 InitReg(MISCREG_HTCR
)
2814 .hyp().monNonSecure();
2815 InitReg(MISCREG_VTCR
)
2816 .hyp().monNonSecure();
2817 InitReg(MISCREG_DACR
)
2819 InitReg(MISCREG_DACR_NS
)
2821 .privSecure(!aarch32EL3
)
2822 .nonSecure().exceptUserMode();
2823 InitReg(MISCREG_DACR_S
)
2825 .secure().exceptUserMode();
2826 InitReg(MISCREG_DFSR
)
2828 InitReg(MISCREG_DFSR_NS
)
2830 .privSecure(!aarch32EL3
)
2831 .nonSecure().exceptUserMode();
2832 InitReg(MISCREG_DFSR_S
)
2834 .secure().exceptUserMode();
2835 InitReg(MISCREG_IFSR
)
2837 InitReg(MISCREG_IFSR_NS
)
2839 .privSecure(!aarch32EL3
)
2840 .nonSecure().exceptUserMode();
2841 InitReg(MISCREG_IFSR_S
)
2843 .secure().exceptUserMode();
2844 InitReg(MISCREG_ADFSR
)
2848 InitReg(MISCREG_ADFSR_NS
)
2852 .privSecure(!aarch32EL3
)
2853 .nonSecure().exceptUserMode();
2854 InitReg(MISCREG_ADFSR_S
)
2858 .secure().exceptUserMode();
2859 InitReg(MISCREG_AIFSR
)
2863 InitReg(MISCREG_AIFSR_NS
)
2867 .privSecure(!aarch32EL3
)
2868 .nonSecure().exceptUserMode();
2869 InitReg(MISCREG_AIFSR_S
)
2873 .secure().exceptUserMode();
2874 InitReg(MISCREG_HADFSR
)
2875 .hyp().monNonSecure();
2876 InitReg(MISCREG_HAIFSR
)
2877 .hyp().monNonSecure();
2878 InitReg(MISCREG_HSR
)
2879 .hyp().monNonSecure();
2880 InitReg(MISCREG_DFAR
)
2882 InitReg(MISCREG_DFAR_NS
)
2884 .privSecure(!aarch32EL3
)
2885 .nonSecure().exceptUserMode();
2886 InitReg(MISCREG_DFAR_S
)
2888 .secure().exceptUserMode();
2889 InitReg(MISCREG_IFAR
)
2891 InitReg(MISCREG_IFAR_NS
)
2893 .privSecure(!aarch32EL3
)
2894 .nonSecure().exceptUserMode();
2895 InitReg(MISCREG_IFAR_S
)
2897 .secure().exceptUserMode();
2898 InitReg(MISCREG_HDFAR
)
2899 .hyp().monNonSecure();
2900 InitReg(MISCREG_HIFAR
)
2901 .hyp().monNonSecure();
2902 InitReg(MISCREG_HPFAR
)
2903 .hyp().monNonSecure();
2904 InitReg(MISCREG_ICIALLUIS
)
2907 .writes(1).exceptUserMode();
2908 InitReg(MISCREG_BPIALLIS
)
2911 .writes(1).exceptUserMode();
2912 InitReg(MISCREG_PAR
)
2914 InitReg(MISCREG_PAR_NS
)
2916 .privSecure(!aarch32EL3
)
2917 .nonSecure().exceptUserMode();
2918 InitReg(MISCREG_PAR_S
)
2920 .secure().exceptUserMode();
2921 InitReg(MISCREG_ICIALLU
)
2922 .writes(1).exceptUserMode();
2923 InitReg(MISCREG_ICIMVAU
)
2926 .writes(1).exceptUserMode();
2927 InitReg(MISCREG_CP15ISB
)
2929 InitReg(MISCREG_BPIALL
)
2932 .writes(1).exceptUserMode();
2933 InitReg(MISCREG_BPIMVA
)
2936 .writes(1).exceptUserMode();
2937 InitReg(MISCREG_DCIMVAC
)
2940 .writes(1).exceptUserMode();
2941 InitReg(MISCREG_DCISW
)
2944 .writes(1).exceptUserMode();
2945 InitReg(MISCREG_ATS1CPR
)
2946 .writes(1).exceptUserMode();
2947 InitReg(MISCREG_ATS1CPW
)
2948 .writes(1).exceptUserMode();
2949 InitReg(MISCREG_ATS1CUR
)
2950 .writes(1).exceptUserMode();
2951 InitReg(MISCREG_ATS1CUW
)
2952 .writes(1).exceptUserMode();
2953 InitReg(MISCREG_ATS12NSOPR
)
2954 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
2955 InitReg(MISCREG_ATS12NSOPW
)
2956 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
2957 InitReg(MISCREG_ATS12NSOUR
)
2958 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
2959 InitReg(MISCREG_ATS12NSOUW
)
2960 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
2961 InitReg(MISCREG_DCCMVAC
)
2962 .writes(1).exceptUserMode();
2963 InitReg(MISCREG_DCCSW
)
2966 .writes(1).exceptUserMode();
2967 InitReg(MISCREG_CP15DSB
)
2969 InitReg(MISCREG_CP15DMB
)
2971 InitReg(MISCREG_DCCMVAU
)
2974 .writes(1).exceptUserMode();
2975 InitReg(MISCREG_DCCIMVAC
)
2978 .writes(1).exceptUserMode();
2979 InitReg(MISCREG_DCCISW
)
2982 .writes(1).exceptUserMode();
2983 InitReg(MISCREG_ATS1HR
)
2984 .monNonSecureWrite().hypWrite();
2985 InitReg(MISCREG_ATS1HW
)
2986 .monNonSecureWrite().hypWrite();
2987 InitReg(MISCREG_TLBIALLIS
)
2988 .writes(1).exceptUserMode();
2989 InitReg(MISCREG_TLBIMVAIS
)
2990 .writes(1).exceptUserMode();
2991 InitReg(MISCREG_TLBIASIDIS
)
2992 .writes(1).exceptUserMode();
2993 InitReg(MISCREG_TLBIMVAAIS
)
2994 .writes(1).exceptUserMode();
2995 InitReg(MISCREG_TLBIMVALIS
)
2996 .writes(1).exceptUserMode();
2997 InitReg(MISCREG_TLBIMVAALIS
)
2998 .writes(1).exceptUserMode();
2999 InitReg(MISCREG_ITLBIALL
)
3000 .writes(1).exceptUserMode();
3001 InitReg(MISCREG_ITLBIMVA
)
3002 .writes(1).exceptUserMode();
3003 InitReg(MISCREG_ITLBIASID
)
3004 .writes(1).exceptUserMode();
3005 InitReg(MISCREG_DTLBIALL
)
3006 .writes(1).exceptUserMode();
3007 InitReg(MISCREG_DTLBIMVA
)
3008 .writes(1).exceptUserMode();
3009 InitReg(MISCREG_DTLBIASID
)
3010 .writes(1).exceptUserMode();
3011 InitReg(MISCREG_TLBIALL
)
3012 .writes(1).exceptUserMode();
3013 InitReg(MISCREG_TLBIMVA
)
3014 .writes(1).exceptUserMode();
3015 InitReg(MISCREG_TLBIASID
)
3016 .writes(1).exceptUserMode();
3017 InitReg(MISCREG_TLBIMVAA
)
3018 .writes(1).exceptUserMode();
3019 InitReg(MISCREG_TLBIMVAL
)
3020 .writes(1).exceptUserMode();
3021 InitReg(MISCREG_TLBIMVAAL
)
3022 .writes(1).exceptUserMode();
3023 InitReg(MISCREG_TLBIIPAS2IS
)
3024 .monNonSecureWrite().hypWrite();
3025 InitReg(MISCREG_TLBIIPAS2LIS
)
3026 .monNonSecureWrite().hypWrite();
3027 InitReg(MISCREG_TLBIALLHIS
)
3028 .monNonSecureWrite().hypWrite();
3029 InitReg(MISCREG_TLBIMVAHIS
)
3030 .monNonSecureWrite().hypWrite();
3031 InitReg(MISCREG_TLBIALLNSNHIS
)
3032 .monNonSecureWrite().hypWrite();
3033 InitReg(MISCREG_TLBIMVALHIS
)
3034 .monNonSecureWrite().hypWrite();
3035 InitReg(MISCREG_TLBIIPAS2
)
3036 .monNonSecureWrite().hypWrite();
3037 InitReg(MISCREG_TLBIIPAS2L
)
3038 .monNonSecureWrite().hypWrite();
3039 InitReg(MISCREG_TLBIALLH
)
3040 .monNonSecureWrite().hypWrite();
3041 InitReg(MISCREG_TLBIMVAH
)
3042 .monNonSecureWrite().hypWrite();
3043 InitReg(MISCREG_TLBIALLNSNH
)
3044 .monNonSecureWrite().hypWrite();
3045 InitReg(MISCREG_TLBIMVALH
)
3046 .monNonSecureWrite().hypWrite();
3047 InitReg(MISCREG_PMCR
)
3049 InitReg(MISCREG_PMCNTENSET
)
3051 InitReg(MISCREG_PMCNTENCLR
)
3053 InitReg(MISCREG_PMOVSR
)
3055 InitReg(MISCREG_PMSWINC
)
3057 InitReg(MISCREG_PMSELR
)
3059 InitReg(MISCREG_PMCEID0
)
3061 InitReg(MISCREG_PMCEID1
)
3063 InitReg(MISCREG_PMCCNTR
)
3065 InitReg(MISCREG_PMXEVTYPER
)
3067 InitReg(MISCREG_PMCCFILTR
)
3069 InitReg(MISCREG_PMXEVCNTR
)
3071 InitReg(MISCREG_PMUSERENR
)
3072 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3073 InitReg(MISCREG_PMINTENSET
)
3074 .allPrivileges().exceptUserMode();
3075 InitReg(MISCREG_PMINTENCLR
)
3076 .allPrivileges().exceptUserMode();
3077 InitReg(MISCREG_PMOVSSET
)
3080 InitReg(MISCREG_L2CTLR
)
3081 .allPrivileges().exceptUserMode();
3082 InitReg(MISCREG_L2ECTLR
)
3084 .allPrivileges().exceptUserMode();
3085 InitReg(MISCREG_PRRR
)
3087 InitReg(MISCREG_PRRR_NS
)
3089 .privSecure(!aarch32EL3
)
3090 .nonSecure().exceptUserMode();
3091 InitReg(MISCREG_PRRR_S
)
3093 .secure().exceptUserMode();
3094 InitReg(MISCREG_MAIR0
)
3096 InitReg(MISCREG_MAIR0_NS
)
3098 .privSecure(!aarch32EL3
)
3099 .nonSecure().exceptUserMode();
3100 InitReg(MISCREG_MAIR0_S
)
3102 .secure().exceptUserMode();
3103 InitReg(MISCREG_NMRR
)
3105 InitReg(MISCREG_NMRR_NS
)
3107 .privSecure(!aarch32EL3
)
3108 .nonSecure().exceptUserMode();
3109 InitReg(MISCREG_NMRR_S
)
3111 .secure().exceptUserMode();
3112 InitReg(MISCREG_MAIR1
)
3114 InitReg(MISCREG_MAIR1_NS
)
3116 .privSecure(!aarch32EL3
)
3117 .nonSecure().exceptUserMode();
3118 InitReg(MISCREG_MAIR1_S
)
3120 .secure().exceptUserMode();
3121 InitReg(MISCREG_AMAIR0
)
3123 InitReg(MISCREG_AMAIR0_NS
)
3125 .privSecure(!aarch32EL3
)
3126 .nonSecure().exceptUserMode();
3127 InitReg(MISCREG_AMAIR0_S
)
3129 .secure().exceptUserMode();
3130 InitReg(MISCREG_AMAIR1
)
3132 InitReg(MISCREG_AMAIR1_NS
)
3134 .privSecure(!aarch32EL3
)
3135 .nonSecure().exceptUserMode();
3136 InitReg(MISCREG_AMAIR1_S
)
3138 .secure().exceptUserMode();
3139 InitReg(MISCREG_HMAIR0
)
3140 .hyp().monNonSecure();
3141 InitReg(MISCREG_HMAIR1
)
3142 .hyp().monNonSecure();
3143 InitReg(MISCREG_HAMAIR0
)
3146 .hyp().monNonSecure();
3147 InitReg(MISCREG_HAMAIR1
)
3150 .hyp().monNonSecure();
3151 InitReg(MISCREG_VBAR
)
3153 InitReg(MISCREG_VBAR_NS
)
3155 .privSecure(!aarch32EL3
)
3156 .nonSecure().exceptUserMode();
3157 InitReg(MISCREG_VBAR_S
)
3159 .secure().exceptUserMode();
3160 InitReg(MISCREG_MVBAR
)
3161 .mon().secure().exceptUserMode();
3162 InitReg(MISCREG_RMR
)
3164 .mon().secure().exceptUserMode();
3165 InitReg(MISCREG_ISR
)
3166 .allPrivileges().exceptUserMode().writes(0);
3167 InitReg(MISCREG_HVBAR
)
3168 .hyp().monNonSecure();
3169 InitReg(MISCREG_FCSEIDR
)
3172 .allPrivileges().exceptUserMode();
3173 InitReg(MISCREG_CONTEXTIDR
)
3175 InitReg(MISCREG_CONTEXTIDR_NS
)
3177 .privSecure(!aarch32EL3
)
3178 .nonSecure().exceptUserMode();
3179 InitReg(MISCREG_CONTEXTIDR_S
)
3181 .secure().exceptUserMode();
3182 InitReg(MISCREG_TPIDRURW
)
3184 InitReg(MISCREG_TPIDRURW_NS
)
3187 .privSecure(!aarch32EL3
)
3189 InitReg(MISCREG_TPIDRURW_S
)
3192 InitReg(MISCREG_TPIDRURO
)
3194 InitReg(MISCREG_TPIDRURO_NS
)
3197 .userNonSecureWrite(0).userSecureRead(1)
3198 .privSecure(!aarch32EL3
)
3200 InitReg(MISCREG_TPIDRURO_S
)
3202 .secure().userSecureWrite(0);
3203 InitReg(MISCREG_TPIDRPRW
)
3205 InitReg(MISCREG_TPIDRPRW_NS
)
3207 .nonSecure().exceptUserMode()
3208 .privSecure(!aarch32EL3
);
3209 InitReg(MISCREG_TPIDRPRW_S
)
3211 .secure().exceptUserMode();
3212 InitReg(MISCREG_HTPIDR
)
3213 .hyp().monNonSecure();
3214 InitReg(MISCREG_CNTFRQ
)
3217 InitReg(MISCREG_CNTKCTL
)
3218 .allPrivileges().exceptUserMode();
3219 InitReg(MISCREG_CNTP_TVAL
)
3221 InitReg(MISCREG_CNTP_TVAL_NS
)
3224 .privSecure(!aarch32EL3
)
3226 InitReg(MISCREG_CNTP_TVAL_S
)
3229 InitReg(MISCREG_CNTP_CTL
)
3231 InitReg(MISCREG_CNTP_CTL_NS
)
3234 .privSecure(!aarch32EL3
)
3236 InitReg(MISCREG_CNTP_CTL_S
)
3239 InitReg(MISCREG_CNTV_TVAL
)
3241 InitReg(MISCREG_CNTV_CTL
)
3243 InitReg(MISCREG_CNTHCTL
)
3244 .hypWrite().monNonSecureRead();
3245 InitReg(MISCREG_CNTHP_TVAL
)
3246 .hypWrite().monNonSecureRead();
3247 InitReg(MISCREG_CNTHP_CTL
)
3248 .hypWrite().monNonSecureRead();
3249 InitReg(MISCREG_IL1DATA0
)
3251 .allPrivileges().exceptUserMode();
3252 InitReg(MISCREG_IL1DATA1
)
3254 .allPrivileges().exceptUserMode();
3255 InitReg(MISCREG_IL1DATA2
)
3257 .allPrivileges().exceptUserMode();
3258 InitReg(MISCREG_IL1DATA3
)
3260 .allPrivileges().exceptUserMode();
3261 InitReg(MISCREG_DL1DATA0
)
3263 .allPrivileges().exceptUserMode();
3264 InitReg(MISCREG_DL1DATA1
)
3266 .allPrivileges().exceptUserMode();
3267 InitReg(MISCREG_DL1DATA2
)
3269 .allPrivileges().exceptUserMode();
3270 InitReg(MISCREG_DL1DATA3
)
3272 .allPrivileges().exceptUserMode();
3273 InitReg(MISCREG_DL1DATA4
)
3275 .allPrivileges().exceptUserMode();
3276 InitReg(MISCREG_RAMINDEX
)
3278 .writes(1).exceptUserMode();
3279 InitReg(MISCREG_L2ACTLR
)
3281 .allPrivileges().exceptUserMode();
3282 InitReg(MISCREG_CBAR
)
3284 .allPrivileges().exceptUserMode().writes(0);
3285 InitReg(MISCREG_HTTBR
)
3286 .hyp().monNonSecure();
3287 InitReg(MISCREG_VTTBR
)
3288 .hyp().monNonSecure();
3289 InitReg(MISCREG_CNTPCT
)
3291 InitReg(MISCREG_CNTVCT
)
3294 InitReg(MISCREG_CNTP_CVAL
)
3296 InitReg(MISCREG_CNTP_CVAL_NS
)
3299 .privSecure(!aarch32EL3
)
3301 InitReg(MISCREG_CNTP_CVAL_S
)
3304 InitReg(MISCREG_CNTV_CVAL
)
3306 InitReg(MISCREG_CNTVOFF
)
3307 .hyp().monNonSecure();
3308 InitReg(MISCREG_CNTHP_CVAL
)
3309 .hypWrite().monNonSecureRead();
3310 InitReg(MISCREG_CPUMERRSR
)
3312 .allPrivileges().exceptUserMode();
3313 InitReg(MISCREG_L2MERRSR
)
3316 .allPrivileges().exceptUserMode();
3318 // AArch64 registers (Op0=2);
3319 InitReg(MISCREG_MDCCINT_EL1
)
3321 InitReg(MISCREG_OSDTRRX_EL1
)
3323 .mapsTo(MISCREG_DBGDTRRXext
);
3324 InitReg(MISCREG_MDSCR_EL1
)
3326 .mapsTo(MISCREG_DBGDSCRext
);
3327 InitReg(MISCREG_OSDTRTX_EL1
)
3329 .mapsTo(MISCREG_DBGDTRTXext
);
3330 InitReg(MISCREG_OSECCR_EL1
)
3332 .mapsTo(MISCREG_DBGOSECCR
);
3333 InitReg(MISCREG_DBGBVR0_EL1
)
3335 .mapsTo(MISCREG_DBGBVR0
/*, MISCREG_DBGBXVR0 */);
3336 InitReg(MISCREG_DBGBVR1_EL1
)
3338 .mapsTo(MISCREG_DBGBVR1
/*, MISCREG_DBGBXVR1 */);
3339 InitReg(MISCREG_DBGBVR2_EL1
)
3341 .mapsTo(MISCREG_DBGBVR2
/*, MISCREG_DBGBXVR2 */);
3342 InitReg(MISCREG_DBGBVR3_EL1
)
3344 .mapsTo(MISCREG_DBGBVR3
/*, MISCREG_DBGBXVR3 */);
3345 InitReg(MISCREG_DBGBVR4_EL1
)
3347 .mapsTo(MISCREG_DBGBVR4
/*, MISCREG_DBGBXVR4 */);
3348 InitReg(MISCREG_DBGBVR5_EL1
)
3350 .mapsTo(MISCREG_DBGBVR5
/*, MISCREG_DBGBXVR5 */);
3351 InitReg(MISCREG_DBGBCR0_EL1
)
3353 .mapsTo(MISCREG_DBGBCR0
);
3354 InitReg(MISCREG_DBGBCR1_EL1
)
3356 .mapsTo(MISCREG_DBGBCR1
);
3357 InitReg(MISCREG_DBGBCR2_EL1
)
3359 .mapsTo(MISCREG_DBGBCR2
);
3360 InitReg(MISCREG_DBGBCR3_EL1
)
3362 .mapsTo(MISCREG_DBGBCR3
);
3363 InitReg(MISCREG_DBGBCR4_EL1
)
3365 .mapsTo(MISCREG_DBGBCR4
);
3366 InitReg(MISCREG_DBGBCR5_EL1
)
3368 .mapsTo(MISCREG_DBGBCR5
);
3369 InitReg(MISCREG_DBGWVR0_EL1
)
3371 .mapsTo(MISCREG_DBGWVR0
);
3372 InitReg(MISCREG_DBGWVR1_EL1
)
3374 .mapsTo(MISCREG_DBGWVR1
);
3375 InitReg(MISCREG_DBGWVR2_EL1
)
3377 .mapsTo(MISCREG_DBGWVR2
);
3378 InitReg(MISCREG_DBGWVR3_EL1
)
3380 .mapsTo(MISCREG_DBGWVR3
);
3381 InitReg(MISCREG_DBGWCR0_EL1
)
3383 .mapsTo(MISCREG_DBGWCR0
);
3384 InitReg(MISCREG_DBGWCR1_EL1
)
3386 .mapsTo(MISCREG_DBGWCR1
);
3387 InitReg(MISCREG_DBGWCR2_EL1
)
3389 .mapsTo(MISCREG_DBGWCR2
);
3390 InitReg(MISCREG_DBGWCR3_EL1
)
3392 .mapsTo(MISCREG_DBGWCR3
);
3393 InitReg(MISCREG_MDCCSR_EL0
)
3394 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3395 .mapsTo(MISCREG_DBGDSCRint
);
3396 InitReg(MISCREG_MDDTR_EL0
)
3398 InitReg(MISCREG_MDDTRTX_EL0
)
3400 InitReg(MISCREG_MDDTRRX_EL0
)
3402 InitReg(MISCREG_DBGVCR32_EL2
)
3404 .mapsTo(MISCREG_DBGVCR
);
3405 InitReg(MISCREG_MDRAR_EL1
)
3406 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3407 .mapsTo(MISCREG_DBGDRAR
);
3408 InitReg(MISCREG_OSLAR_EL1
)
3409 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3410 .mapsTo(MISCREG_DBGOSLAR
);
3411 InitReg(MISCREG_OSLSR_EL1
)
3412 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3413 .mapsTo(MISCREG_DBGOSLSR
);
3414 InitReg(MISCREG_OSDLR_EL1
)
3416 .mapsTo(MISCREG_DBGOSDLR
);
3417 InitReg(MISCREG_DBGPRCR_EL1
)
3419 .mapsTo(MISCREG_DBGPRCR
);
3420 InitReg(MISCREG_DBGCLAIMSET_EL1
)
3422 .mapsTo(MISCREG_DBGCLAIMSET
);
3423 InitReg(MISCREG_DBGCLAIMCLR_EL1
)
3425 .mapsTo(MISCREG_DBGCLAIMCLR
);
3426 InitReg(MISCREG_DBGAUTHSTATUS_EL1
)
3427 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3428 .mapsTo(MISCREG_DBGAUTHSTATUS
);
3429 InitReg(MISCREG_TEECR32_EL1
);
3430 InitReg(MISCREG_TEEHBR32_EL1
);
3432 // AArch64 registers (Op0=1,3);
3433 InitReg(MISCREG_MIDR_EL1
)
3434 .allPrivileges().exceptUserMode().writes(0);
3435 InitReg(MISCREG_MPIDR_EL1
)
3436 .allPrivileges().exceptUserMode().writes(0);
3437 InitReg(MISCREG_REVIDR_EL1
)
3438 .allPrivileges().exceptUserMode().writes(0);
3439 InitReg(MISCREG_ID_PFR0_EL1
)
3440 .allPrivileges().exceptUserMode().writes(0)
3441 .mapsTo(MISCREG_ID_PFR0
);
3442 InitReg(MISCREG_ID_PFR1_EL1
)
3443 .allPrivileges().exceptUserMode().writes(0)
3444 .mapsTo(MISCREG_ID_PFR1
);
3445 InitReg(MISCREG_ID_DFR0_EL1
)
3446 .allPrivileges().exceptUserMode().writes(0)
3447 .mapsTo(MISCREG_ID_DFR0
);
3448 InitReg(MISCREG_ID_AFR0_EL1
)
3449 .allPrivileges().exceptUserMode().writes(0)
3450 .mapsTo(MISCREG_ID_AFR0
);
3451 InitReg(MISCREG_ID_MMFR0_EL1
)
3452 .allPrivileges().exceptUserMode().writes(0)
3453 .mapsTo(MISCREG_ID_MMFR0
);
3454 InitReg(MISCREG_ID_MMFR1_EL1
)
3455 .allPrivileges().exceptUserMode().writes(0)
3456 .mapsTo(MISCREG_ID_MMFR1
);
3457 InitReg(MISCREG_ID_MMFR2_EL1
)
3458 .allPrivileges().exceptUserMode().writes(0)
3459 .mapsTo(MISCREG_ID_MMFR2
);
3460 InitReg(MISCREG_ID_MMFR3_EL1
)
3461 .allPrivileges().exceptUserMode().writes(0)
3462 .mapsTo(MISCREG_ID_MMFR3
);
3463 InitReg(MISCREG_ID_ISAR0_EL1
)
3464 .allPrivileges().exceptUserMode().writes(0)
3465 .mapsTo(MISCREG_ID_ISAR0
);
3466 InitReg(MISCREG_ID_ISAR1_EL1
)
3467 .allPrivileges().exceptUserMode().writes(0)
3468 .mapsTo(MISCREG_ID_ISAR1
);
3469 InitReg(MISCREG_ID_ISAR2_EL1
)
3470 .allPrivileges().exceptUserMode().writes(0)
3471 .mapsTo(MISCREG_ID_ISAR2
);
3472 InitReg(MISCREG_ID_ISAR3_EL1
)
3473 .allPrivileges().exceptUserMode().writes(0)
3474 .mapsTo(MISCREG_ID_ISAR3
);
3475 InitReg(MISCREG_ID_ISAR4_EL1
)
3476 .allPrivileges().exceptUserMode().writes(0)
3477 .mapsTo(MISCREG_ID_ISAR4
);
3478 InitReg(MISCREG_ID_ISAR5_EL1
)
3479 .allPrivileges().exceptUserMode().writes(0)
3480 .mapsTo(MISCREG_ID_ISAR5
);
3481 InitReg(MISCREG_MVFR0_EL1
)
3482 .allPrivileges().exceptUserMode().writes(0);
3483 InitReg(MISCREG_MVFR1_EL1
)
3484 .allPrivileges().exceptUserMode().writes(0);
3485 InitReg(MISCREG_MVFR2_EL1
)
3486 .allPrivileges().exceptUserMode().writes(0);
3487 InitReg(MISCREG_ID_AA64PFR0_EL1
)
3488 .allPrivileges().exceptUserMode().writes(0);
3489 InitReg(MISCREG_ID_AA64PFR1_EL1
)
3490 .allPrivileges().exceptUserMode().writes(0);
3491 InitReg(MISCREG_ID_AA64DFR0_EL1
)
3492 .allPrivileges().exceptUserMode().writes(0);
3493 InitReg(MISCREG_ID_AA64DFR1_EL1
)
3494 .allPrivileges().exceptUserMode().writes(0);
3495 InitReg(MISCREG_ID_AA64AFR0_EL1
)
3496 .allPrivileges().exceptUserMode().writes(0);
3497 InitReg(MISCREG_ID_AA64AFR1_EL1
)
3498 .allPrivileges().exceptUserMode().writes(0);
3499 InitReg(MISCREG_ID_AA64ISAR0_EL1
)
3500 .allPrivileges().exceptUserMode().writes(0);
3501 InitReg(MISCREG_ID_AA64ISAR1_EL1
)
3502 .allPrivileges().exceptUserMode().writes(0);
3503 InitReg(MISCREG_ID_AA64MMFR0_EL1
)
3504 .allPrivileges().exceptUserMode().writes(0);
3505 InitReg(MISCREG_ID_AA64MMFR1_EL1
)
3506 .allPrivileges().exceptUserMode().writes(0);
3507 InitReg(MISCREG_CCSIDR_EL1
)
3508 .allPrivileges().exceptUserMode().writes(0);
3509 InitReg(MISCREG_CLIDR_EL1
)
3510 .allPrivileges().exceptUserMode().writes(0);
3511 InitReg(MISCREG_AIDR_EL1
)
3512 .allPrivileges().exceptUserMode().writes(0);
3513 InitReg(MISCREG_CSSELR_EL1
)
3514 .allPrivileges().exceptUserMode()
3515 .mapsTo(MISCREG_CSSELR_NS
);
3516 InitReg(MISCREG_CTR_EL0
)
3518 InitReg(MISCREG_DCZID_EL0
)
3520 InitReg(MISCREG_VPIDR_EL2
)
3522 .mapsTo(MISCREG_VPIDR
);
3523 InitReg(MISCREG_VMPIDR_EL2
)
3525 .mapsTo(MISCREG_VMPIDR
);
3526 InitReg(MISCREG_SCTLR_EL1
)
3527 .allPrivileges().exceptUserMode()
3528 .mapsTo(MISCREG_SCTLR_NS
);
3529 InitReg(MISCREG_ACTLR_EL1
)
3530 .allPrivileges().exceptUserMode()
3531 .mapsTo(MISCREG_ACTLR_NS
);
3532 InitReg(MISCREG_CPACR_EL1
)
3533 .allPrivileges().exceptUserMode()
3534 .mapsTo(MISCREG_CPACR
);
3535 InitReg(MISCREG_SCTLR_EL2
)
3537 .mapsTo(MISCREG_HSCTLR
);
3538 InitReg(MISCREG_ACTLR_EL2
)
3540 .mapsTo(MISCREG_HACTLR
);
3541 InitReg(MISCREG_HCR_EL2
)
3543 .mapsTo(MISCREG_HCR
/*, MISCREG_HCR2*/);
3544 InitReg(MISCREG_MDCR_EL2
)
3546 .mapsTo(MISCREG_HDCR
);
3547 InitReg(MISCREG_CPTR_EL2
)
3549 .mapsTo(MISCREG_HCPTR
);
3550 InitReg(MISCREG_HSTR_EL2
)
3552 .mapsTo(MISCREG_HSTR
);
3553 InitReg(MISCREG_HACR_EL2
)
3555 .mapsTo(MISCREG_HACR
);
3556 InitReg(MISCREG_SCTLR_EL3
)
3558 InitReg(MISCREG_ACTLR_EL3
)
3560 InitReg(MISCREG_SCR_EL3
)
3562 .mapsTo(MISCREG_SCR
); // NAM D7-2005
3563 InitReg(MISCREG_SDER32_EL3
)
3565 .mapsTo(MISCREG_SDER
);
3566 InitReg(MISCREG_CPTR_EL3
)
3568 InitReg(MISCREG_MDCR_EL3
)
3570 InitReg(MISCREG_TTBR0_EL1
)
3571 .allPrivileges().exceptUserMode()
3572 .mapsTo(MISCREG_TTBR0_NS
);
3573 InitReg(MISCREG_TTBR1_EL1
)
3574 .allPrivileges().exceptUserMode()
3575 .mapsTo(MISCREG_TTBR1_NS
);
3576 InitReg(MISCREG_TCR_EL1
)
3577 .allPrivileges().exceptUserMode()
3578 .mapsTo(MISCREG_TTBCR_NS
);
3579 InitReg(MISCREG_TTBR0_EL2
)
3581 .mapsTo(MISCREG_HTTBR
);
3582 InitReg(MISCREG_TTBR1_EL2
)
3584 InitReg(MISCREG_TCR_EL2
)
3586 .mapsTo(MISCREG_HTCR
);
3587 InitReg(MISCREG_VTTBR_EL2
)
3589 .mapsTo(MISCREG_VTTBR
);
3590 InitReg(MISCREG_VTCR_EL2
)
3592 .mapsTo(MISCREG_VTCR
);
3593 InitReg(MISCREG_TTBR0_EL3
)
3595 InitReg(MISCREG_TCR_EL3
)
3597 InitReg(MISCREG_DACR32_EL2
)
3599 .mapsTo(MISCREG_DACR_NS
);
3600 InitReg(MISCREG_SPSR_EL1
)
3601 .allPrivileges().exceptUserMode()
3602 .mapsTo(MISCREG_SPSR_SVC
); // NAM C5.2.17 SPSR_EL1
3603 InitReg(MISCREG_ELR_EL1
)
3604 .allPrivileges().exceptUserMode();
3605 InitReg(MISCREG_SP_EL0
)
3606 .allPrivileges().exceptUserMode();
3607 InitReg(MISCREG_SPSEL
)
3608 .allPrivileges().exceptUserMode();
3609 InitReg(MISCREG_CURRENTEL
)
3610 .allPrivileges().exceptUserMode().writes(0);
3611 InitReg(MISCREG_NZCV
)
3613 InitReg(MISCREG_DAIF
)
3615 InitReg(MISCREG_FPCR
)
3617 InitReg(MISCREG_FPSR
)
3619 InitReg(MISCREG_DSPSR_EL0
)
3621 InitReg(MISCREG_DLR_EL0
)
3623 InitReg(MISCREG_SPSR_EL2
)
3625 .mapsTo(MISCREG_SPSR_HYP
); // NAM C5.2.18 SPSR_EL2
3626 InitReg(MISCREG_ELR_EL2
)
3628 InitReg(MISCREG_SP_EL1
)
3630 InitReg(MISCREG_SPSR_IRQ_AA64
)
3632 InitReg(MISCREG_SPSR_ABT_AA64
)
3634 InitReg(MISCREG_SPSR_UND_AA64
)
3636 InitReg(MISCREG_SPSR_FIQ_AA64
)
3638 InitReg(MISCREG_SPSR_EL3
)
3640 .mapsTo(MISCREG_SPSR_MON
); // NAM C5.2.19 SPSR_EL3
3641 InitReg(MISCREG_ELR_EL3
)
3643 InitReg(MISCREG_SP_EL2
)
3645 InitReg(MISCREG_AFSR0_EL1
)
3646 .allPrivileges().exceptUserMode()
3647 .mapsTo(MISCREG_ADFSR_NS
);
3648 InitReg(MISCREG_AFSR1_EL1
)
3649 .allPrivileges().exceptUserMode()
3650 .mapsTo(MISCREG_AIFSR_NS
);
3651 InitReg(MISCREG_ESR_EL1
)
3652 .allPrivileges().exceptUserMode();
3653 InitReg(MISCREG_IFSR32_EL2
)
3655 .mapsTo(MISCREG_IFSR_NS
);
3656 InitReg(MISCREG_AFSR0_EL2
)
3658 .mapsTo(MISCREG_HADFSR
);
3659 InitReg(MISCREG_AFSR1_EL2
)
3661 .mapsTo(MISCREG_HAIFSR
);
3662 InitReg(MISCREG_ESR_EL2
)
3664 .mapsTo(MISCREG_HSR
);
3665 InitReg(MISCREG_FPEXC32_EL2
)
3666 .hyp().mon().mapsTo(MISCREG_FPEXC
);
3667 InitReg(MISCREG_AFSR0_EL3
)
3669 InitReg(MISCREG_AFSR1_EL3
)
3671 InitReg(MISCREG_ESR_EL3
)
3673 InitReg(MISCREG_FAR_EL1
)
3674 .allPrivileges().exceptUserMode()
3675 .mapsTo(MISCREG_DFAR_NS
, MISCREG_IFAR_NS
);
3676 InitReg(MISCREG_FAR_EL2
)
3678 .mapsTo(MISCREG_HDFAR
, MISCREG_HIFAR
);
3679 InitReg(MISCREG_HPFAR_EL2
)
3681 .mapsTo(MISCREG_HPFAR
);
3682 InitReg(MISCREG_FAR_EL3
)
3684 InitReg(MISCREG_IC_IALLUIS
)
3686 .writes(1).exceptUserMode();
3687 InitReg(MISCREG_PAR_EL1
)
3688 .allPrivileges().exceptUserMode()
3689 .mapsTo(MISCREG_PAR_NS
);
3690 InitReg(MISCREG_IC_IALLU
)
3692 .writes(1).exceptUserMode();
3693 InitReg(MISCREG_DC_IVAC_Xt
)
3695 .writes(1).exceptUserMode();
3696 InitReg(MISCREG_DC_ISW_Xt
)
3698 .writes(1).exceptUserMode();
3699 InitReg(MISCREG_AT_S1E1R_Xt
)
3700 .writes(1).exceptUserMode();
3701 InitReg(MISCREG_AT_S1E1W_Xt
)
3702 .writes(1).exceptUserMode();
3703 InitReg(MISCREG_AT_S1E0R_Xt
)
3704 .writes(1).exceptUserMode();
3705 InitReg(MISCREG_AT_S1E0W_Xt
)
3706 .writes(1).exceptUserMode();
3707 InitReg(MISCREG_DC_CSW_Xt
)
3709 .writes(1).exceptUserMode();
3710 InitReg(MISCREG_DC_CISW_Xt
)
3712 .writes(1).exceptUserMode();
3713 InitReg(MISCREG_DC_ZVA_Xt
)
3715 .writes(1).userSecureWrite(0);
3716 InitReg(MISCREG_IC_IVAU_Xt
)
3718 InitReg(MISCREG_DC_CVAC_Xt
)
3721 InitReg(MISCREG_DC_CVAU_Xt
)
3724 InitReg(MISCREG_DC_CIVAC_Xt
)
3727 InitReg(MISCREG_AT_S1E2R_Xt
)
3728 .monNonSecureWrite().hypWrite();
3729 InitReg(MISCREG_AT_S1E2W_Xt
)
3730 .monNonSecureWrite().hypWrite();
3731 InitReg(MISCREG_AT_S12E1R_Xt
)
3732 .hypWrite().monSecureWrite().monNonSecureWrite();
3733 InitReg(MISCREG_AT_S12E1W_Xt
)
3734 .hypWrite().monSecureWrite().monNonSecureWrite();
3735 InitReg(MISCREG_AT_S12E0R_Xt
)
3736 .hypWrite().monSecureWrite().monNonSecureWrite();
3737 InitReg(MISCREG_AT_S12E0W_Xt
)
3738 .hypWrite().monSecureWrite().monNonSecureWrite();
3739 InitReg(MISCREG_AT_S1E3R_Xt
)
3740 .monSecureWrite().monNonSecureWrite();
3741 InitReg(MISCREG_AT_S1E3W_Xt
)
3742 .monSecureWrite().monNonSecureWrite();
3743 InitReg(MISCREG_TLBI_VMALLE1IS
)
3744 .writes(1).exceptUserMode();
3745 InitReg(MISCREG_TLBI_VAE1IS_Xt
)
3746 .writes(1).exceptUserMode();
3747 InitReg(MISCREG_TLBI_ASIDE1IS_Xt
)
3748 .writes(1).exceptUserMode();
3749 InitReg(MISCREG_TLBI_VAAE1IS_Xt
)
3750 .writes(1).exceptUserMode();
3751 InitReg(MISCREG_TLBI_VALE1IS_Xt
)
3752 .writes(1).exceptUserMode();
3753 InitReg(MISCREG_TLBI_VAALE1IS_Xt
)
3754 .writes(1).exceptUserMode();
3755 InitReg(MISCREG_TLBI_VMALLE1
)
3756 .writes(1).exceptUserMode();
3757 InitReg(MISCREG_TLBI_VAE1_Xt
)
3758 .writes(1).exceptUserMode();
3759 InitReg(MISCREG_TLBI_ASIDE1_Xt
)
3760 .writes(1).exceptUserMode();
3761 InitReg(MISCREG_TLBI_VAAE1_Xt
)
3762 .writes(1).exceptUserMode();
3763 InitReg(MISCREG_TLBI_VALE1_Xt
)
3764 .writes(1).exceptUserMode();
3765 InitReg(MISCREG_TLBI_VAALE1_Xt
)
3766 .writes(1).exceptUserMode();
3767 InitReg(MISCREG_TLBI_IPAS2E1IS_Xt
)
3768 .hypWrite().monSecureWrite().monNonSecureWrite();
3769 InitReg(MISCREG_TLBI_IPAS2LE1IS_Xt
)
3770 .hypWrite().monSecureWrite().monNonSecureWrite();
3771 InitReg(MISCREG_TLBI_ALLE2IS
)
3772 .monNonSecureWrite().hypWrite();
3773 InitReg(MISCREG_TLBI_VAE2IS_Xt
)
3774 .monNonSecureWrite().hypWrite();
3775 InitReg(MISCREG_TLBI_ALLE1IS
)
3776 .hypWrite().monSecureWrite().monNonSecureWrite();
3777 InitReg(MISCREG_TLBI_VALE2IS_Xt
)
3778 .monNonSecureWrite().hypWrite();
3779 InitReg(MISCREG_TLBI_VMALLS12E1IS
)
3780 .hypWrite().monSecureWrite().monNonSecureWrite();
3781 InitReg(MISCREG_TLBI_IPAS2E1_Xt
)
3782 .hypWrite().monSecureWrite().monNonSecureWrite();
3783 InitReg(MISCREG_TLBI_IPAS2LE1_Xt
)
3784 .hypWrite().monSecureWrite().monNonSecureWrite();
3785 InitReg(MISCREG_TLBI_ALLE2
)
3786 .monNonSecureWrite().hypWrite();
3787 InitReg(MISCREG_TLBI_VAE2_Xt
)
3788 .monNonSecureWrite().hypWrite();
3789 InitReg(MISCREG_TLBI_ALLE1
)
3790 .hypWrite().monSecureWrite().monNonSecureWrite();
3791 InitReg(MISCREG_TLBI_VALE2_Xt
)
3792 .monNonSecureWrite().hypWrite();
3793 InitReg(MISCREG_TLBI_VMALLS12E1
)
3794 .hypWrite().monSecureWrite().monNonSecureWrite();
3795 InitReg(MISCREG_TLBI_ALLE3IS
)
3796 .monSecureWrite().monNonSecureWrite();
3797 InitReg(MISCREG_TLBI_VAE3IS_Xt
)
3798 .monSecureWrite().monNonSecureWrite();
3799 InitReg(MISCREG_TLBI_VALE3IS_Xt
)
3800 .monSecureWrite().monNonSecureWrite();
3801 InitReg(MISCREG_TLBI_ALLE3
)
3802 .monSecureWrite().monNonSecureWrite();
3803 InitReg(MISCREG_TLBI_VAE3_Xt
)
3804 .monSecureWrite().monNonSecureWrite();
3805 InitReg(MISCREG_TLBI_VALE3_Xt
)
3806 .monSecureWrite().monNonSecureWrite();
3807 InitReg(MISCREG_PMINTENSET_EL1
)
3808 .allPrivileges().exceptUserMode()
3809 .mapsTo(MISCREG_PMINTENSET
);
3810 InitReg(MISCREG_PMINTENCLR_EL1
)
3811 .allPrivileges().exceptUserMode()
3812 .mapsTo(MISCREG_PMINTENCLR
);
3813 InitReg(MISCREG_PMCR_EL0
)
3815 .mapsTo(MISCREG_PMCR
);
3816 InitReg(MISCREG_PMCNTENSET_EL0
)
3818 .mapsTo(MISCREG_PMCNTENSET
);
3819 InitReg(MISCREG_PMCNTENCLR_EL0
)
3821 .mapsTo(MISCREG_PMCNTENCLR
);
3822 InitReg(MISCREG_PMOVSCLR_EL0
)
3824 // .mapsTo(MISCREG_PMOVSCLR);
3825 InitReg(MISCREG_PMSWINC_EL0
)
3827 .mapsTo(MISCREG_PMSWINC
);
3828 InitReg(MISCREG_PMSELR_EL0
)
3830 .mapsTo(MISCREG_PMSELR
);
3831 InitReg(MISCREG_PMCEID0_EL0
)
3833 .mapsTo(MISCREG_PMCEID0
);
3834 InitReg(MISCREG_PMCEID1_EL0
)
3836 .mapsTo(MISCREG_PMCEID1
);
3837 InitReg(MISCREG_PMCCNTR_EL0
)
3839 .mapsTo(MISCREG_PMCCNTR
);
3840 InitReg(MISCREG_PMXEVTYPER_EL0
)
3842 .mapsTo(MISCREG_PMXEVTYPER
);
3843 InitReg(MISCREG_PMCCFILTR_EL0
)
3845 InitReg(MISCREG_PMXEVCNTR_EL0
)
3847 .mapsTo(MISCREG_PMXEVCNTR
);
3848 InitReg(MISCREG_PMUSERENR_EL0
)
3849 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
3850 .mapsTo(MISCREG_PMUSERENR
);
3851 InitReg(MISCREG_PMOVSSET_EL0
)
3853 .mapsTo(MISCREG_PMOVSSET
);
3854 InitReg(MISCREG_MAIR_EL1
)
3855 .allPrivileges().exceptUserMode()
3856 .mapsTo(MISCREG_PRRR_NS
, MISCREG_NMRR_NS
);
3857 InitReg(MISCREG_AMAIR_EL1
)
3858 .allPrivileges().exceptUserMode()
3859 .mapsTo(MISCREG_AMAIR0_NS
, MISCREG_AMAIR1_NS
);
3860 InitReg(MISCREG_MAIR_EL2
)
3862 .mapsTo(MISCREG_HMAIR0
, MISCREG_HMAIR1
);
3863 InitReg(MISCREG_AMAIR_EL2
)
3865 .mapsTo(MISCREG_HAMAIR0
, MISCREG_HAMAIR1
);
3866 InitReg(MISCREG_MAIR_EL3
)
3868 InitReg(MISCREG_AMAIR_EL3
)
3870 InitReg(MISCREG_L2CTLR_EL1
)
3871 .allPrivileges().exceptUserMode();
3872 InitReg(MISCREG_L2ECTLR_EL1
)
3873 .allPrivileges().exceptUserMode();
3874 InitReg(MISCREG_VBAR_EL1
)
3875 .allPrivileges().exceptUserMode()
3876 .mapsTo(MISCREG_VBAR_NS
);
3877 InitReg(MISCREG_RVBAR_EL1
)
3878 .allPrivileges().exceptUserMode().writes(0);
3879 InitReg(MISCREG_ISR_EL1
)
3880 .allPrivileges().exceptUserMode().writes(0);
3881 InitReg(MISCREG_VBAR_EL2
)
3883 .mapsTo(MISCREG_HVBAR
);
3884 InitReg(MISCREG_RVBAR_EL2
)
3885 .mon().hyp().writes(0);
3886 InitReg(MISCREG_VBAR_EL3
)
3888 InitReg(MISCREG_RVBAR_EL3
)
3890 InitReg(MISCREG_RMR_EL3
)
3892 InitReg(MISCREG_CONTEXTIDR_EL1
)
3893 .allPrivileges().exceptUserMode()
3894 .mapsTo(MISCREG_CONTEXTIDR_NS
);
3895 InitReg(MISCREG_TPIDR_EL1
)
3896 .allPrivileges().exceptUserMode()
3897 .mapsTo(MISCREG_TPIDRPRW_NS
);
3898 InitReg(MISCREG_TPIDR_EL0
)
3900 .mapsTo(MISCREG_TPIDRURW_NS
);
3901 InitReg(MISCREG_TPIDRRO_EL0
)
3902 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
3903 .mapsTo(MISCREG_TPIDRURO_NS
);
3904 InitReg(MISCREG_TPIDR_EL2
)
3906 .mapsTo(MISCREG_HTPIDR
);
3907 InitReg(MISCREG_TPIDR_EL3
)
3909 InitReg(MISCREG_CNTKCTL_EL1
)
3910 .allPrivileges().exceptUserMode()
3911 .mapsTo(MISCREG_CNTKCTL
);
3912 InitReg(MISCREG_CNTFRQ_EL0
)
3914 .mapsTo(MISCREG_CNTFRQ
);
3915 InitReg(MISCREG_CNTPCT_EL0
)
3917 .mapsTo(MISCREG_CNTPCT
); /* 64b */
3918 InitReg(MISCREG_CNTVCT_EL0
)
3921 .mapsTo(MISCREG_CNTVCT
); /* 64b */
3922 InitReg(MISCREG_CNTP_TVAL_EL0
)
3924 .mapsTo(MISCREG_CNTP_TVAL_NS
);
3925 InitReg(MISCREG_CNTP_CTL_EL0
)
3927 .mapsTo(MISCREG_CNTP_CTL_NS
);
3928 InitReg(MISCREG_CNTP_CVAL_EL0
)
3930 .mapsTo(MISCREG_CNTP_CVAL_NS
); /* 64b */
3931 InitReg(MISCREG_CNTV_TVAL_EL0
)
3933 .mapsTo(MISCREG_CNTV_TVAL
);
3934 InitReg(MISCREG_CNTV_CTL_EL0
)
3936 .mapsTo(MISCREG_CNTV_CTL
);
3937 InitReg(MISCREG_CNTV_CVAL_EL0
)
3939 .mapsTo(MISCREG_CNTV_CVAL
); /* 64b */
3940 InitReg(MISCREG_PMEVCNTR0_EL0
)
3942 // .mapsTo(MISCREG_PMEVCNTR0);
3943 InitReg(MISCREG_PMEVCNTR1_EL0
)
3945 // .mapsTo(MISCREG_PMEVCNTR1);
3946 InitReg(MISCREG_PMEVCNTR2_EL0
)
3948 // .mapsTo(MISCREG_PMEVCNTR2);
3949 InitReg(MISCREG_PMEVCNTR3_EL0
)
3951 // .mapsTo(MISCREG_PMEVCNTR3);
3952 InitReg(MISCREG_PMEVCNTR4_EL0
)
3954 // .mapsTo(MISCREG_PMEVCNTR4);
3955 InitReg(MISCREG_PMEVCNTR5_EL0
)
3957 // .mapsTo(MISCREG_PMEVCNTR5);
3958 InitReg(MISCREG_PMEVTYPER0_EL0
)
3960 // .mapsTo(MISCREG_PMEVTYPER0);
3961 InitReg(MISCREG_PMEVTYPER1_EL0
)
3963 // .mapsTo(MISCREG_PMEVTYPER1);
3964 InitReg(MISCREG_PMEVTYPER2_EL0
)
3966 // .mapsTo(MISCREG_PMEVTYPER2);
3967 InitReg(MISCREG_PMEVTYPER3_EL0
)
3969 // .mapsTo(MISCREG_PMEVTYPER3);
3970 InitReg(MISCREG_PMEVTYPER4_EL0
)
3972 // .mapsTo(MISCREG_PMEVTYPER4);
3973 InitReg(MISCREG_PMEVTYPER5_EL0
)
3975 // .mapsTo(MISCREG_PMEVTYPER5);
3976 InitReg(MISCREG_CNTVOFF_EL2
)
3978 .mapsTo(MISCREG_CNTVOFF
); /* 64b */
3979 InitReg(MISCREG_CNTHCTL_EL2
)
3981 .mapsTo(MISCREG_CNTHCTL
);
3982 InitReg(MISCREG_CNTHP_TVAL_EL2
)
3984 .mapsTo(MISCREG_CNTHP_TVAL
);
3985 InitReg(MISCREG_CNTHP_CTL_EL2
)
3987 .mapsTo(MISCREG_CNTHP_CTL
);
3988 InitReg(MISCREG_CNTHP_CVAL_EL2
)
3990 .mapsTo(MISCREG_CNTHP_CVAL
); /* 64b */
3991 InitReg(MISCREG_CNTPS_TVAL_EL1
)
3992 .mon().privSecure();
3993 InitReg(MISCREG_CNTPS_CTL_EL1
)
3994 .mon().privSecure();
3995 InitReg(MISCREG_CNTPS_CVAL_EL1
)
3996 .mon().privSecure();
3997 InitReg(MISCREG_IL1DATA0_EL1
)
3998 .allPrivileges().exceptUserMode();
3999 InitReg(MISCREG_IL1DATA1_EL1
)
4000 .allPrivileges().exceptUserMode();
4001 InitReg(MISCREG_IL1DATA2_EL1
)
4002 .allPrivileges().exceptUserMode();
4003 InitReg(MISCREG_IL1DATA3_EL1
)
4004 .allPrivileges().exceptUserMode();
4005 InitReg(MISCREG_DL1DATA0_EL1
)
4006 .allPrivileges().exceptUserMode();
4007 InitReg(MISCREG_DL1DATA1_EL1
)
4008 .allPrivileges().exceptUserMode();
4009 InitReg(MISCREG_DL1DATA2_EL1
)
4010 .allPrivileges().exceptUserMode();
4011 InitReg(MISCREG_DL1DATA3_EL1
)
4012 .allPrivileges().exceptUserMode();
4013 InitReg(MISCREG_DL1DATA4_EL1
)
4014 .allPrivileges().exceptUserMode();
4015 InitReg(MISCREG_L2ACTLR_EL1
)
4016 .allPrivileges().exceptUserMode();
4017 InitReg(MISCREG_CPUACTLR_EL1
)
4018 .allPrivileges().exceptUserMode();
4019 InitReg(MISCREG_CPUECTLR_EL1
)
4020 .allPrivileges().exceptUserMode();
4021 InitReg(MISCREG_CPUMERRSR_EL1
)
4022 .allPrivileges().exceptUserMode();
4023 InitReg(MISCREG_L2MERRSR_EL1
)
4026 .allPrivileges().exceptUserMode();
4027 InitReg(MISCREG_CBAR_EL1
)
4028 .allPrivileges().exceptUserMode().writes(0);
4029 InitReg(MISCREG_CONTEXTIDR_EL2
)
4031 InitReg(MISCREG_CNTHV_CTL_EL2
)
4033 InitReg(MISCREG_CNTHV_CVAL_EL2
)
4035 InitReg(MISCREG_CNTHV_TVAL_EL2
)
4039 InitReg(MISCREG_NOP
)
4041 InitReg(MISCREG_RAZ
)
4042 .allPrivileges().exceptUserMode().writes(0);
4043 InitReg(MISCREG_CP14_UNIMPL
)
4046 InitReg(MISCREG_CP15_UNIMPL
)
4049 InitReg(MISCREG_UNKNOWN
);
4050 InitReg(MISCREG_IMPDEF_UNIMPL
)
4052 .warnNotFail(impdefAsNop
);
4054 // RAS extension (unimplemented)
4055 InitReg(MISCREG_ERRIDR_EL1
)
4058 InitReg(MISCREG_ERRSELR_EL1
)
4061 InitReg(MISCREG_ERXFR_EL1
)
4064 InitReg(MISCREG_ERXCTLR_EL1
)
4067 InitReg(MISCREG_ERXSTATUS_EL1
)
4070 InitReg(MISCREG_ERXADDR_EL1
)
4073 InitReg(MISCREG_ERXMISC0_EL1
)
4076 InitReg(MISCREG_ERXMISC1_EL1
)
4079 InitReg(MISCREG_DISR_EL1
)
4082 InitReg(MISCREG_VSESR_EL2
)
4085 InitReg(MISCREG_VDISR_EL2
)
4089 // Register mappings for some unimplemented registers:
4093 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
4094 // DBGDTRRX_EL0 -> DBGDTRRXint
4095 // DBGDTRTX_EL0 -> DBGDTRRXint
4096 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
4101 } // namespace ArmISA