124 warn(
"CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
125 crn, opc1, crm, opc2);
211 if (crm == 0 && opc2 == 0) {
236 }
else if (crm == 1) {
246 }
else if (opc1 == 4) {
252 }
else if (crm == 1) {
271 if (opc1 == 0 && crm == 0) {
280 }
else if (opc1 == 4) {
281 if (crm == 0 && opc2 == 2)
283 else if (crm == 1 && opc2 == 2)
288 if (opc1 == 0 && crm == 0 && opc2 == 0) {
293 if (opc1 == 0 && crm == 6 && opc2 == 0) {
302 }
else if (opc2 == 1) {
305 }
else if (crm == 1) {
308 }
else if (opc2 == 1) {
312 }
else if (opc1 == 4) {
318 }
else if (crm == 2 && opc2 == 0) {
324 if (opc1 == 0 && crm == 0) {
331 }
else if (opc1 == 4 && crm == 0) {
380 }
else if (opc2 == 2) {
429 }
else if (opc2 == 2) {
434 }
else if (opc1 == 4 && crm == 8) {
497 }
else if (opc1 == 4) {
505 }
else if (crm == 3) {
516 }
else if (crm == 4) {
523 }
else if (crm == 7) {
597 }
else if (opc1 == 1) {
616 }
else if (crm == 2) {
620 }
else if (opc2 == 1) {
624 }
else if (crm == 3) {
627 }
else if (opc2 == 1) {
631 }
else if (opc1 == 4) {
638 }
else if (crm == 3) {
671 }
else if (opc2 == 1) {
674 }
else if (crm == 1) {
678 }
else if (crm == 8) {
697 }
else if (crm == 9) {
708 }
else if (crm == 11) {
715 }
else if (crm == 12) {
735 }
else if (opc1 == 4) {
736 if (crm == 0 && opc2 == 0) {
738 }
else if (crm == 8) {
749 }
else if (crm == 9) {
762 }
else if (crm == 11) {
777 }
else if (crm == 12) {
796 }
else if (crm == 13) {
815 }
else if (crm == 14) {
834 }
else if (crm == 15) {
854 }
else if (opc1 == 6) {
883 }
else if (opc1 == 4) {
884 if (crm == 0 && opc2 == 2)
912 }
else if (opc1 == 4) {
913 if (crm == 1 && opc2 == 0) {
915 }
else if (crm == 2) {
990 std::tuple<bool, bool>
993 bool secure = !scr.ns;
994 bool canRead =
false;
995 bool undefined =
false;
1023 return std::make_tuple(canRead, undefined);
1026 std::tuple<bool, bool>
1029 bool secure = !scr.ns;
1030 bool canWrite =
false;
1031 bool undefined =
false;
1033 switch (cpsr.mode) {
1059 return std::make_tuple(canWrite, undefined);
1072 int reg_as_int =
static_cast<int>(
reg);
1085 return isa->snsBankedIndex64(reg, scr.ns);
1106 unflattenResultMiscReg[
i] =
reg;
1108 unflattenResultMiscReg[
i] =
i;
1110 assert(unflattenResultMiscReg[
i] > -1);
1117 return unflattenResultMiscReg[
reg];
1131 if (highest_el ==
EL2 || highest_el ==
EL3)
1136 if (highest_el ==
EL3)
1158 panic(
"Invalid exception level");
1172 if (el ==
EL0 && !sctlr.uma)
1179 if (el ==
EL0 && !sctlr.dze)
1184 if (el ==
EL0 && !sctlr.uci)
1206 panic(
"Invalid exception level");
1212 unsigned crn,
unsigned crm,
2895 static bool completed =
false;
2902 bool aarch32EL3 = haveSecurity && !highestELIs64;
2913 bool LSMAOE =
false;
2916 bool nTLSMD =
false;
2986 .privSecure(!aarch32EL3)
2996 .privSecure(!aarch32EL3)
3010 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3012 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3103 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3112 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3115 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3124 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3133 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3136 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3139 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3142 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3157 .allPrivileges().exceptUserMode().writes(0);
3159 .allPrivileges().exceptUserMode().writes(0);
3161 .allPrivileges().exceptUserMode().writes(0);
3163 .allPrivileges().exceptUserMode().writes(0);
3165 .allPrivileges().exceptUserMode().writes(0);
3169 .allPrivileges().exceptUserMode().writes(0);
3171 .allPrivileges().exceptUserMode().writes(0);
3173 .allPrivileges().exceptUserMode().writes(0);
3175 .allPrivileges().exceptUserMode().writes(0);
3177 .allPrivileges().exceptUserMode().writes(0);
3179 .allPrivileges().exceptUserMode().writes(0);
3181 .allPrivileges().exceptUserMode().writes(0);
3183 .allPrivileges().exceptUserMode().writes(0);
3185 .allPrivileges().exceptUserMode().writes(0);
3187 .allPrivileges().exceptUserMode().writes(0);
3189 .allPrivileges().exceptUserMode().writes(0);
3191 .allPrivileges().exceptUserMode().writes(0);
3193 .allPrivileges().exceptUserMode().writes(0);
3195 .allPrivileges().exceptUserMode().writes(0);
3197 .allPrivileges().exceptUserMode().writes(0);
3199 .allPrivileges().exceptUserMode().writes(0);
3201 .allPrivileges().exceptUserMode().writes(0);
3203 .allPrivileges().exceptUserMode().writes(0);
3208 .privSecure(!aarch32EL3)
3209 .nonSecure().exceptUserMode();
3212 .secure().exceptUserMode();
3214 .hyp().monNonSecure();
3216 .hyp().monNonSecure();
3222 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3223 | (LSMAOE ? 0 : 0x10)
3224 | (nTLSMD ? 0 : 0x8));
3227 .privSecure(!aarch32EL3)
3228 .nonSecure().exceptUserMode();
3231 .secure().exceptUserMode();
3236 .privSecure(!aarch32EL3)
3237 .nonSecure().exceptUserMode();
3240 .secure().exceptUserMode();
3242 .allPrivileges().exceptUserMode();
3244 .mon().secure().exceptUserMode()
3250 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3252 .hyp().monNonSecure()
3253 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3254 | (IESB ? 0 : 0x200000)
3255 | (EnDA ? 0 : 0x8000000)
3256 | (EnIB ? 0 : 0x40000000)
3257 | (EnIA ? 0 : 0x80000000))
3260 .hyp().monNonSecure();
3262 .hyp().monNonSecure()
3265 .hyp().monNonSecure()
3268 .hyp().monNonSecure();
3270 .hyp().monNonSecure();
3272 .hyp().monNonSecure();
3276 .hyp().monNonSecure();
3281 .privSecure(!aarch32EL3)
3282 .nonSecure().exceptUserMode();
3285 .secure().exceptUserMode();
3290 .privSecure(!aarch32EL3)
3291 .nonSecure().exceptUserMode();
3294 .secure().exceptUserMode();
3299 .privSecure(!aarch32EL3)
3300 .nonSecure().exceptUserMode();
3303 .secure().exceptUserMode();
3305 .hyp().monNonSecure();
3307 .hyp().monNonSecure();
3312 .privSecure(!aarch32EL3)
3313 .nonSecure().exceptUserMode();
3316 .secure().exceptUserMode();
3321 .privSecure(!aarch32EL3)
3322 .nonSecure().exceptUserMode();
3325 .secure().exceptUserMode();
3330 .privSecure(!aarch32EL3)
3331 .nonSecure().exceptUserMode();
3334 .secure().exceptUserMode();
3343 .privSecure(!aarch32EL3)
3344 .nonSecure().exceptUserMode();
3349 .secure().exceptUserMode();
3358 .privSecure(!aarch32EL3)
3359 .nonSecure().exceptUserMode();
3364 .secure().exceptUserMode();
3366 .hyp().monNonSecure();
3368 .hyp().monNonSecure();
3370 .hyp().monNonSecure();
3375 .privSecure(!aarch32EL3)
3376 .nonSecure().exceptUserMode();
3379 .secure().exceptUserMode();
3384 .privSecure(!aarch32EL3)
3385 .nonSecure().exceptUserMode();
3388 .secure().exceptUserMode();
3390 .hyp().monNonSecure();
3392 .hyp().monNonSecure();
3394 .hyp().monNonSecure();
3398 .writes(1).exceptUserMode();
3402 .writes(1).exceptUserMode();
3407 .privSecure(!aarch32EL3)
3408 .nonSecure().exceptUserMode();
3411 .secure().exceptUserMode();
3413 .writes(1).exceptUserMode();
3417 .writes(1).exceptUserMode();
3423 .writes(1).exceptUserMode();
3427 .writes(1).exceptUserMode();
3431 .writes(1).exceptUserMode();
3435 .writes(1).exceptUserMode();
3437 .writes(1).exceptUserMode();
3439 .writes(1).exceptUserMode();
3441 .writes(1).exceptUserMode();
3443 .writes(1).exceptUserMode();
3445 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3447 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3449 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3451 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3453 .writes(1).exceptUserMode();
3457 .writes(1).exceptUserMode();
3465 .writes(1).exceptUserMode();
3469 .writes(1).exceptUserMode();
3473 .writes(1).exceptUserMode();
3475 .monNonSecureWrite().hypWrite();
3477 .monNonSecureWrite().hypWrite();
3479 .writes(1).exceptUserMode();
3481 .writes(1).exceptUserMode();
3483 .writes(1).exceptUserMode();
3485 .writes(1).exceptUserMode();
3487 .writes(1).exceptUserMode();
3489 .writes(1).exceptUserMode();
3491 .writes(1).exceptUserMode();
3493 .writes(1).exceptUserMode();
3495 .writes(1).exceptUserMode();
3497 .writes(1).exceptUserMode();
3499 .writes(1).exceptUserMode();
3501 .writes(1).exceptUserMode();
3503 .writes(1).exceptUserMode();
3505 .writes(1).exceptUserMode();
3507 .writes(1).exceptUserMode();
3509 .writes(1).exceptUserMode();
3511 .writes(1).exceptUserMode();
3513 .writes(1).exceptUserMode();
3515 .monNonSecureWrite().hypWrite();
3517 .monNonSecureWrite().hypWrite();
3519 .monNonSecureWrite().hypWrite();
3521 .monNonSecureWrite().hypWrite();
3523 .monNonSecureWrite().hypWrite();
3525 .monNonSecureWrite().hypWrite();
3527 .monNonSecureWrite().hypWrite();
3529 .monNonSecureWrite().hypWrite();
3531 .monNonSecureWrite().hypWrite();
3533 .monNonSecureWrite().hypWrite();
3535 .monNonSecureWrite().hypWrite();
3537 .monNonSecureWrite().hypWrite();
3563 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3565 .allPrivileges().exceptUserMode();
3567 .allPrivileges().exceptUserMode();
3572 .allPrivileges().exceptUserMode();
3575 .allPrivileges().exceptUserMode();
3580 .privSecure(!aarch32EL3)
3581 .nonSecure().exceptUserMode();
3584 .secure().exceptUserMode();
3589 .privSecure(!aarch32EL3)
3590 .nonSecure().exceptUserMode();
3593 .secure().exceptUserMode();
3598 .privSecure(!aarch32EL3)
3599 .nonSecure().exceptUserMode();
3602 .secure().exceptUserMode();
3607 .privSecure(!aarch32EL3)
3608 .nonSecure().exceptUserMode();
3611 .secure().exceptUserMode();
3616 .privSecure(!aarch32EL3)
3617 .nonSecure().exceptUserMode();
3620 .secure().exceptUserMode();
3625 .privSecure(!aarch32EL3)
3626 .nonSecure().exceptUserMode();
3629 .secure().exceptUserMode();
3631 .hyp().monNonSecure();
3633 .hyp().monNonSecure();
3637 .hyp().monNonSecure();
3641 .hyp().monNonSecure();
3646 .privSecure(!aarch32EL3)
3647 .nonSecure().exceptUserMode();
3650 .secure().exceptUserMode();
3658 .mon().secure().exceptUserMode();
3660 .allPrivileges().exceptUserMode().writes(0);
3662 .hyp().monNonSecure()
3667 .allPrivileges().exceptUserMode();
3672 .privSecure(!aarch32EL3)
3673 .nonSecure().exceptUserMode();
3676 .secure().exceptUserMode();
3682 .privSecure(!aarch32EL3)
3692 .userNonSecureWrite(0).userSecureRead(1)
3693 .privSecure(!aarch32EL3)
3697 .secure().userSecureWrite(0);
3702 .nonSecure().exceptUserMode()
3703 .privSecure(!aarch32EL3);
3706 .secure().exceptUserMode();
3708 .hyp().monNonSecure();
3712 .privSecureWrite(aarch32EL3);
3714 .allPrivileges().exceptUserMode();
3720 .privSecure(!aarch32EL3)
3730 .privSecure(!aarch32EL3)
3740 .hypWrite().monNonSecureRead();
3742 .hypWrite().monNonSecureRead();
3744 .hypWrite().monNonSecureRead();
3747 .allPrivileges().exceptUserMode();
3750 .allPrivileges().exceptUserMode();
3753 .allPrivileges().exceptUserMode();
3756 .allPrivileges().exceptUserMode();
3759 .allPrivileges().exceptUserMode();
3762 .allPrivileges().exceptUserMode();
3765 .allPrivileges().exceptUserMode();
3768 .allPrivileges().exceptUserMode();
3771 .allPrivileges().exceptUserMode();
3774 .writes(1).exceptUserMode();
3777 .allPrivileges().exceptUserMode();
3780 .allPrivileges().exceptUserMode().writes(0);
3782 .hyp().monNonSecure();
3784 .hyp().monNonSecure();
3795 .privSecure(!aarch32EL3)
3803 .hyp().monNonSecure();
3805 .hypWrite().monNonSecureRead();
3808 .allPrivileges().exceptUserMode();
3812 .allPrivileges().exceptUserMode();
3890 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3902 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3905 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3908 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3923 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3930 .allPrivileges().exceptUserMode().writes(0);
3932 .allPrivileges().exceptUserMode().writes(0);
3934 .allPrivileges().exceptUserMode().writes(0);
3936 .allPrivileges().exceptUserMode().writes(0)
3939 .allPrivileges().exceptUserMode().writes(0)
3942 .allPrivileges().exceptUserMode().writes(0)
3945 .allPrivileges().exceptUserMode().writes(0)
3948 .allPrivileges().exceptUserMode().writes(0)
3951 .allPrivileges().exceptUserMode().writes(0)
3954 .allPrivileges().exceptUserMode().writes(0)
3957 .allPrivileges().exceptUserMode().writes(0)
3960 .allPrivileges().exceptUserMode().writes(0)
3963 .allPrivileges().exceptUserMode().writes(0)
3966 .allPrivileges().exceptUserMode().writes(0)
3969 .allPrivileges().exceptUserMode().writes(0)
3972 .allPrivileges().exceptUserMode().writes(0)
3975 .allPrivileges().exceptUserMode().writes(0)
3978 .allPrivileges().exceptUserMode().writes(0);
3980 .allPrivileges().exceptUserMode().writes(0);
3982 .allPrivileges().exceptUserMode().writes(0);
3984 .allPrivileges().exceptUserMode().writes(0);
3986 .allPrivileges().exceptUserMode().writes(0);
3988 .allPrivileges().exceptUserMode().writes(0);
3990 .allPrivileges().exceptUserMode().writes(0);
3992 .allPrivileges().exceptUserMode().writes(0);
3994 .allPrivileges().exceptUserMode().writes(0);
3996 .allPrivileges().exceptUserMode().writes(0);
3998 .allPrivileges().exceptUserMode().writes(0);
4000 .allPrivileges().exceptUserMode().writes(0);
4002 .allPrivileges().exceptUserMode().writes(0);
4004 .allPrivileges().exceptUserMode().writes(0);
4007 .allPrivileges().exceptUserMode();
4009 .allPrivileges().exceptUserMode();
4011 .allPrivileges().exceptUserMode();
4013 .allPrivileges().exceptUserMode();
4015 .allPrivileges().exceptUserMode();
4017 .allPrivileges().exceptUserMode();
4019 .allPrivileges().exceptUserMode();
4021 .allPrivileges().exceptUserMode();
4023 .allPrivileges().exceptUserMode();
4025 .allPrivileges().exceptUserMode();
4028 .allPrivileges().exceptUserMode().writes(0);
4030 .allPrivileges().exceptUserMode().writes(0);
4032 .allPrivileges().exceptUserMode().writes(0);
4034 .allPrivileges().exceptUserMode()
4047 .allPrivileges().exceptUserMode()
4048 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4049 | (IESB ? 0 : 0x200000)
4050 | (EnDA ? 0 : 0x8000000)
4051 | (EnIB ? 0 : 0x40000000)
4052 | (EnIA ? 0 : 0x80000000))
4053 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4054 | (nTLSMD ? 0 : 0x8000000)
4055 | (LSMAOE ? 0 : 0x10000000))
4058 .allPrivileges().exceptUserMode()
4061 .allPrivileges().exceptUserMode()
4065 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4066 | (IESB ? 0 : 0x200000)
4067 | (EnDA ? 0 : 0x8000000)
4068 | (EnIB ? 0 : 0x40000000)
4069 | (EnIA ? 0 : 0x80000000))
4092 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4093 | (IESB ? 0 : 0x200000)
4094 | (EnDA ? 0 : 0x8000000)
4095 | (EnIB ? 0 : 0x40000000)
4096 | (EnIA ? 0 : 0x80000000))
4111 .allPrivileges().exceptUserMode()
4114 .allPrivileges().exceptUserMode()
4117 .allPrivileges().exceptUserMode()
4141 .allPrivileges().exceptUserMode()
4144 .allPrivileges().exceptUserMode();
4146 .allPrivileges().exceptUserMode();
4148 .allPrivileges().exceptUserMode();
4150 .allPrivileges().exceptUserMode().writes(0);
4152 .allPrivileges().exceptUserMode()
4153 .implemented(havePAN);
4189 .allPrivileges().exceptUserMode()
4192 .allPrivileges().exceptUserMode()
4195 .allPrivileges().exceptUserMode();
4217 .allPrivileges().exceptUserMode()
4229 .writes(1).exceptUserMode();
4231 .allPrivileges().exceptUserMode()
4235 .writes(1).exceptUserMode();
4238 .writes(1).exceptUserMode();
4241 .writes(1).exceptUserMode();
4243 .writes(1).exceptUserMode();
4245 .writes(1).exceptUserMode();
4247 .writes(1).exceptUserMode();
4249 .writes(1).exceptUserMode();
4252 .writes(1).exceptUserMode();
4255 .writes(1).exceptUserMode();
4258 .writes(1).userSecureWrite(0);
4271 .monNonSecureWrite().hypWrite();
4273 .monNonSecureWrite().hypWrite();
4275 .hypWrite().monSecureWrite().monNonSecureWrite();
4277 .hypWrite().monSecureWrite().monNonSecureWrite();
4279 .hypWrite().monSecureWrite().monNonSecureWrite();
4281 .hypWrite().monSecureWrite().monNonSecureWrite();
4283 .monSecureWrite().monNonSecureWrite();
4285 .monSecureWrite().monNonSecureWrite();
4287 .writes(1).exceptUserMode();
4289 .writes(1).exceptUserMode();
4291 .writes(1).exceptUserMode();
4293 .writes(1).exceptUserMode();
4295 .writes(1).exceptUserMode();
4297 .writes(1).exceptUserMode();
4299 .writes(1).exceptUserMode();
4301 .writes(1).exceptUserMode();
4303 .writes(1).exceptUserMode();
4305 .writes(1).exceptUserMode();
4307 .writes(1).exceptUserMode();
4309 .writes(1).exceptUserMode();
4311 .hypWrite().monSecureWrite().monNonSecureWrite();
4313 .hypWrite().monSecureWrite().monNonSecureWrite();
4315 .monNonSecureWrite().hypWrite();
4317 .monNonSecureWrite().hypWrite();
4319 .hypWrite().monSecureWrite().monNonSecureWrite();
4321 .monNonSecureWrite().hypWrite();
4323 .hypWrite().monSecureWrite().monNonSecureWrite();
4325 .hypWrite().monSecureWrite().monNonSecureWrite();
4327 .hypWrite().monSecureWrite().monNonSecureWrite();
4329 .monNonSecureWrite().hypWrite();
4331 .monNonSecureWrite().hypWrite();
4333 .hypWrite().monSecureWrite().monNonSecureWrite();
4335 .monNonSecureWrite().hypWrite();
4337 .hypWrite().monSecureWrite().monNonSecureWrite();
4339 .monSecureWrite().monNonSecureWrite();
4341 .monSecureWrite().monNonSecureWrite();
4343 .monSecureWrite().monNonSecureWrite();
4345 .monSecureWrite().monNonSecureWrite();
4347 .monSecureWrite().monNonSecureWrite();
4349 .monSecureWrite().monNonSecureWrite();
4351 .allPrivileges().exceptUserMode()
4354 .allPrivileges().exceptUserMode()
4392 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4398 .allPrivileges().exceptUserMode()
4401 .allPrivileges().exceptUserMode()
4414 .allPrivileges().exceptUserMode();
4416 .allPrivileges().exceptUserMode();
4418 .allPrivileges().exceptUserMode()
4421 .allPrivileges().exceptUserMode().writes(0);
4423 .allPrivileges().exceptUserMode().writes(0);
4429 .mon().hyp().writes(0);
4437 .allPrivileges().exceptUserMode()
4440 .allPrivileges().exceptUserMode()
4446 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4454 .allPrivileges().exceptUserMode()
4459 .privSecureWrite(aarch32EL3)
4538 .mon().privSecure();
4540 .mon().privSecure();
4542 .mon().privSecure();
4544 .allPrivileges().exceptUserMode();
4546 .allPrivileges().exceptUserMode();
4548 .allPrivileges().exceptUserMode();
4550 .allPrivileges().exceptUserMode();
4552 .allPrivileges().exceptUserMode();
4554 .allPrivileges().exceptUserMode();
4556 .allPrivileges().exceptUserMode();
4558 .allPrivileges().exceptUserMode();
4560 .allPrivileges().exceptUserMode();
4562 .allPrivileges().exceptUserMode();
4564 .allPrivileges().exceptUserMode();
4566 .allPrivileges().exceptUserMode();
4568 .allPrivileges().exceptUserMode();
4572 .allPrivileges().exceptUserMode();
4574 .allPrivileges().exceptUserMode().writes(0);
4581 .allPrivileges().exceptUserMode()
4584 .allPrivileges().exceptUserMode().writes(0)
4587 .allPrivileges().exceptUserMode().reads(0)
4590 .allPrivileges().exceptUserMode().writes(0)
4594 .allPrivileges().exceptUserMode()
4597 .allPrivileges().exceptUserMode()
4600 .allPrivileges().exceptUserMode()
4603 .allPrivileges().exceptUserMode()
4606 .allPrivileges().exceptUserMode()
4613 .allPrivileges().exceptUserMode()
4617 .allPrivileges().exceptUserMode()
4624 .allPrivileges().exceptUserMode()
4628 .allPrivileges().exceptUserMode()
4635 .allPrivileges().exceptUserMode()
4639 .allPrivileges().exceptUserMode()
4646 .allPrivileges().exceptUserMode()
4650 .allPrivileges().exceptUserMode()
4654 .allPrivileges().exceptUserMode().reads(0)
4657 .allPrivileges().exceptUserMode().writes(0)
4660 .allPrivileges().exceptUserMode().reads(0)
4663 .allPrivileges().exceptUserMode().reads(0)
4666 .allPrivileges().exceptUserMode().reads(0)
4669 .allPrivileges().exceptUserMode().writes(0)
4673 .allPrivileges().exceptUserMode().reads(0)
4676 .allPrivileges().exceptUserMode().writes(0)
4684 .allPrivileges().exceptUserMode()
4689 .secure().exceptUserMode()
4697 .allPrivileges().exceptUserMode()
4702 .secure().exceptUserMode()
4710 .allPrivileges().exceptUserMode()
4715 .secure().exceptUserMode()
4719 .allPrivileges().exceptUserMode()
4727 .allPrivileges().exceptUserMode()
4732 .secure().exceptUserMode()
4738 .allPrivileges().exceptUserMode()
4741 .allPrivileges().exceptUserMode()
4744 .allPrivileges().exceptUserMode()
4781 .hyp().mon().writes(0)
4784 .hyp().mon().writes(0)
4787 .hyp().mon().writes(0)
4790 .hyp().mon().writes(0)
4797 .allPrivileges().exceptUserMode();
4800 .allPrivileges().exceptUserMode();
4803 .allPrivileges().exceptUserMode();
4806 .allPrivileges().exceptUserMode();
4809 .allPrivileges().exceptUserMode();
4812 .allPrivileges().exceptUserMode();
4815 .allPrivileges().exceptUserMode();
4818 .allPrivileges().exceptUserMode();
4821 .allPrivileges().exceptUserMode();
4824 .allPrivileges().exceptUserMode();
4827 .allPrivileges().exceptUserMode();
4830 .allPrivileges().exceptUserMode();
4833 .allPrivileges().exceptUserMode();
4836 .allPrivileges().exceptUserMode();
4839 .allPrivileges().exceptUserMode();
4842 .allPrivileges().exceptUserMode();
4846 .allPrivileges().exceptUserMode();
4848 .allPrivileges().exceptUserMode();
4850 .allPrivileges().exceptUserMode();
4852 .allPrivileges().exceptUserMode();
4854 .allPrivileges().exceptUserMode();
4856 .allPrivileges().exceptUserMode();
4858 .allPrivileges().exceptUserMode();
4860 .allPrivileges().exceptUserMode();
4862 .allPrivileges().exceptUserMode();
4864 .allPrivileges().exceptUserMode();
4866 .allPrivileges().exceptUserMode();
4868 .allPrivileges().exceptUserMode();
4870 .allPrivileges().exceptUserMode();
4872 .allPrivileges().exceptUserMode();
4874 .allPrivileges().exceptUserMode();
4876 .allPrivileges().exceptUserMode();
4878 .allPrivileges().exceptUserMode().reads(0);
4880 .allPrivileges().exceptUserMode();
4882 .allPrivileges().exceptUserMode();
4884 .allPrivileges().exceptUserMode();
4886 .allPrivileges().exceptUserMode();
4888 .allPrivileges().exceptUserMode();
4890 .allPrivileges().exceptUserMode();
4892 .allPrivileges().exceptUserMode();
4894 .allPrivileges().exceptUserMode().reads(0);
4896 .allPrivileges().exceptUserMode().reads(0);
4898 .allPrivileges().exceptUserMode().reads(0);
4900 .allPrivileges().exceptUserMode().writes(0);
4902 .allPrivileges().exceptUserMode().writes(0);
4904 .allPrivileges().exceptUserMode();
4906 .allPrivileges().exceptUserMode().writes(0);
4908 .allPrivileges().exceptUserMode().writes(0);
4910 .allPrivileges().exceptUserMode();
4912 .allPrivileges().exceptUserMode();
4914 .allPrivileges().exceptUserMode();
4916 .allPrivileges().exceptUserMode();
4918 .allPrivileges().exceptUserMode();
4920 .allPrivileges().exceptUserMode();
4922 .allPrivileges().exceptUserMode();
4924 .allPrivileges().exceptUserMode();
4926 .allPrivileges().exceptUserMode().writes(0);
4928 .allPrivileges().exceptUserMode().reads(0);
4930 .allPrivileges().exceptUserMode().reads(0);
4932 .allPrivileges().exceptUserMode();
4934 .allPrivileges().exceptUserMode();
4936 .allPrivileges().exceptUserMode();
4957 .hyp().mon().writes(0);
4959 .hyp().mon().writes(0);
4961 .hyp().mon().writes(0);
4963 .hyp().mon().writes(0);
5056 .allPrivileges().exceptUserMode().writes(0);
5062 .unimplemented().warnNotFail();
5064 .allPrivileges().exceptUserMode();
5070 .allPrivileges().exceptUserMode().writes(0);
5080 .warnNotFail(impdefAsNop);
#define panic(...)
This implements a cprintf based panic() function.
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
bitset< NUM_MISCREG_INFOS > miscRegInfo[NUM_MISCREGS]
static ExceptionLevel currEL(ThreadContext *tc)
bool haveSecurity() const
Returns true if this system implements the Security Extensions.
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8) ...
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
void preUnflattenMiscReg()
Overload hash function for BasicBlockRange type.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
int unflattenResultMiscReg[NUM_MISCREGS]
If the reg is a child reg of a banked set, then the parent is the last banked one in the list...
MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1)
int unflattenMiscReg(int reg)
void initializeMiscRegMetadata()
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
bool canReadAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)
virtual BaseISA * getIsaPtr()=0
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr)
Check for permission to read coprocessor registers.
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr)
Check for permission to write coprocessor registers.
ExceptionLevel highestEL() const
Returns the highest implemented exception level.
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
bool EL2Enabled(ThreadContext *tc)
MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
virtual RegVal readMiscReg(RegIndex misc_reg)=0
MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
bool canWriteAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)