48 #include "params/ArmISA.hh"
59 std::unordered_map<MiscRegNum32, MiscRegIndex> miscRegNum32ToIdx{
523 auto it = miscRegNum32ToIdx.find(cop_reg);
524 if (it != miscRegNum32ToIdx.end()) {
527 warn(
"CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
528 crn, opc1, crm,
opc2);
537 auto it = miscRegNum32ToIdx.find(cop_reg);
538 if (it != miscRegNum32ToIdx.end()) {
542 (crn == 9 && (crm <= 2 || crm >= 5)) ||
543 (crn == 10 && opc1 == 0 && crm <= 1) ||
544 (crn == 11 && opc1 <= 7 && (crm <= 8 || crm ==15))) {
556 auto it = miscRegNum32ToIdx.find(cop_reg);
557 if (it != miscRegNum32ToIdx.end()) {
564 std::tuple<bool, bool>
567 bool secure = !scr.ns;
568 bool can_read =
false;
569 bool undefined =
false;
608 return std::make_tuple(can_read, undefined);
611 std::tuple<bool, bool>
614 bool secure = !scr.ns;
615 bool can_write =
false;
616 bool undefined =
false;
655 return std::make_tuple(can_write, undefined);
664 if (trap_cond && (!
EL2Enabled(tc) || !hcr.tge))
680 int reg_as_int =
static_cast<int>(
reg);
693 return isa->snsBankedIndex64(
reg, scr.ns);
741 std::unordered_map<MiscRegIndex, MiscRegNum64> idxToMiscRegNum;
745 std::unordered_map<MiscRegNum64, MiscRegIndex> miscRegNumToIdx{
1253 faultSpEL0(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1254 const MiscRegOp64 &inst)
1257 return inst.undefined();
1263 faultDaif(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1264 const MiscRegOp64 &inst)
1269 if ((el2_enabled && hcr.e2h && hcr.tge) || sctlr.uma == 0) {
1270 if (el2_enabled && hcr.tge) {
1271 return inst.generateTrap(
EL2);
1273 return inst.generateTrap(
EL1);
1281 faultDczvaEL0(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1282 const MiscRegOp64 &inst)
1292 const bool in_host = hcr.e2h && hcr.tge;
1293 if (!(el2_enabled && in_host) && !sctlr.dze) {
1294 if (el2_enabled && hcr.tge) {
1295 return inst.generateTrap(
EL2);
1297 return inst.generateTrap(
EL1);
1299 }
else if (el2_enabled && !in_host && hcr.tdz) {
1300 return inst.generateTrap(
EL2);
1301 }
else if (el2_enabled && in_host && !sctlr2.dze) {
1302 return inst.generateTrap(
EL2);
1309 faultCvacEL0(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1310 const MiscRegOp64 &inst)
1317 const bool in_host = hcr.e2h && hcr.tge;
1318 if (!(el2_enabled && in_host) && !sctlr.uci) {
1319 if (el2_enabled && hcr.tge) {
1320 return inst.generateTrap(
EL2);
1322 return inst.generateTrap(
EL1);
1324 }
else if (el2_enabled && !in_host && hcr.tpc) {
1325 return inst.generateTrap(
EL2);
1326 }
else if (el2_enabled && in_host && !sctlr2.uci) {
1327 return inst.generateTrap(
EL2);
1334 faultFpcrEL0(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1335 const MiscRegOp64 &inst)
1343 const bool in_host = hcr.e2h && hcr.tge;
1344 if (!(el2_enabled && in_host) && cpacr.fpen != 0
b11) {
1345 if (el2_enabled && hcr.tge) {
1348 return inst.generateTrap(
EL1,
1351 }
else if (el2_enabled && in_host && cptr_el2.fpen != 0
b11) {
1352 return inst.generateTrap(
EL2,
1354 }
else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0
b1) == 0
b0)) {
1355 return inst.generateTrap(
EL2,
1357 }
else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1358 return inst.generateTrap(
EL2,
1361 return inst.generateTrap(
EL3,
1369 faultFpcrEL1(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1370 const MiscRegOp64 &inst)
1378 if ((cpacr.fpen & 0
b1) == 0
b0) {
1379 return inst.generateTrap(
EL1,
1381 }
else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
1382 return inst.generateTrap(
EL2,
1384 }
else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0
b1) == 0
b0)) {
1385 return inst.generateTrap(
EL2,
1388 return inst.generateTrap(
EL3,
1396 faultFpcrEL2(
const MiscRegLUTEntry &entry, ThreadContext *tc,
1397 const MiscRegOp64 &inst)
1403 if (!hcr.e2h && cptr_el2.tfp) {
1404 return inst.generateTrap(
EL2,
1406 }
else if (hcr.e2h && ((cptr_el2.fpen & 0
b1) == 0
b0)) {
1407 return inst.generateTrap(
EL2,
1410 return inst.generateTrap(
EL3,
1418 faultFpcrEL3(
const MiscRegLUTEntry &entry,
1419 ThreadContext *tc,
const MiscRegOp64 &inst)
1423 return inst.generateTrap(
EL3,
1431 faultPouEL0(
const MiscRegLUTEntry &entry,
1432 ThreadContext *tc,
const MiscRegOp64 &inst)
1439 const bool in_host = hcr.e2h && hcr.tge;
1440 if (!(el2_enabled && in_host) && !sctlr.uci) {
1441 if (el2_enabled && hcr.tge) {
1442 return inst.generateTrap(
EL2);
1444 return inst.generateTrap(
EL1);
1446 }
else if (el2_enabled && !in_host && hcr.tpu) {
1447 return inst.generateTrap(
EL2);
1448 }
else if (el2_enabled && !in_host &&
1449 HaveExt(tc, ArmExtension::FEAT_EVT) && hcr.tocu) {
1450 return inst.generateTrap(
EL2);
1451 }
else if (el2_enabled && in_host && !sctlr2.uci) {
1452 return inst.generateTrap(
EL2);
1459 faultPouEL1(
const MiscRegLUTEntry &entry,
1460 ThreadContext *tc,
const MiscRegOp64 &inst)
1464 if (el2_enabled && hcr.tpu) {
1465 return inst.generateTrap(
EL2);
1466 }
else if (el2_enabled &&
HaveExt(tc, ArmExtension::FEAT_EVT) &&
1468 return inst.generateTrap(
EL2);
1475 faultPouIsEL1(
const MiscRegLUTEntry &entry,
1476 ThreadContext *tc,
const MiscRegOp64 &inst)
1480 if (el2_enabled && hcr.tpu) {
1481 return inst.generateTrap(
EL2);
1482 }
else if (el2_enabled &&
HaveExt(tc, ArmExtension::FEAT_EVT) &&
1484 return inst.generateTrap(
EL2);
1491 faultCtrEL0(
const MiscRegLUTEntry &entry,
1492 ThreadContext *tc,
const MiscRegOp64 &inst)
1499 const bool in_host = hcr.e2h && hcr.tge;
1500 if (!(el2_enabled && in_host) && !sctlr.uct) {
1501 if (el2_enabled && hcr.tge) {
1502 return inst.generateTrap(
EL2);
1504 return inst.generateTrap(
EL1);
1506 }
else if (el2_enabled && !in_host && hcr.tid2) {
1507 return inst.generateTrap(
EL2);
1508 }
else if (el2_enabled && in_host && !sctlr2.uct) {
1509 return inst.generateTrap(
EL2);
1516 faultMdccsrEL0(
const MiscRegLUTEntry &entry,
1517 ThreadContext *tc,
const MiscRegOp64 &inst)
1526 if (el2_enabled && hcr.tge) {
1527 return inst.generateTrap(
EL2);
1529 return inst.generateTrap(
EL1);
1531 }
else if (el2_enabled && mdcr_el2.tdcc) {
1532 return inst.generateTrap(
EL2);
1533 }
else if (el2_enabled && (hcr.tge || (mdcr_el2.tde || mdcr_el2.tda))) {
1534 return inst.generateTrap(
EL2);
1536 return inst.generateTrap(
EL3);
1543 faultMdccsrEL1(
const MiscRegLUTEntry &entry,
1544 ThreadContext *tc,
const MiscRegOp64 &inst)
1550 if (el2_enabled && mdcr_el2.tdcc) {
1551 return inst.generateTrap(
EL2);
1552 }
else if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1553 return inst.generateTrap(
EL2);
1555 return inst.generateTrap(
EL3);
1562 faultMdccsrEL2(
const MiscRegLUTEntry &entry,
1563 ThreadContext *tc,
const MiscRegOp64 &inst)
1567 return inst.generateTrap(
EL3);
1574 faultDebugEL1(
const MiscRegLUTEntry &entry,
1575 ThreadContext *tc,
const MiscRegOp64 &inst)
1581 if (el2_enabled && (mdcr_el2.tde || mdcr_el2.tda)) {
1582 return inst.generateTrap(
EL2);
1584 return inst.generateTrap(
EL3);
1591 faultDebugEL2(
const MiscRegLUTEntry &entry,
1592 ThreadContext *tc,
const MiscRegOp64 &inst)
1596 return inst.generateTrap(
EL3);
1603 faultHcrxEL2(
const MiscRegLUTEntry &entry,
1604 ThreadContext *tc,
const MiscRegOp64 &inst)
1608 return inst.generateTrap(
EL3);
1615 faultZcrEL1(
const MiscRegLUTEntry &entry,
1616 ThreadContext *tc,
const MiscRegOp64 &inst)
1624 if (!(cpacr_el1.zen & 0x1)) {
1626 }
else if (el2_enabled && !hcr.e2h && cptr_el2.tz) {
1628 }
else if (el2_enabled && hcr.e2h && !(cptr_el2.zen & 0x1)) {
1638 faultZcrEL2(
const MiscRegLUTEntry &entry,
1639 ThreadContext *tc,
const MiscRegOp64 &inst)
1645 if (!hcr.e2h && cptr_el2.tz) {
1647 }
else if (hcr.e2h && !(cptr_el2.zen & 0x1)) {
1657 faultZcrEL3(
const MiscRegLUTEntry &entry,
1658 ThreadContext *tc,
const MiscRegOp64 &inst)
1669 faultGicv3(
const MiscRegLUTEntry &entry,
1670 ThreadContext *tc,
const MiscRegOp64 &inst)
1672 auto gic =
static_cast<ArmSystem*
>(tc->getSystemPtr())->getGIC();
1674 return inst.undefined();
1681 faultIccSgiEL1(
const MiscRegLUTEntry &entry,
1682 ThreadContext *tc,
const MiscRegOp64 &inst)
1684 if (
auto fault = faultGicv3(entry, tc, inst); fault !=
NoFault) {
1688 const Gicv3CPUInterface::ICH_HCR_EL2 ich_hcr =
1692 if (
EL2Enabled(tc) && (hcr.fmo || hcr.imo || ich_hcr.TC)) {
1693 return inst.generateTrap(
EL2);
1695 return inst.generateTrap(
EL3);
1702 faultIccSgiEL2(
const MiscRegLUTEntry &entry,
1703 ThreadContext *tc,
const MiscRegOp64 &inst)
1705 if (
auto fault = faultGicv3(entry, tc, inst); fault !=
NoFault) {
1711 return inst.generateTrap(
EL3);
1718 faultCpacrEL1(
const MiscRegLUTEntry &entry,
1719 ThreadContext *tc,
const MiscRegOp64 &inst)
1724 return inst.generateTrap(
EL2);
1726 return inst.generateTrap(
EL3);
1733 faultCpacrEL2(
const MiscRegLUTEntry &entry,
1734 ThreadContext *tc,
const MiscRegOp64 &inst)
1738 return inst.generateTrap(
EL3);
1745 faultCpacrVheEL2(
const MiscRegLUTEntry &entry,
1746 ThreadContext *tc,
const MiscRegOp64 &inst)
1750 return faultCpacrEL2(entry, tc, inst);
1752 return inst.undefined();
1756 #define HCR_TRAP(bitfield) [] (const MiscRegLUTEntry &entry, \
1757 ThreadContext *tc, const MiscRegOp64 &inst) -> Fault \
1759 const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2); \
1760 if (EL2Enabled(tc) && hcr.bitfield) { \
1761 return inst.generateTrap(EL2); \
1768 faultTlbiOsEL1(
const MiscRegLUTEntry &entry,
1769 ThreadContext *tc,
const MiscRegOp64 &inst)
1773 if (el2_enabled && hcr.ttlb) {
1774 return inst.generateTrap(
EL2);
1775 }
else if (el2_enabled &&
HaveExt(tc, ArmExtension::FEAT_EVT) &&
1777 return inst.generateTrap(
EL2);
1784 faultTlbiIsEL1(
const MiscRegLUTEntry &entry,
1785 ThreadContext *tc,
const MiscRegOp64 &inst)
1789 if (el2_enabled && hcr.ttlb) {
1790 return inst.generateTrap(
EL2);
1791 }
else if (el2_enabled &&
HaveExt(tc, ArmExtension::FEAT_EVT) &&
1793 return inst.generateTrap(
EL2);
1800 faultCacheEL1(
const MiscRegLUTEntry &entry,
1801 ThreadContext *tc,
const MiscRegOp64 &inst)
1805 if (el2_enabled && hcr.tid2) {
1806 return inst.generateTrap(
EL2);
1807 }
else if (el2_enabled &&
HaveExt(tc, ArmExtension::FEAT_EVT) &&
1809 return inst.generateTrap(
EL2);
1816 faultPauthEL1(
const MiscRegLUTEntry &entry,
1817 ThreadContext *tc,
const MiscRegOp64 &inst)
1822 return inst.generateTrap(
EL2);
1824 return inst.generateTrap(
EL3);
1831 faultPauthEL2(
const MiscRegLUTEntry &entry,
1832 ThreadContext *tc,
const MiscRegOp64 &inst)
1836 return inst.generateTrap(
EL3);
1843 faultGenericTimerEL0(
const MiscRegLUTEntry &entry,
1844 ThreadContext *tc,
const MiscRegOp64 &inst)
1848 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
1851 if (!(in_host) && !cntkctl_el1.el0pcten && !cntkctl_el1.el0vcten) {
1852 if (el2_enabled && hcr.tge)
1853 return inst.generateTrap(
EL2);
1855 return inst.generateTrap(
EL1);
1856 }
else if (in_host && !cnthctl_el2.el0pcten && !cnthctl_el2.el0vcten) {
1857 return inst.generateTrap(
EL2);
1864 faultCntpctEL0(
const MiscRegLUTEntry &entry,
1865 ThreadContext *tc,
const MiscRegOp64 &inst)
1869 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
1872 if (!(in_host) && !cntkctl_el1.el0pcten) {
1873 if (el2_enabled && hcr.tge)
1874 return inst.generateTrap(
EL2);
1876 return inst.generateTrap(
EL1);
1877 }
else if (el2_enabled && !hcr.e2h &&
1878 !
static_cast<CNTHCTL
>(cnthctl_el2).el1pcten) {
1879 return inst.generateTrap(
EL2);
1880 }
else if (el2_enabled && hcr.e2h && !hcr.tge &&
1881 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).el1pcten) {
1882 return inst.generateTrap(
EL2);
1883 }
else if (in_host &&
1884 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).
el0pcten) {
1885 return inst.generateTrap(
EL2);
1892 faultCntpctEL1(
const MiscRegLUTEntry &entry,
1893 ThreadContext *tc,
const MiscRegOp64 &inst)
1898 if (el2_enabled && hcr.e2h &&
1899 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).el1pcten) {
1900 return inst.generateTrap(
EL2);
1901 }
else if (el2_enabled && !hcr.e2h &&
1902 !
static_cast<CNTHCTL
>(cnthctl_el2).el1pcten) {
1903 return inst.generateTrap(
EL2);
1910 faultCntvctEL0(
const MiscRegLUTEntry &entry,
1911 ThreadContext *tc,
const MiscRegOp64 &inst)
1915 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
1918 if (!(in_host) && !cntkctl_el1.el0vcten) {
1919 if (el2_enabled && hcr.tge)
1920 return inst.generateTrap(
EL2);
1922 return inst.generateTrap(
EL1);
1923 }
else if (in_host && !cnthctl_el2.el0vcten) {
1924 return inst.generateTrap(
EL2);
1925 }
else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvct) {
1926 return inst.generateTrap(
EL2);
1933 faultCntvctEL1(
const MiscRegLUTEntry &entry,
1934 ThreadContext *tc,
const MiscRegOp64 &inst)
1938 return inst.generateTrap(
EL2);
1946 faultCntpCtlEL0(
const MiscRegLUTEntry &entry,
1947 ThreadContext *tc,
const MiscRegOp64 &inst)
1951 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
1954 if (!(in_host) && !cntkctl_el1.el0pten) {
1955 if (el2_enabled && hcr.tge)
1956 return inst.generateTrap(
EL2);
1958 return inst.generateTrap(
EL1);
1959 }
else if (el2_enabled && !hcr.e2h &&
1960 !
static_cast<CNTHCTL
>(cnthctl_el2).el1pcen) {
1961 return inst.generateTrap(
EL2);
1962 }
else if (el2_enabled && hcr.e2h && !hcr.tge &&
1963 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).el1pten) {
1964 return inst.generateTrap(
EL2);
1965 }
else if (in_host &&
1966 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).
el0pten) {
1967 return inst.generateTrap(
EL2);
1974 faultCntpCtlEL1(
const MiscRegLUTEntry &entry,
1975 ThreadContext *tc,
const MiscRegOp64 &inst)
1980 if (el2_enabled && !hcr.e2h &&
1981 !
static_cast<CNTHCTL
>(cnthctl_el2).el1pcen) {
1982 return inst.generateTrap(
EL2);
1983 }
else if (el2_enabled && hcr.e2h &&
1984 !
static_cast<CNTHCTL_E2H
>(cnthctl_el2).el1pten) {
1985 return inst.generateTrap(
EL2);
1993 faultCntvCtlEL0(
const MiscRegLUTEntry &entry,
1994 ThreadContext *tc,
const MiscRegOp64 &inst)
1998 const bool in_host = el2_enabled && hcr.e2h && hcr.tge;
2001 if (!(in_host) && !cntkctl_el1.el0vten) {
2002 if (el2_enabled && hcr.tge)
2003 return inst.generateTrap(
EL2);
2005 return inst.generateTrap(
EL1);
2006 }
else if (in_host && !cnthctl_el2.el0vten) {
2007 return inst.generateTrap(
EL2);
2008 }
else if (el2_enabled && !(hcr.e2h && hcr.tge) && cnthctl_el2.el1tvt) {
2009 return inst.generateTrap(
EL2);
2016 faultCntvCtlEL1(
const MiscRegLUTEntry &entry,
2017 ThreadContext *tc,
const MiscRegOp64 &inst)
2021 return inst.generateTrap(
EL2);
2028 faultCntpsCtlEL1(
const MiscRegLUTEntry &entry,
2029 ThreadContext *tc,
const MiscRegOp64 &inst)
2034 return inst.undefined();
2036 return inst.generateTrap(
EL3);
2040 return inst.undefined();
2045 faultUnimplemented(
const MiscRegLUTEntry &entry,
2046 ThreadContext *tc,
const MiscRegOp64 &inst)
2051 return inst.undefined();
2056 faultImpdefUnimplEL1(
const MiscRegLUTEntry &entry,
2057 ThreadContext *tc,
const MiscRegOp64 &inst)
2061 return inst.generateTrap(
EL2);
2063 return faultUnimplemented(entry, tc, inst);
2068 faultEsm(
const MiscRegLUTEntry &entry,
2069 ThreadContext *tc,
const MiscRegOp64 &inst)
2080 faultTsmSmen(
const MiscRegLUTEntry &entry,
2081 ThreadContext *tc,
const MiscRegOp64 &inst)
2086 if (el2_enabled && !hcr_el2.e2h && cptr_el2.tsm) {
2088 }
else if (el2_enabled && hcr_el2.e2h && !(cptr_el2.smen & 0
b1)) {
2091 return faultEsm(entry, tc, inst);
2096 faultSmenEL1(
const MiscRegLUTEntry &entry,
2097 ThreadContext *tc,
const MiscRegOp64 &inst)
2100 if (!(cpacr.smen & 0
b1)) {
2103 return faultTsmSmen(entry, tc, inst);
2108 faultSmenEL0(
const MiscRegLUTEntry &entry,
2109 ThreadContext *tc,
const MiscRegOp64 &inst)
2113 const bool in_host = hcr.e2h && hcr.tge;
2117 if (!(el2_enabled && in_host) && cpacr.smen != 0
b11) {
2118 if (el2_enabled && hcr.tge)
2122 }
else if (el2_enabled && in_host && cptr_el2.smen != 0
b11) {
2125 return faultTsmSmen(entry, tc, inst);
2130 faultRng(
const MiscRegLUTEntry &entry,
2131 ThreadContext *tc,
const MiscRegOp64 &inst)
2134 if (
HaveExt(tc, ArmExtension::FEAT_RNG_TRAP) && scr.trndr) {
2135 return inst.generateTrap(
EL3);
2136 }
else if (!
HaveExt(tc, ArmExtension::FEAT_RNG)) {
2137 return inst.undefined();
2144 faultIdst(
const MiscRegLUTEntry &entry,
2145 ThreadContext *tc,
const MiscRegOp64 &inst)
2147 if (
HaveExt(tc, ArmExtension::FEAT_IDST)) {
2150 return inst.generateTrap(
EL2);
2152 return inst.generateTrap(
EL1);
2155 return inst.undefined();
2163 unsigned crn,
unsigned crm,
2173 auto it = miscRegNumToIdx.find(sys_reg);
2174 if (it != miscRegNumToIdx.end()) {
2178 if ((sys_reg.
op0 == 1 || sys_reg.
op0 == 3) &&
2179 (sys_reg.
crn == 11 || sys_reg.
crn == 15)) {
2190 if (
auto it = idxToMiscRegNum.find(misc_reg);
2191 it != idxToMiscRegNum.end()) {
2194 panic(
"Invalid MiscRegIndex: %d\n", misc_reg);
2206 template <MiscRegInfo Sec, MiscRegInfo NonSec>
2235 const bool el2_host =
EL2Enabled(tc) && hcr.e2h;
2262 switch (
system->highestEL()) {
2276 panic(
"Invalid highest implemented exception level");
2293 static bool completed =
false;
2311 bool LSMAOE =
false;
2314 bool nTLSMD =
false;
2322 const bool vhe_implemented =
release->
has(ArmExtension::FEAT_VHE);
2323 const bool sel2_implemented =
release->
has(ArmExtension::FEAT_SEL2);
2380 mvfr1.flushToZero = 1;
2381 mvfr1.defaultNaN = 1;
2382 mvfr1.advSimdLoadStore = 1;
2383 mvfr1.advSimdInteger = 1;
2384 mvfr1.advSimdSinglePrecision = 1;
2385 mvfr1.advSimdHalfPrecision = 1;
2386 mvfr1.vfpHalfPrecision = 1;
2393 mvfr0.advSimdRegisters = 2;
2394 mvfr0.singlePrecision = 2;
2395 mvfr0.doublePrecision = 2;
2396 mvfr0.vfpExceptionTrapping = 0;
2398 mvfr0.squareRoot = 1;
2399 mvfr0.shortVectors = 1;
2400 mvfr0.roundingModes = 1;
2425 .privSecure(!aarch32EL3)
2435 .privSecure(!aarch32EL3)
2451 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2609 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2657 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2666 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2669 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2672 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2693 .allPrivileges().exceptUserMode().writes(0);
2698 unsigned line_size_words =
2699 system->cacheLineSize() / 4;
2700 unsigned log2_line_size_words = 0;
2702 while (line_size_words >>= 1) {
2703 ++log2_line_size_words;
2708 ctr.iCacheLineSize = log2_line_size_words;
2710 ctr.l1IndexPolicy = 0x3;
2712 ctr.dCacheLineSize = log2_line_size_words;
2714 ctr.erg = log2_line_size_words;
2716 ctr.cwg = log2_line_size_words;
2723 .allPrivileges().exceptUserMode().writes(0);
2726 .allPrivileges().exceptUserMode().writes(0);
2729 .allPrivileges().exceptUserMode().writes(0);
2732 .allPrivileges().exceptUserMode().writes(0);
2736 .allPrivileges().exceptUserMode().writes(0);
2739 .allPrivileges().exceptUserMode().writes(0);
2743 bool have_timer = (
system &&
system->getGenericTimer() !=
nullptr);
2745 (release->has(ArmExtension::SECURITY) ?
2747 (release->has(ArmExtension::VIRTUALIZATION) ?
2749 (have_timer ? 0x00010000 : 0x0);
2752 .allPrivileges().exceptUserMode().writes(0);
2754 .reset(
p.pmu ? 0x03000000 : 0)
2755 .allPrivileges().exceptUserMode().writes(0);
2757 .allPrivileges().exceptUserMode().writes(0);
2759 .reset([
p,release=release](){
2761 if (release->has(ArmExtension::LPAE))
2762 mmfr0 = (mmfr0 & ~0xf) | 0x5;
2765 .allPrivileges().exceptUserMode().writes(0);
2768 .allPrivileges().exceptUserMode().writes(0);
2771 .allPrivileges().exceptUserMode().writes(0);
2774 .allPrivileges().exceptUserMode().writes(0);
2777 .allPrivileges().exceptUserMode().writes(0);
2780 .allPrivileges().exceptUserMode().writes(0);
2783 .allPrivileges().exceptUserMode().writes(0);
2786 .allPrivileges().exceptUserMode().writes(0);
2789 .allPrivileges().exceptUserMode().writes(0);
2792 .allPrivileges().exceptUserMode().writes(0);
2794 .reset([
p,release=release] () {
2795 ISAR5 isar5 =
p.id_isar5;
2796 if (release->has(ArmExtension::CRYPTO)) {
2807 isar5.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
2808 isar5.vcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
2811 .allPrivileges().exceptUserMode().writes(0);
2813 .reset([
p,release=release] () {
2814 ISAR6 isar6 =
p.id_isar6;
2815 isar6.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
2818 .allPrivileges().exceptUserMode().writes(0);
2820 .allPrivileges().exceptUserMode().writes(0);
2822 .allPrivileges().exceptUserMode().writes(0);
2825 .allPrivileges().exceptUserMode().writes(0);
2830 .privSecure(!aarch32EL3)
2831 .nonSecure().exceptUserMode();
2834 .secure().exceptUserMode();
2837 .hyp().monNonSecure();
2840 .hyp().monNonSecure();
2846 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
2847 | (LSMAOE ? 0 : 0x10)
2848 | (nTLSMD ? 0 : 0x8));
2850 auto sctlr_reset = [
aarch64=highestELIs64] ()
2876 .privSecure(!aarch32EL3)
2877 .nonSecure().exceptUserMode();
2881 .secure().exceptUserMode();
2886 .privSecure(!aarch32EL3)
2887 .nonSecure().exceptUserMode();
2890 .secure().exceptUserMode();
2892 .allPrivileges().exceptUserMode();
2896 .reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
2897 .mon().secure().exceptUserMode()
2903 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
2906 .hyp().monNonSecure()
2907 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
2908 | (IESB ? 0 : 0x200000)
2909 | (EnDA ? 0 : 0x8000000)
2910 | (EnIB ? 0 : 0x40000000)
2911 | (EnIA ? 0 : 0x80000000))
2914 .hyp().monNonSecure();
2916 .hyp().monNonSecure()
2917 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
2918 0x90000000 :
mask(31, 0));
2920 .hyp().monNonSecure()
2921 .res0(release->has(ArmExtension::VIRTUALIZATION) ?
2922 0xffa9ff8c :
mask(31, 0));
2924 .hyp().monNonSecure();
2928 .hyp().monNonSecure();
2930 .hyp().monNonSecure();
2934 .hyp().monNonSecure();
2939 .privSecure(!aarch32EL3)
2940 .nonSecure().exceptUserMode();
2943 .secure().exceptUserMode();
2948 .privSecure(!aarch32EL3)
2949 .nonSecure().exceptUserMode();
2952 .secure().exceptUserMode();
2957 .privSecure(!aarch32EL3)
2958 .nonSecure().exceptUserMode();
2961 .secure().exceptUserMode();
2963 .hyp().monNonSecure();
2965 .hyp().monNonSecure();
2970 .privSecure(!aarch32EL3)
2971 .nonSecure().exceptUserMode();
2974 .secure().exceptUserMode();
2980 .privSecure(!aarch32EL3)
2981 .nonSecure().exceptUserMode();
2984 .secure().exceptUserMode();
2990 .privSecure(!aarch32EL3)
2991 .nonSecure().exceptUserMode();
2994 .secure().exceptUserMode();
3003 .privSecure(!aarch32EL3)
3004 .nonSecure().exceptUserMode();
3009 .secure().exceptUserMode();
3018 .privSecure(!aarch32EL3)
3019 .nonSecure().exceptUserMode();
3024 .secure().exceptUserMode();
3026 .hyp().monNonSecure();
3028 .hyp().monNonSecure();
3030 .hyp().monNonSecure();
3035 .privSecure(!aarch32EL3)
3036 .nonSecure().exceptUserMode();
3039 .secure().exceptUserMode();
3044 .privSecure(!aarch32EL3)
3045 .nonSecure().exceptUserMode();
3048 .secure().exceptUserMode();
3050 .hyp().monNonSecure();
3052 .hyp().monNonSecure();
3054 .hyp().monNonSecure();
3058 .writes(1).exceptUserMode();
3062 .writes(1).exceptUserMode();
3067 .privSecure(!aarch32EL3)
3068 .nonSecure().exceptUserMode();
3071 .secure().exceptUserMode();
3073 .writes(1).exceptUserMode();
3077 .writes(1).exceptUserMode();
3083 .writes(1).exceptUserMode();
3087 .writes(1).exceptUserMode();
3091 .writes(1).exceptUserMode();
3095 .writes(1).exceptUserMode();
3097 .writes(1).exceptUserMode();
3099 .writes(1).exceptUserMode();
3101 .writes(1).exceptUserMode();
3103 .writes(1).exceptUserMode();
3105 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3107 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3109 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3111 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3113 .writes(1).exceptUserMode();
3117 .writes(1).exceptUserMode();
3125 .writes(1).exceptUserMode();
3129 .writes(1).exceptUserMode();
3133 .writes(1).exceptUserMode();
3135 .monNonSecureWrite().hypWrite();
3137 .monNonSecureWrite().hypWrite();
3139 .writes(1).exceptUserMode();
3141 .writes(1).exceptUserMode();
3143 .writes(1).exceptUserMode();
3145 .writes(1).exceptUserMode();
3147 .writes(1).exceptUserMode();
3149 .writes(1).exceptUserMode();
3151 .writes(1).exceptUserMode();
3153 .writes(1).exceptUserMode();
3155 .writes(1).exceptUserMode();
3157 .writes(1).exceptUserMode();
3159 .writes(1).exceptUserMode();
3161 .writes(1).exceptUserMode();
3163 .writes(1).exceptUserMode();
3165 .writes(1).exceptUserMode();
3167 .writes(1).exceptUserMode();
3169 .writes(1).exceptUserMode();
3171 .writes(1).exceptUserMode();
3173 .writes(1).exceptUserMode();
3175 .monNonSecureWrite().hypWrite();
3177 .monNonSecureWrite().hypWrite();
3179 .monNonSecureWrite().hypWrite();
3181 .monNonSecureWrite().hypWrite();
3183 .monNonSecureWrite().hypWrite();
3185 .monNonSecureWrite().hypWrite();
3187 .monNonSecureWrite().hypWrite();
3189 .monNonSecureWrite().hypWrite();
3191 .monNonSecureWrite().hypWrite();
3193 .monNonSecureWrite().hypWrite();
3195 .monNonSecureWrite().hypWrite();
3197 .monNonSecureWrite().hypWrite();
3223 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3225 .allPrivileges().exceptUserMode();
3227 .allPrivileges().exceptUserMode();
3232 .allPrivileges().exceptUserMode();
3235 .allPrivileges().exceptUserMode();
3253 .privSecure(!aarch32EL3)
3254 .nonSecure().exceptUserMode();
3257 .secure().exceptUserMode();
3262 .privSecure(!aarch32EL3)
3263 .nonSecure().exceptUserMode();
3266 .secure().exceptUserMode();
3287 .privSecure(!aarch32EL3)
3288 .nonSecure().exceptUserMode();
3291 .secure().exceptUserMode();
3296 .privSecure(!aarch32EL3)
3297 .nonSecure().exceptUserMode();
3300 .secure().exceptUserMode();
3302 .res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
3306 .privSecure(!aarch32EL3)
3307 .nonSecure().exceptUserMode();
3310 .secure().exceptUserMode();
3312 .res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
3316 .privSecure(!aarch32EL3)
3317 .nonSecure().exceptUserMode();
3320 .secure().exceptUserMode();
3322 .hyp().monNonSecure();
3324 .hyp().monNonSecure();
3328 .hyp().monNonSecure();
3332 .hyp().monNonSecure();
3337 .privSecure(!aarch32EL3)
3338 .nonSecure().exceptUserMode();
3341 .secure().exceptUserMode();
3350 .mon().secure().exceptUserMode();
3352 .allPrivileges().exceptUserMode().writes(0);
3354 .hyp().monNonSecure()
3359 .allPrivileges().exceptUserMode();
3364 .privSecure(!aarch32EL3)
3365 .nonSecure().exceptUserMode();
3368 .secure().exceptUserMode();
3374 .privSecure(!aarch32EL3)
3384 .userNonSecureWrite(0).userSecureRead(1)
3385 .privSecure(!aarch32EL3)
3389 .secure().userSecureWrite(0);
3394 .nonSecure().exceptUserMode()
3395 .privSecure(!aarch32EL3);
3398 .secure().exceptUserMode();
3400 .hyp().monNonSecure();
3405 .privSecureWrite(aarch32EL3);
3417 .privSecure(!aarch32EL3)
3418 .userSecureRead(!aarch32EL3)
3419 .userSecureWrite(!aarch32EL3)
3424 .privSecure(aarch32EL3)
3431 .privSecure(!aarch32EL3)
3432 .userSecureRead(!aarch32EL3)
3433 .userSecureWrite(!aarch32EL3);
3437 .privSecure(aarch32EL3);
3443 .privSecure(!aarch32EL3)
3444 .userSecureRead(!aarch32EL3)
3445 .userSecureWrite(!aarch32EL3);
3449 .privSecure(aarch32EL3);
3481 .allPrivileges().exceptUserMode();
3484 .allPrivileges().exceptUserMode();
3487 .allPrivileges().exceptUserMode();
3490 .allPrivileges().exceptUserMode();
3493 .allPrivileges().exceptUserMode();
3496 .allPrivileges().exceptUserMode();
3499 .allPrivileges().exceptUserMode();
3502 .allPrivileges().exceptUserMode();
3505 .allPrivileges().exceptUserMode();
3508 .writes(1).exceptUserMode();
3511 .allPrivileges().exceptUserMode();
3514 .allPrivileges().exceptUserMode().writes(0);
3516 .hyp().monNonSecure();
3518 .hyp().monNonSecure();
3521 .allPrivileges().exceptUserMode();
3525 .allPrivileges().exceptUserMode();
3529 .fault(
EL1, faultMdccsrEL1)
3530 .fault(
EL2, faultMdccsrEL2)
3545 .allPrivileges().exceptUserMode()
3546 .fault(
EL1, faultDebugEL1)
3547 .fault(
EL2, faultDebugEL2)
3550 .allPrivileges().exceptUserMode()
3551 .fault(
EL1, faultDebugEL1)
3552 .fault(
EL2, faultDebugEL2)
3555 .allPrivileges().exceptUserMode()
3556 .fault(
EL1, faultDebugEL1)
3557 .fault(
EL2, faultDebugEL2)
3560 .allPrivileges().exceptUserMode()
3561 .fault(
EL1, faultDebugEL1)
3562 .fault(
EL2, faultDebugEL2)
3565 .allPrivileges().exceptUserMode()
3566 .fault(
EL1, faultDebugEL1)
3567 .fault(
EL2, faultDebugEL2)
3570 .allPrivileges().exceptUserMode()
3571 .fault(
EL1, faultDebugEL1)
3572 .fault(
EL2, faultDebugEL2)
3575 .allPrivileges().exceptUserMode()
3576 .fault(
EL1, faultDebugEL1)
3577 .fault(
EL2, faultDebugEL2)
3580 .allPrivileges().exceptUserMode()
3581 .fault(
EL1, faultDebugEL1)
3582 .fault(
EL2, faultDebugEL2)
3585 .allPrivileges().exceptUserMode()
3586 .fault(
EL1, faultDebugEL1)
3587 .fault(
EL2, faultDebugEL2)
3590 .allPrivileges().exceptUserMode()
3591 .fault(
EL1, faultDebugEL1)
3592 .fault(
EL2, faultDebugEL2)
3595 .allPrivileges().exceptUserMode()
3596 .fault(
EL1, faultDebugEL1)
3597 .fault(
EL2, faultDebugEL2)
3600 .allPrivileges().exceptUserMode()
3601 .fault(
EL1, faultDebugEL1)
3602 .fault(
EL2, faultDebugEL2)
3605 .allPrivileges().exceptUserMode()
3606 .fault(
EL1, faultDebugEL1)
3607 .fault(
EL2, faultDebugEL2)
3610 .allPrivileges().exceptUserMode()
3611 .fault(
EL1, faultDebugEL1)
3612 .fault(
EL2, faultDebugEL2)
3615 .allPrivileges().exceptUserMode()
3616 .fault(
EL1, faultDebugEL1)
3617 .fault(
EL2, faultDebugEL2)
3620 .allPrivileges().exceptUserMode()
3621 .fault(
EL1, faultDebugEL1)
3622 .fault(
EL2, faultDebugEL2)
3625 .allPrivileges().exceptUserMode()
3626 .fault(
EL1, faultDebugEL1)
3627 .fault(
EL2, faultDebugEL2)
3630 .allPrivileges().exceptUserMode()
3631 .fault(
EL1, faultDebugEL1)
3632 .fault(
EL2, faultDebugEL2)
3635 .allPrivileges().exceptUserMode()
3636 .fault(
EL1, faultDebugEL1)
3637 .fault(
EL2, faultDebugEL2)
3640 .allPrivileges().exceptUserMode()
3641 .fault(
EL1, faultDebugEL1)
3642 .fault(
EL2, faultDebugEL2)
3645 .allPrivileges().exceptUserMode()
3646 .fault(
EL1, faultDebugEL1)
3647 .fault(
EL2, faultDebugEL2)
3650 .allPrivileges().exceptUserMode()
3651 .fault(
EL1, faultDebugEL1)
3652 .fault(
EL2, faultDebugEL2)
3655 .allPrivileges().exceptUserMode()
3656 .fault(
EL1, faultDebugEL1)
3657 .fault(
EL2, faultDebugEL2)
3660 .allPrivileges().exceptUserMode()
3661 .fault(
EL1, faultDebugEL1)
3662 .fault(
EL2, faultDebugEL2)
3665 .allPrivileges().exceptUserMode()
3666 .fault(
EL1, faultDebugEL1)
3667 .fault(
EL2, faultDebugEL2)
3670 .allPrivileges().exceptUserMode()
3671 .fault(
EL1, faultDebugEL1)
3672 .fault(
EL2, faultDebugEL2)
3675 .allPrivileges().exceptUserMode()
3676 .fault(
EL1, faultDebugEL1)
3677 .fault(
EL2, faultDebugEL2)
3680 .allPrivileges().exceptUserMode()
3681 .fault(
EL1, faultDebugEL1)
3682 .fault(
EL2, faultDebugEL2)
3685 .allPrivileges().exceptUserMode()
3686 .fault(
EL1, faultDebugEL1)
3687 .fault(
EL2, faultDebugEL2)
3690 .allPrivileges().exceptUserMode()
3691 .fault(
EL1, faultDebugEL1)
3692 .fault(
EL2, faultDebugEL2)
3695 .allPrivileges().exceptUserMode()
3696 .fault(
EL1, faultDebugEL1)
3697 .fault(
EL2, faultDebugEL2)
3700 .allPrivileges().exceptUserMode()
3701 .fault(
EL1, faultDebugEL1)
3702 .fault(
EL2, faultDebugEL2)
3705 .allPrivileges().exceptUserMode()
3706 .fault(
EL1, faultDebugEL1)
3707 .fault(
EL2, faultDebugEL2)
3710 .allPrivileges().exceptUserMode()
3711 .fault(
EL1, faultDebugEL1)
3712 .fault(
EL2, faultDebugEL2)
3715 .allPrivileges().exceptUserMode()
3716 .fault(
EL1, faultDebugEL1)
3717 .fault(
EL2, faultDebugEL2)
3720 .allPrivileges().exceptUserMode()
3721 .fault(
EL1, faultDebugEL1)
3722 .fault(
EL2, faultDebugEL2)
3725 .allPrivileges().exceptUserMode()
3726 .fault(
EL1, faultDebugEL1)
3727 .fault(
EL2, faultDebugEL2)
3730 .allPrivileges().exceptUserMode()
3731 .fault(
EL1, faultDebugEL1)
3732 .fault(
EL2, faultDebugEL2)
3735 .allPrivileges().exceptUserMode()
3736 .fault(
EL1, faultDebugEL1)
3737 .fault(
EL2, faultDebugEL2)
3740 .allPrivileges().exceptUserMode()
3741 .fault(
EL1, faultDebugEL1)
3742 .fault(
EL2, faultDebugEL2)
3745 .allPrivileges().exceptUserMode()
3746 .fault(
EL1, faultDebugEL1)
3747 .fault(
EL2, faultDebugEL2)
3750 .allPrivileges().exceptUserMode()
3751 .fault(
EL1, faultDebugEL1)
3752 .fault(
EL2, faultDebugEL2)
3755 .allPrivileges().exceptUserMode()
3756 .fault(
EL1, faultDebugEL1)
3757 .fault(
EL2, faultDebugEL2)
3760 .allPrivileges().exceptUserMode()
3761 .fault(
EL1, faultDebugEL1)
3762 .fault(
EL2, faultDebugEL2)
3765 .allPrivileges().exceptUserMode()
3766 .fault(
EL1, faultDebugEL1)
3767 .fault(
EL2, faultDebugEL2)
3770 .allPrivileges().exceptUserMode()
3771 .fault(
EL1, faultDebugEL1)
3772 .fault(
EL2, faultDebugEL2)
3775 .allPrivileges().exceptUserMode()
3776 .fault(
EL1, faultDebugEL1)
3777 .fault(
EL2, faultDebugEL2)
3780 .allPrivileges().exceptUserMode()
3781 .fault(
EL1, faultDebugEL1)
3782 .fault(
EL2, faultDebugEL2)
3785 .allPrivileges().exceptUserMode()
3786 .fault(
EL1, faultDebugEL1)
3787 .fault(
EL2, faultDebugEL2)
3790 .allPrivileges().exceptUserMode()
3791 .fault(
EL1, faultDebugEL1)
3792 .fault(
EL2, faultDebugEL2)
3795 .allPrivileges().exceptUserMode()
3796 .fault(
EL1, faultDebugEL1)
3797 .fault(
EL2, faultDebugEL2)
3800 .allPrivileges().exceptUserMode()
3801 .fault(
EL1, faultDebugEL1)
3802 .fault(
EL2, faultDebugEL2)
3805 .allPrivileges().exceptUserMode()
3806 .fault(
EL1, faultDebugEL1)
3807 .fault(
EL2, faultDebugEL2)
3810 .allPrivileges().exceptUserMode()
3811 .fault(
EL1, faultDebugEL1)
3812 .fault(
EL2, faultDebugEL2)
3815 .allPrivileges().exceptUserMode()
3816 .fault(
EL1, faultDebugEL1)
3817 .fault(
EL2, faultDebugEL2)
3820 .allPrivileges().exceptUserMode()
3821 .fault(
EL1, faultDebugEL1)
3822 .fault(
EL2, faultDebugEL2)
3825 .allPrivileges().exceptUserMode()
3826 .fault(
EL1, faultDebugEL1)
3827 .fault(
EL2, faultDebugEL2)
3830 .allPrivileges().exceptUserMode()
3831 .fault(
EL1, faultDebugEL1)
3832 .fault(
EL2, faultDebugEL2)
3835 .allPrivileges().exceptUserMode()
3836 .fault(
EL1, faultDebugEL1)
3837 .fault(
EL2, faultDebugEL2)
3840 .allPrivileges().exceptUserMode()
3841 .fault(
EL1, faultDebugEL1)
3842 .fault(
EL2, faultDebugEL2)
3845 .allPrivileges().exceptUserMode()
3846 .fault(
EL1, faultDebugEL1)
3847 .fault(
EL2, faultDebugEL2)
3850 .allPrivileges().exceptUserMode()
3851 .fault(
EL1, faultDebugEL1)
3852 .fault(
EL2, faultDebugEL2)
3855 .allPrivileges().exceptUserMode()
3856 .fault(
EL1, faultDebugEL1)
3857 .fault(
EL2, faultDebugEL2)
3860 .allPrivileges().exceptUserMode()
3861 .fault(
EL1, faultDebugEL1)
3862 .fault(
EL2, faultDebugEL2)
3865 .allPrivileges().writes(0)
3866 .faultRead(
EL0, faultMdccsrEL0)
3867 .faultRead(
EL1, faultMdccsrEL1)
3868 .faultRead(
EL2, faultMdccsrEL2)
3878 .fault(
EL2, faultDebugEL2)
3881 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3884 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3887 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3902 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3909 .allPrivileges().exceptUserMode().writes(0)
3910 .faultRead(
EL0, faultIdst)
3913 .allPrivileges().exceptUserMode().writes(0)
3914 .faultRead(
EL0, faultIdst)
3917 .faultRead(
EL0, faultIdst)
3919 .allPrivileges().exceptUserMode().writes(0);
3921 .allPrivileges().exceptUserMode().writes(0)
3922 .faultRead(
EL0, faultIdst)
3926 .allPrivileges().exceptUserMode().writes(0)
3927 .faultRead(
EL0, faultIdst)
3931 .allPrivileges().exceptUserMode().writes(0)
3932 .faultRead(
EL0, faultIdst)
3936 .allPrivileges().exceptUserMode().writes(0)
3937 .faultRead(
EL0, faultIdst)
3941 .allPrivileges().exceptUserMode().writes(0)
3942 .faultRead(
EL0, faultIdst)
3946 .allPrivileges().exceptUserMode().writes(0)
3947 .faultRead(
EL0, faultIdst)
3951 .allPrivileges().exceptUserMode().writes(0)
3952 .faultRead(
EL0, faultIdst)
3956 .allPrivileges().exceptUserMode().writes(0)
3957 .faultRead(
EL0, faultIdst)
3961 .allPrivileges().exceptUserMode().writes(0)
3962 .faultRead(
EL0, faultIdst)
3966 .allPrivileges().exceptUserMode().writes(0)
3967 .faultRead(
EL0, faultIdst)
3971 .allPrivileges().exceptUserMode().writes(0)
3972 .faultRead(
EL0, faultIdst)
3976 .allPrivileges().exceptUserMode().writes(0)
3977 .faultRead(
EL0, faultIdst)
3981 .allPrivileges().exceptUserMode().writes(0)
3982 .faultRead(
EL0, faultIdst)
3986 .allPrivileges().exceptUserMode().writes(0)
3987 .faultRead(
EL0, faultIdst)
3991 .allPrivileges().exceptUserMode().writes(0)
3992 .faultRead(
EL0, faultIdst)
3996 .allPrivileges().exceptUserMode().writes(0)
3997 .faultRead(
EL0, faultIdst)
4001 .faultRead(
EL0, faultIdst)
4003 .allPrivileges().exceptUserMode().writes(0)
4006 .faultRead(
EL0, faultIdst)
4008 .allPrivileges().exceptUserMode().writes(0)
4011 .faultRead(
EL0, faultIdst)
4013 .allPrivileges().exceptUserMode().writes(0);
4015 .reset([
this,release=release,tc=tc](){
4016 AA64PFR0 pfr0_el1 = 0;
4019 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION) ? 0x2 : 0x0;
4020 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4021 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4022 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4023 pfr0_el1.gic =
FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4027 .faultRead(
EL0, faultIdst)
4029 .allPrivileges().writes(0);
4031 .reset(release->has(ArmExtension::FEAT_SME) ?
4034 .faultRead(
EL0, faultIdst)
4036 .allPrivileges().writes(0);
4039 AA64DFR0 dfr0_el1 =
p.id_aa64dfr0_el1;
4040 dfr0_el1.pmuver =
p.pmu ? 1 : 0;
4043 .faultRead(
EL0, faultIdst)
4045 .allPrivileges().writes(0);
4047 .reset(
p.id_aa64dfr1_el1)
4048 .faultRead(
EL0, faultIdst)
4050 .allPrivileges().writes(0);
4052 .reset(
p.id_aa64afr0_el1)
4053 .faultRead(
EL0, faultIdst)
4055 .allPrivileges().writes(0);
4057 .reset(
p.id_aa64afr1_el1)
4058 .faultRead(
EL0, faultIdst)
4060 .allPrivileges().writes(0);
4062 .reset([
p,release=release](){
4063 AA64ISAR0 isar0_el1 =
p.id_aa64isar0_el1;
4064 if (release->has(ArmExtension::CRYPTO)) {
4065 isar0_el1.crc32 = 1;
4070 isar0_el1.crc32 = 0;
4075 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4076 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4077 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4078 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4079 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIOS) ? 0x1 : 0x0;
4080 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4081 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4083 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4086 .faultRead(
EL0, faultIdst)
4088 .allPrivileges().writes(0);
4090 .reset([
p,release=release](){
4091 AA64ISAR1 isar1_el1 =
p.id_aa64isar1_el1;
4092 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
4093 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4094 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
4095 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
4096 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4099 .faultRead(
EL0, faultIdst)
4101 .allPrivileges().writes(0);
4104 AA64MMFR0 mmfr0_el1 =
p.id_aa64mmfr0_el1;
4105 mmfr0_el1.asidbits =
asidbits ? 0x2 : 0x0;
4109 .faultRead(
EL0, faultIdst)
4111 .allPrivileges().writes(0);
4113 .reset([
p,release=release](){
4114 AA64MMFR1 mmfr1_el1 =
p.id_aa64mmfr1_el1;
4115 mmfr1_el1.vmidbits = release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
4116 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
4117 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
4118 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
4119 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
4122 .faultRead(
EL0, faultIdst)
4124 .allPrivileges().writes(0);
4126 .reset([
p,release=release](){
4127 AA64MMFR2 mmfr2_el1 =
p.id_aa64mmfr2_el1;
4128 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
4129 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
4130 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
4131 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
4134 .faultRead(
EL0, faultIdst)
4136 .allPrivileges().writes(0);
4139 .fault(
EL1, faultPauthEL1)
4140 .fault(
EL2, faultPauthEL2)
4141 .allPrivileges().exceptUserMode();
4143 .fault(
EL1, faultPauthEL1)
4144 .fault(
EL2, faultPauthEL2)
4145 .allPrivileges().exceptUserMode();
4147 .fault(
EL1, faultPauthEL1)
4148 .fault(
EL2, faultPauthEL2)
4149 .allPrivileges().exceptUserMode();
4151 .fault(
EL1, faultPauthEL1)
4152 .fault(
EL2, faultPauthEL2)
4153 .allPrivileges().exceptUserMode();
4155 .fault(
EL1, faultPauthEL1)
4156 .fault(
EL2, faultPauthEL2)
4157 .allPrivileges().exceptUserMode();
4159 .fault(
EL1, faultPauthEL1)
4160 .fault(
EL2, faultPauthEL2)
4161 .allPrivileges().exceptUserMode();
4163 .fault(
EL1, faultPauthEL1)
4164 .fault(
EL2, faultPauthEL2)
4165 .allPrivileges().exceptUserMode();
4167 .fault(
EL1, faultPauthEL1)
4168 .fault(
EL2, faultPauthEL2)
4169 .allPrivileges().exceptUserMode();
4171 .fault(
EL1, faultPauthEL1)
4172 .fault(
EL2, faultPauthEL2)
4173 .allPrivileges().exceptUserMode();
4175 .fault(
EL1, faultPauthEL1)
4176 .fault(
EL2, faultPauthEL2)
4177 .allPrivileges().exceptUserMode();
4180 .faultRead(
EL0, faultIdst)
4181 .faultRead(
EL1, faultCacheEL1)
4182 .allPrivileges().writes(0);
4184 .faultRead(
EL0, faultIdst)
4185 .faultRead(
EL1, faultCacheEL1)
4186 .allPrivileges().writes(0);
4188 .faultRead(
EL0, faultIdst)
4190 .allPrivileges().writes(0);
4192 .allPrivileges().exceptUserMode()
4193 .fault(
EL1, faultCacheEL1)
4196 .faultRead(
EL0, faultCtrEL0)
4212 .allPrivileges().exceptUserMode()
4215 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4216 | (IESB ? 0 : 0x200000)
4217 | (EnDA ? 0 : 0x8000000)
4218 | (EnIB ? 0 : 0x40000000)
4219 | (EnIA ? 0 : 0x80000000))
4220 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4221 | (nTLSMD ? 0 : 0x8000000)
4222 | (LSMAOE ? 0 : 0x10000000))
4227 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4228 | (IESB ? 0 : 0x200000)
4229 | (EnDA ? 0 : 0x8000000)
4230 | (EnIB ? 0 : 0x40000000)
4231 | (EnIA ? 0 : 0x80000000))
4232 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4233 | (nTLSMD ? 0 : 0x8000000)
4234 | (LSMAOE ? 0 : 0x10000000))
4237 .allPrivileges().exceptUserMode()
4241 .allPrivileges().exceptUserMode()
4242 .fault(
EL1, faultCpacrEL1)
4243 .fault(
EL2, faultCpacrEL2)
4246 .fault(
EL2, faultCpacrVheEL2)
4251 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4252 | (IESB ? 0 : 0x200000)
4253 | (EnDA ? 0 : 0x8000000)
4254 | (EnIB ? 0 : 0x40000000)
4255 | (EnIA ? 0 : 0x80000000))
4266 .fault(
EL2, faultHcrxEL2);
4269 .fault(
EL2, faultDebugEL2)
4273 .fault(
EL2, faultCpacrEL2)
4284 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4285 | (IESB ? 0 : 0x200000)
4286 | (EnDA ? 0 : 0x8000000)
4287 | (EnIB ? 0 : 0x40000000)
4288 | (EnIA ? 0 : 0x80000000))
4304 .allPrivileges().exceptUserMode()
4313 .allPrivileges().exceptUserMode()
4322 .allPrivileges().exceptUserMode()
4356 .allPrivileges().exceptUserMode()
4363 .allPrivileges().exceptUserMode();
4369 .allPrivileges().exceptUserMode()
4370 .fault(
EL1, faultSpEL0)
4371 .fault(
EL2, faultSpEL0)
4372 .fault(
EL3, faultSpEL0);
4374 .allPrivileges().exceptUserMode();
4376 .allPrivileges().exceptUserMode().writes(0);
4378 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
4381 .allPrivileges().exceptUserMode();
4386 .fault(
EL0, faultDaif);
4389 .fault(
EL0, faultFpcrEL0)
4390 .fault(
EL1, faultFpcrEL1)
4391 .fault(
EL2, faultFpcrEL2)
4392 .fault(
EL3, faultFpcrEL3);
4395 .fault(
EL0, faultFpcrEL0)
4396 .fault(
EL1, faultFpcrEL1)
4397 .fault(
EL2, faultFpcrEL2)
4398 .fault(
EL3, faultFpcrEL3);
4426 .allPrivileges().exceptUserMode()
4435 .allPrivileges().exceptUserMode()
4446 .allPrivileges().exceptUserMode();
4464 .fault(
EL2, faultFpcrEL2)
4465 .fault(
EL3, faultFpcrEL3)
4474 .allPrivileges().exceptUserMode()
4492 .faultWrite(
EL1, faultPouIsEL1)
4493 .writes(1).exceptUserMode();
4495 .allPrivileges().exceptUserMode()
4499 .faultWrite(
EL1, faultPouEL1)
4500 .writes(1).exceptUserMode();
4503 .writes(1).exceptUserMode();
4507 .writes(1).exceptUserMode();
4510 .writes(1).exceptUserMode();
4513 .writes(1).exceptUserMode();
4516 .writes(1).exceptUserMode();
4519 .writes(1).exceptUserMode();
4523 .writes(1).exceptUserMode();
4527 .writes(1).exceptUserMode();
4530 .faultWrite(
EL0, faultDczvaEL0)
4533 .faultWrite(
EL0, faultPouEL0)
4534 .faultWrite(
EL1, faultPouEL1)
4537 .faultWrite(
EL0, faultCvacEL0)
4541 .faultWrite(
EL0, faultPouEL0)
4542 .faultWrite(
EL1, faultPouEL1)
4545 .faultWrite(
EL0, faultCvacEL0)
4549 .monNonSecureWrite().hypWrite();
4551 .monNonSecureWrite().hypWrite();
4553 .hypWrite().monSecureWrite().monNonSecureWrite();
4555 .hypWrite().monSecureWrite().monNonSecureWrite();
4557 .hypWrite().monSecureWrite().monNonSecureWrite();
4559 .hypWrite().monSecureWrite().monNonSecureWrite();
4561 .monSecureWrite().monNonSecureWrite();
4563 .monSecureWrite().monNonSecureWrite();
4565 .faultWrite(
EL1, faultTlbiOsEL1)
4566 .writes(1).exceptUserMode();
4568 .faultWrite(
EL1, faultTlbiOsEL1)
4569 .writes(1).exceptUserMode();
4571 .faultWrite(
EL1, faultTlbiOsEL1)
4572 .writes(1).exceptUserMode();
4574 .faultWrite(
EL1, faultTlbiOsEL1)
4575 .writes(1).exceptUserMode();
4577 .faultWrite(
EL1, faultTlbiOsEL1)
4578 .writes(1).exceptUserMode();
4580 .faultWrite(
EL1, faultTlbiOsEL1)
4581 .writes(1).exceptUserMode();
4583 .faultWrite(
EL1, faultTlbiIsEL1)
4584 .writes(1).exceptUserMode();
4586 .faultWrite(
EL1, faultTlbiIsEL1)
4587 .writes(1).exceptUserMode();
4589 .faultWrite(
EL1, faultTlbiIsEL1)
4590 .writes(1).exceptUserMode();
4592 .faultWrite(
EL1, faultTlbiIsEL1)
4593 .writes(1).exceptUserMode();
4595 .faultWrite(
EL1, faultTlbiIsEL1)
4596 .writes(1).exceptUserMode();
4598 .faultWrite(
EL1, faultTlbiIsEL1)
4599 .writes(1).exceptUserMode();
4602 .writes(1).exceptUserMode();
4605 .writes(1).exceptUserMode();
4608 .writes(1).exceptUserMode();
4611 .writes(1).exceptUserMode();
4614 .writes(1).exceptUserMode();
4617 .writes(1).exceptUserMode();
4619 .hypWrite().monSecureWrite().monNonSecureWrite();
4621 .hypWrite().monSecureWrite().monNonSecureWrite();
4623 .monNonSecureWrite().hypWrite();
4625 .monNonSecureWrite().hypWrite();
4627 .hypWrite().monSecureWrite().monNonSecureWrite();
4629 .monNonSecureWrite().hypWrite();
4631 .hypWrite().monSecureWrite().monNonSecureWrite();
4633 .hypWrite().monSecureWrite().monNonSecureWrite();
4635 .hypWrite().monSecureWrite().monNonSecureWrite();
4637 .monNonSecureWrite().hypWrite();
4639 .monNonSecureWrite().hypWrite();
4641 .hypWrite().monSecureWrite().monNonSecureWrite();
4643 .monNonSecureWrite().hypWrite();
4645 .hypWrite().monSecureWrite().monNonSecureWrite();
4647 .hypWrite().monSecureWrite().monNonSecureWrite();
4649 .hypWrite().monSecureWrite().monNonSecureWrite();
4651 .monNonSecureWrite().hypWrite();
4653 .monNonSecureWrite().hypWrite();
4655 .hypWrite().monSecureWrite().monNonSecureWrite();
4657 .monNonSecureWrite().hypWrite();
4659 .hypWrite().monSecureWrite().monNonSecureWrite();
4661 .monSecureWrite().monNonSecureWrite();
4663 .monSecureWrite().monNonSecureWrite();
4665 .monSecureWrite().monNonSecureWrite();
4667 .monSecureWrite().monNonSecureWrite();
4669 .monSecureWrite().monNonSecureWrite();
4671 .monSecureWrite().monNonSecureWrite();
4673 .monSecureWrite().monNonSecureWrite();
4675 .monSecureWrite().monNonSecureWrite();
4677 .monSecureWrite().monNonSecureWrite();
4679 .allPrivileges().exceptUserMode()
4682 .allPrivileges().exceptUserMode()
4720 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4726 .allPrivileges().exceptUserMode()
4735 .allPrivileges().exceptUserMode()
4754 .allPrivileges().exceptUserMode();
4756 .allPrivileges().exceptUserMode();
4758 .allPrivileges().exceptUserMode()
4769 .allPrivileges().exceptUserMode().writes(0);
4787 .allPrivileges().exceptUserMode()
4796 .allPrivileges().exceptUserMode()
4802 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4812 .faultRead(
EL0, faultGenericTimerEL0)
4814 .privSecureWrite(aarch32EL3)
4818 .faultRead(
EL0, faultCntpctEL0)
4819 .faultRead(
EL1, faultCntpctEL1)
4824 .faultRead(
EL0, faultCntvctEL0)
4825 .faultRead(
EL1, faultCntvctEL1)
4830 .fault(
EL0, faultCntpCtlEL0)
4831 .fault(
EL1, faultCntpCtlEL1)
4832 .res0(0xfffffffffffffff8)
4836 .fault(
EL0, faultCntpCtlEL0)
4837 .fault(
EL1, faultCntpCtlEL1)
4841 .fault(
EL0, faultCntpCtlEL0)
4842 .fault(
EL1, faultCntpCtlEL1)
4843 .res0(0xffffffff00000000)
4847 .fault(
EL0, faultCntvCtlEL0)
4848 .fault(
EL1, faultCntvCtlEL1)
4849 .res0(0xfffffffffffffff8)
4853 .fault(
EL0, faultCntvCtlEL0)
4854 .fault(
EL1, faultCntvCtlEL1)
4858 .fault(
EL0, faultCntvCtlEL0)
4859 .fault(
EL1, faultCntvCtlEL1)
4860 .res0(0xffffffff00000000)
4865 .res0(0xfffffffffffffff8)
4874 .res0(0xffffffff00000000)
4879 .res0(0xfffffffffffffff8)
4888 .res0(0xffffffff00000000)
4893 .res0(0xfffffffffffdfc00)
4898 .res0(0xfffffffffffdfc00)
4903 .fault(
EL1, faultCntpsCtlEL1)
4904 .res0(0xfffffffffffffff8);
4908 .fault(
EL1, faultCntpsCtlEL1);
4912 .fault(
EL1, faultCntpsCtlEL1)
4913 .res0(0xffffffff00000000);
4917 .res0(0xfffffffffffc0000)
4922 .res0(0xfffffffffffffff8)
4931 .res0(0xffffffff00000000)
4934 .mon(sel2_implemented)
4935 .hypSecure(sel2_implemented)
4936 .res0(0xfffffffffffffff8);
4938 .mon(sel2_implemented)
4939 .hypSecure(sel2_implemented);
4941 .mon(sel2_implemented)
4942 .hypSecure(sel2_implemented)
4943 .res0(0xffffffff00000000);
4945 .mon(vhe_implemented)
4947 .res0(0xfffffffffffffff8);
4949 .mon(vhe_implemented)
4950 .hyp(vhe_implemented);
4952 .mon(vhe_implemented)
4953 .hyp(vhe_implemented)
4954 .res0(0xffffffff00000000);
4956 .mon(vhe_implemented && sel2_implemented)
4957 .hypSecure(vhe_implemented && sel2_implemented)
4958 .res0(0xfffffffffffffff8);
4960 .mon(vhe_implemented && sel2_implemented)
4961 .hypSecure(vhe_implemented && sel2_implemented);
4963 .mon(vhe_implemented && sel2_implemented)
4964 .hypSecure(vhe_implemented && sel2_implemented)
4965 .res0(0xffffffff00000000);
5009 .allPrivileges().exceptUserMode();
5011 .allPrivileges().exceptUserMode();
5013 .allPrivileges().exceptUserMode();
5015 .allPrivileges().exceptUserMode();
5017 .allPrivileges().exceptUserMode();
5019 .allPrivileges().exceptUserMode();
5021 .allPrivileges().exceptUserMode();
5023 .allPrivileges().exceptUserMode();
5025 .allPrivileges().exceptUserMode();
5027 .allPrivileges().exceptUserMode();
5029 .allPrivileges().exceptUserMode();
5031 .allPrivileges().exceptUserMode();
5033 .allPrivileges().exceptUserMode();
5036 .fault(faultUnimplemented);
5038 .allPrivileges().exceptUserMode().writes(0);
5045 .allPrivileges().exceptUserMode()
5048 .allPrivileges().exceptUserMode().writes(0)
5051 .allPrivileges().exceptUserMode().reads(0)
5054 .allPrivileges().exceptUserMode().writes(0)
5058 .allPrivileges().exceptUserMode()
5061 .allPrivileges().exceptUserMode()
5064 .allPrivileges().exceptUserMode()
5067 .allPrivileges().exceptUserMode()
5070 .allPrivileges().exceptUserMode()
5077 .allPrivileges().exceptUserMode()
5081 .allPrivileges().exceptUserMode()
5088 .allPrivileges().exceptUserMode()
5092 .allPrivileges().exceptUserMode()
5099 .allPrivileges().exceptUserMode()
5103 .allPrivileges().exceptUserMode()
5110 .allPrivileges().exceptUserMode()
5114 .allPrivileges().exceptUserMode()
5118 .allPrivileges().exceptUserMode().reads(0)
5121 .allPrivileges().exceptUserMode().writes(0)
5124 .allPrivileges().exceptUserMode().reads(0)
5125 .faultWrite(
EL1, faultIccSgiEL1)
5126 .faultWrite(
EL2, faultIccSgiEL2)
5129 .allPrivileges().exceptUserMode().reads(0)
5130 .faultWrite(
EL1, faultIccSgiEL1)
5131 .faultWrite(
EL2, faultIccSgiEL2)
5134 .allPrivileges().exceptUserMode().reads(0)
5135 .faultWrite(
EL1, faultIccSgiEL1)
5136 .faultWrite(
EL2, faultIccSgiEL2)
5139 .allPrivileges().exceptUserMode().writes(0)
5143 .allPrivileges().exceptUserMode().reads(0)
5146 .allPrivileges().exceptUserMode().writes(0)
5154 .allPrivileges().exceptUserMode()
5159 .secure().exceptUserMode()
5167 .allPrivileges().exceptUserMode()
5172 .secure().exceptUserMode()
5180 .allPrivileges().exceptUserMode()
5185 .secure().exceptUserMode()
5189 .allPrivileges().exceptUserMode()
5197 .allPrivileges().exceptUserMode()
5202 .secure().exceptUserMode()
5245 .hyp().mon().writes(0)
5248 .hyp().mon().writes(0)
5251 .hyp().mon().writes(0)
5254 .hyp().mon().writes(0)
5310 .allPrivileges().exceptUserMode();
5312 .allPrivileges().exceptUserMode();
5314 .allPrivileges().exceptUserMode();
5316 .allPrivileges().exceptUserMode();
5318 .allPrivileges().exceptUserMode();
5320 .allPrivileges().exceptUserMode();
5322 .allPrivileges().exceptUserMode();
5324 .allPrivileges().exceptUserMode();
5326 .allPrivileges().exceptUserMode();
5328 .allPrivileges().exceptUserMode();
5330 .allPrivileges().exceptUserMode();
5332 .allPrivileges().exceptUserMode();
5334 .allPrivileges().exceptUserMode();
5336 .allPrivileges().exceptUserMode();
5338 .allPrivileges().exceptUserMode();
5340 .allPrivileges().exceptUserMode();
5342 .allPrivileges().exceptUserMode().reads(0);
5344 .allPrivileges().exceptUserMode();
5346 .allPrivileges().exceptUserMode();
5348 .allPrivileges().exceptUserMode();
5350 .allPrivileges().exceptUserMode();
5352 .allPrivileges().exceptUserMode();
5354 .allPrivileges().exceptUserMode();
5356 .allPrivileges().exceptUserMode();
5358 .allPrivileges().exceptUserMode().reads(0);
5360 .allPrivileges().exceptUserMode().reads(0);
5362 .allPrivileges().exceptUserMode().reads(0);
5364 .allPrivileges().exceptUserMode().writes(0);
5366 .allPrivileges().exceptUserMode().writes(0);
5370 .allPrivileges().exceptUserMode().writes(0);
5372 .allPrivileges().exceptUserMode().writes(0);
5374 .allPrivileges().exceptUserMode();
5376 .allPrivileges().exceptUserMode();
5378 .allPrivileges().exceptUserMode();
5380 .allPrivileges().exceptUserMode();
5388 .allPrivileges().exceptUserMode();
5390 .allPrivileges().exceptUserMode().writes(0);
5392 .allPrivileges().exceptUserMode().reads(0);
5394 .allPrivileges().exceptUserMode().reads(0);
5396 .allPrivileges().exceptUserMode();
5398 .allPrivileges().exceptUserMode();
5400 .allPrivileges().exceptUserMode();
5421 .hyp().mon().writes(0);
5423 .hyp().mon().writes(0);
5425 .hyp().mon().writes(0);
5427 .hyp().mon().writes(0);
5498 AA64ZFR0 zfr0_el1 = 0;
5499 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
5500 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
5501 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
5504 .faultRead(
EL0, faultIdst)
5506 .allPrivileges().exceptUserMode().writes(0);
5509 .fault(
EL3, faultZcrEL3)
5513 .fault(
EL2, faultZcrEL2)
5514 .fault(
EL3, faultZcrEL3)
5522 .fault(
EL1, faultZcrEL1)
5523 .fault(
EL2, faultZcrEL2)
5524 .fault(
EL3, faultZcrEL3)
5525 .allPrivileges().exceptUserMode();
5530 AA64SMFR0 smfr0_el1 = 0;
5531 smfr0_el1.f32f32 = 0x1;
5535 smfr0_el1.b16f32 = 0x1;
5536 smfr0_el1.f16f32 = 0x1;
5537 smfr0_el1.i8i32 = 0xF;
5538 smfr0_el1.f64f64 = 0x1;
5539 smfr0_el1.i16i64 = 0xF;
5540 smfr0_el1.smEver = 0;
5541 smfr0_el1.fa64 = 0x1;
5544 .faultRead(
EL0, faultIdst)
5546 .allPrivileges().writes(0);
5554 .fault(
EL0, faultSmenEL0)
5555 .fault(
EL1, faultSmenEL1)
5556 .fault(
EL2, faultTsmSmen)
5557 .fault(
EL3, faultEsm)
5561 SMIDR smidr_el1 = 0;
5562 smidr_el1.affinity = 0;
5564 smidr_el1.implementer = 0x41;
5567 .faultRead(
EL0, faultIdst)
5569 .allPrivileges().writes(0);
5572 .fault(
EL1, faultEsm)
5573 .fault(
EL2, faultEsm)
5574 .fault(
EL3, faultEsm)
5575 .allPrivileges().exceptUserMode();
5577 .fault(
EL2, faultEsm)
5578 .fault(
EL3, faultEsm)
5589 smcr_el3.len = smeVL - 1;
5592 .fault(
EL3, faultEsm)
5603 smcr_el2.len = smeVL - 1;
5606 .fault(
EL2, faultTsmSmen)
5607 .fault(
EL3, faultEsm)
5610 .allPrivileges().exceptUserMode();
5620 smcr_el1.len = smeVL - 1;
5623 .fault(
EL1, faultSmenEL1)
5624 .fault(
EL2, faultTsmSmen)
5625 .fault(
EL3, faultEsm)
5626 .allPrivileges().exceptUserMode();
5630 .allPrivileges().exceptUserMode();
5633 .faultRead(
EL0, faultRng)
5634 .faultRead(
EL1, faultRng)
5635 .faultRead(
EL2, faultRng)
5636 .faultRead(
EL3, faultRng)
5638 .allPrivileges().writes(0);
5640 .faultRead(
EL0, faultRng)
5641 .faultRead(
EL1, faultRng)
5642 .faultRead(
EL2, faultRng)
5643 .faultRead(
EL3, faultRng)
5645 .allPrivileges().writes(0);
5651 .allPrivileges().exceptUserMode().writes(0);
5654 .fault(
EL1, faultImpdefUnimplEL1)
5655 .fault(
EL2, faultUnimplemented)
5656 .fault(
EL3, faultUnimplemented)
5657 .warnNotFail(impdefAsNop);
5662 .fault(faultUnimplemented);
5665 .fault(faultUnimplemented);
5668 .fault(faultUnimplemented);
5671 .fault(faultUnimplemented);
5674 .fault(faultUnimplemented);
5677 .fault(faultUnimplemented);
5680 .fault(faultUnimplemented);
5683 .fault(faultUnimplemented);
5686 .fault(faultUnimplemented);
5689 .fault(faultUnimplemented);
5692 .fault(faultUnimplemented);
5712 assert(idxToMiscRegNum.empty());
5713 for (
const auto& [key,
val] : miscRegNumToIdx) {
5714 idxToMiscRegNum.insert({
val, key});