120 warn(
"CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
121 crn, opc1, crm, opc2);
207 if (crm == 0 && opc2 == 0) {
232 }
else if (crm == 1) {
242 }
else if (opc1 == 4) {
248 }
else if (crm == 1) {
267 if (opc1 == 0 && crm == 0) {
276 }
else if (opc1 == 4) {
277 if (crm == 0 && opc2 == 2)
279 else if (crm == 1 && opc2 == 2)
284 if (opc1 == 0 && crm == 0 && opc2 == 0) {
289 if (opc1 == 0 && crm == 6 && opc2 == 0) {
298 }
else if (opc2 == 1) {
301 }
else if (crm == 1) {
304 }
else if (opc2 == 1) {
308 }
else if (opc1 == 4) {
314 }
else if (crm == 2 && opc2 == 0) {
320 if (opc1 == 0 && crm == 0) {
327 }
else if (opc1 == 4 && crm == 0) {
376 }
else if (opc2 == 2) {
425 }
else if (opc2 == 2) {
430 }
else if (opc1 == 4 && crm == 8) {
493 }
else if (opc1 == 4) {
501 }
else if (crm == 3) {
512 }
else if (crm == 4) {
519 }
else if (crm == 7) {
593 }
else if (opc1 == 1) {
612 }
else if (crm == 2) {
616 }
else if (opc2 == 1) {
620 }
else if (crm == 3) {
623 }
else if (opc2 == 1) {
627 }
else if (opc1 == 4) {
634 }
else if (crm == 3) {
667 }
else if (opc2 == 1) {
670 }
else if (crm == 1) {
674 }
else if (crm == 8) {
693 }
else if (crm == 9) {
704 }
else if (crm == 11) {
711 }
else if (crm == 12) {
731 }
else if (opc1 == 4) {
732 if (crm == 0 && opc2 == 0) {
734 }
else if (crm == 8) {
745 }
else if (crm == 9) {
758 }
else if (crm == 11) {
773 }
else if (crm == 12) {
792 }
else if (crm == 13) {
811 }
else if (crm == 14) {
830 }
else if (crm == 15) {
850 }
else if (opc1 == 6) {
879 }
else if (opc1 == 4) {
880 if (crm == 0 && opc2 == 2)
908 }
else if (opc1 == 4) {
909 if (crm == 1 && opc2 == 0) {
911 }
else if (crm == 2) {
986 std::tuple<bool, bool>
989 bool secure = !scr.ns;
990 bool canRead =
false;
991 bool undefined =
false;
1029 return std::make_tuple(canRead, undefined);
1032 std::tuple<bool, bool>
1035 bool secure = !scr.ns;
1036 bool canWrite =
false;
1037 bool undefined =
false;
1039 switch (cpsr.mode) {
1075 return std::make_tuple(canWrite, undefined);
1084 if (trap_cond && (!
EL2Enabled(tc) || !hcr.tge))
1100 int reg_as_int =
static_cast<int>(
reg);
1113 return isa->snsBankedIndex64(reg, scr.ns);
1134 unflattenResultMiscReg[
i] =
reg;
1136 unflattenResultMiscReg[
i] =
i;
1138 assert(unflattenResultMiscReg[
i] > -1);
1145 return unflattenResultMiscReg[
reg];
1159 if (highest_el ==
EL2 || highest_el ==
EL3)
1164 if (highest_el ==
EL3)
1186 panic(
"Invalid exception level");
1200 if (el ==
EL0 && !sctlr.uma)
1207 if (el ==
EL0 && !sctlr.dze)
1212 if (el ==
EL0 && !sctlr.uci)
1234 panic(
"Invalid exception level");
1240 unsigned crn,
unsigned crm,
2953 static bool completed =
false;
2960 bool aarch32EL3 = haveSecurity && !highestELIs64;
2971 bool LSMAOE =
false;
2974 bool nTLSMD =
false;
3044 .privSecure(!aarch32EL3)
3054 .privSecure(!aarch32EL3)
3068 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3070 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3161 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3170 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3173 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3182 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3191 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3194 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3197 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3200 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3215 .allPrivileges().exceptUserMode().writes(0);
3217 .allPrivileges().exceptUserMode().writes(0);
3219 .allPrivileges().exceptUserMode().writes(0);
3221 .allPrivileges().exceptUserMode().writes(0);
3223 .allPrivileges().exceptUserMode().writes(0);
3227 .allPrivileges().exceptUserMode().writes(0);
3229 .allPrivileges().exceptUserMode().writes(0);
3231 .allPrivileges().exceptUserMode().writes(0);
3233 .allPrivileges().exceptUserMode().writes(0);
3235 .allPrivileges().exceptUserMode().writes(0);
3237 .allPrivileges().exceptUserMode().writes(0);
3239 .allPrivileges().exceptUserMode().writes(0);
3241 .allPrivileges().exceptUserMode().writes(0);
3243 .allPrivileges().exceptUserMode().writes(0);
3245 .allPrivileges().exceptUserMode().writes(0);
3247 .allPrivileges().exceptUserMode().writes(0);
3249 .allPrivileges().exceptUserMode().writes(0);
3251 .allPrivileges().exceptUserMode().writes(0);
3253 .allPrivileges().exceptUserMode().writes(0);
3255 .allPrivileges().exceptUserMode().writes(0);
3257 .allPrivileges().exceptUserMode().writes(0);
3259 .allPrivileges().exceptUserMode().writes(0);
3261 .allPrivileges().exceptUserMode().writes(0);
3266 .privSecure(!aarch32EL3)
3267 .nonSecure().exceptUserMode();
3270 .secure().exceptUserMode();
3272 .hyp().monNonSecure();
3274 .hyp().monNonSecure();
3280 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3281 | (LSMAOE ? 0 : 0x10)
3282 | (nTLSMD ? 0 : 0x8));
3285 .privSecure(!aarch32EL3)
3286 .nonSecure().exceptUserMode();
3289 .secure().exceptUserMode();
3294 .privSecure(!aarch32EL3)
3295 .nonSecure().exceptUserMode();
3298 .secure().exceptUserMode();
3300 .allPrivileges().exceptUserMode();
3302 .mon().secure().exceptUserMode()
3308 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3310 .hyp().monNonSecure()
3311 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3312 | (IESB ? 0 : 0x200000)
3313 | (EnDA ? 0 : 0x8000000)
3314 | (EnIB ? 0 : 0x40000000)
3315 | (EnIA ? 0 : 0x80000000))
3318 .hyp().monNonSecure();
3320 .hyp().monNonSecure()
3323 .hyp().monNonSecure()
3326 .hyp().monNonSecure();
3328 .hyp().monNonSecure();
3330 .hyp().monNonSecure();
3334 .hyp().monNonSecure();
3339 .privSecure(!aarch32EL3)
3340 .nonSecure().exceptUserMode();
3343 .secure().exceptUserMode();
3348 .privSecure(!aarch32EL3)
3349 .nonSecure().exceptUserMode();
3352 .secure().exceptUserMode();
3357 .privSecure(!aarch32EL3)
3358 .nonSecure().exceptUserMode();
3361 .secure().exceptUserMode();
3363 .hyp().monNonSecure();
3365 .hyp().monNonSecure();
3370 .privSecure(!aarch32EL3)
3371 .nonSecure().exceptUserMode();
3374 .secure().exceptUserMode();
3379 .privSecure(!aarch32EL3)
3380 .nonSecure().exceptUserMode();
3383 .secure().exceptUserMode();
3388 .privSecure(!aarch32EL3)
3389 .nonSecure().exceptUserMode();
3392 .secure().exceptUserMode();
3401 .privSecure(!aarch32EL3)
3402 .nonSecure().exceptUserMode();
3407 .secure().exceptUserMode();
3416 .privSecure(!aarch32EL3)
3417 .nonSecure().exceptUserMode();
3422 .secure().exceptUserMode();
3424 .hyp().monNonSecure();
3426 .hyp().monNonSecure();
3428 .hyp().monNonSecure();
3433 .privSecure(!aarch32EL3)
3434 .nonSecure().exceptUserMode();
3437 .secure().exceptUserMode();
3442 .privSecure(!aarch32EL3)
3443 .nonSecure().exceptUserMode();
3446 .secure().exceptUserMode();
3448 .hyp().monNonSecure();
3450 .hyp().monNonSecure();
3452 .hyp().monNonSecure();
3456 .writes(1).exceptUserMode();
3460 .writes(1).exceptUserMode();
3465 .privSecure(!aarch32EL3)
3466 .nonSecure().exceptUserMode();
3469 .secure().exceptUserMode();
3471 .writes(1).exceptUserMode();
3475 .writes(1).exceptUserMode();
3481 .writes(1).exceptUserMode();
3485 .writes(1).exceptUserMode();
3489 .writes(1).exceptUserMode();
3493 .writes(1).exceptUserMode();
3495 .writes(1).exceptUserMode();
3497 .writes(1).exceptUserMode();
3499 .writes(1).exceptUserMode();
3501 .writes(1).exceptUserMode();
3503 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3505 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3507 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3509 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3511 .writes(1).exceptUserMode();
3515 .writes(1).exceptUserMode();
3523 .writes(1).exceptUserMode();
3527 .writes(1).exceptUserMode();
3531 .writes(1).exceptUserMode();
3533 .monNonSecureWrite().hypWrite();
3535 .monNonSecureWrite().hypWrite();
3537 .writes(1).exceptUserMode();
3539 .writes(1).exceptUserMode();
3541 .writes(1).exceptUserMode();
3543 .writes(1).exceptUserMode();
3545 .writes(1).exceptUserMode();
3547 .writes(1).exceptUserMode();
3549 .writes(1).exceptUserMode();
3551 .writes(1).exceptUserMode();
3553 .writes(1).exceptUserMode();
3555 .writes(1).exceptUserMode();
3557 .writes(1).exceptUserMode();
3559 .writes(1).exceptUserMode();
3561 .writes(1).exceptUserMode();
3563 .writes(1).exceptUserMode();
3565 .writes(1).exceptUserMode();
3567 .writes(1).exceptUserMode();
3569 .writes(1).exceptUserMode();
3571 .writes(1).exceptUserMode();
3573 .monNonSecureWrite().hypWrite();
3575 .monNonSecureWrite().hypWrite();
3577 .monNonSecureWrite().hypWrite();
3579 .monNonSecureWrite().hypWrite();
3581 .monNonSecureWrite().hypWrite();
3583 .monNonSecureWrite().hypWrite();
3585 .monNonSecureWrite().hypWrite();
3587 .monNonSecureWrite().hypWrite();
3589 .monNonSecureWrite().hypWrite();
3591 .monNonSecureWrite().hypWrite();
3593 .monNonSecureWrite().hypWrite();
3595 .monNonSecureWrite().hypWrite();
3621 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3623 .allPrivileges().exceptUserMode();
3625 .allPrivileges().exceptUserMode();
3630 .allPrivileges().exceptUserMode();
3633 .allPrivileges().exceptUserMode();
3638 .privSecure(!aarch32EL3)
3639 .nonSecure().exceptUserMode();
3642 .secure().exceptUserMode();
3647 .privSecure(!aarch32EL3)
3648 .nonSecure().exceptUserMode();
3651 .secure().exceptUserMode();
3656 .privSecure(!aarch32EL3)
3657 .nonSecure().exceptUserMode();
3660 .secure().exceptUserMode();
3665 .privSecure(!aarch32EL3)
3666 .nonSecure().exceptUserMode();
3669 .secure().exceptUserMode();
3674 .privSecure(!aarch32EL3)
3675 .nonSecure().exceptUserMode();
3678 .secure().exceptUserMode();
3683 .privSecure(!aarch32EL3)
3684 .nonSecure().exceptUserMode();
3687 .secure().exceptUserMode();
3689 .hyp().monNonSecure();
3691 .hyp().monNonSecure();
3695 .hyp().monNonSecure();
3699 .hyp().monNonSecure();
3704 .privSecure(!aarch32EL3)
3705 .nonSecure().exceptUserMode();
3708 .secure().exceptUserMode();
3716 .mon().secure().exceptUserMode();
3718 .allPrivileges().exceptUserMode().writes(0);
3720 .hyp().monNonSecure()
3725 .allPrivileges().exceptUserMode();
3730 .privSecure(!aarch32EL3)
3731 .nonSecure().exceptUserMode();
3734 .secure().exceptUserMode();
3740 .privSecure(!aarch32EL3)
3750 .userNonSecureWrite(0).userSecureRead(1)
3751 .privSecure(!aarch32EL3)
3755 .secure().userSecureWrite(0);
3760 .nonSecure().exceptUserMode()
3761 .privSecure(!aarch32EL3);
3764 .secure().exceptUserMode();
3766 .hyp().monNonSecure();
3771 .privSecureWrite(aarch32EL3);
3783 .privSecure(!aarch32EL3)
3788 .privSecure(aarch32EL3)
3795 .privSecure(!aarch32EL3);
3799 .privSecure(aarch32EL3);
3805 .privSecure(!aarch32EL3);
3809 .privSecure(aarch32EL3);
3841 .allPrivileges().exceptUserMode();
3844 .allPrivileges().exceptUserMode();
3847 .allPrivileges().exceptUserMode();
3850 .allPrivileges().exceptUserMode();
3853 .allPrivileges().exceptUserMode();
3856 .allPrivileges().exceptUserMode();
3859 .allPrivileges().exceptUserMode();
3862 .allPrivileges().exceptUserMode();
3865 .allPrivileges().exceptUserMode();
3868 .writes(1).exceptUserMode();
3871 .allPrivileges().exceptUserMode();
3874 .allPrivileges().exceptUserMode().writes(0);
3876 .hyp().monNonSecure();
3878 .hyp().monNonSecure();
3881 .allPrivileges().exceptUserMode();
3885 .allPrivileges().exceptUserMode();
3963 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3975 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3978 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3981 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3996 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
4003 .allPrivileges().exceptUserMode().writes(0);
4005 .allPrivileges().exceptUserMode().writes(0);
4007 .allPrivileges().exceptUserMode().writes(0);
4009 .allPrivileges().exceptUserMode().writes(0)
4012 .allPrivileges().exceptUserMode().writes(0)
4015 .allPrivileges().exceptUserMode().writes(0)
4018 .allPrivileges().exceptUserMode().writes(0)
4021 .allPrivileges().exceptUserMode().writes(0)
4024 .allPrivileges().exceptUserMode().writes(0)
4027 .allPrivileges().exceptUserMode().writes(0)
4030 .allPrivileges().exceptUserMode().writes(0)
4033 .allPrivileges().exceptUserMode().writes(0)
4036 .allPrivileges().exceptUserMode().writes(0)
4039 .allPrivileges().exceptUserMode().writes(0)
4042 .allPrivileges().exceptUserMode().writes(0)
4045 .allPrivileges().exceptUserMode().writes(0)
4048 .allPrivileges().exceptUserMode().writes(0)
4051 .allPrivileges().exceptUserMode().writes(0);
4053 .allPrivileges().exceptUserMode().writes(0);
4055 .allPrivileges().exceptUserMode().writes(0);
4057 .allPrivileges().exceptUserMode().writes(0);
4059 .allPrivileges().exceptUserMode().writes(0);
4061 .allPrivileges().exceptUserMode().writes(0);
4063 .allPrivileges().exceptUserMode().writes(0);
4065 .allPrivileges().exceptUserMode().writes(0);
4067 .allPrivileges().exceptUserMode().writes(0);
4069 .allPrivileges().exceptUserMode().writes(0);
4071 .allPrivileges().exceptUserMode().writes(0);
4073 .allPrivileges().exceptUserMode().writes(0);
4075 .allPrivileges().exceptUserMode().writes(0);
4077 .allPrivileges().exceptUserMode().writes(0);
4080 .allPrivileges().exceptUserMode();
4082 .allPrivileges().exceptUserMode();
4084 .allPrivileges().exceptUserMode();
4086 .allPrivileges().exceptUserMode();
4088 .allPrivileges().exceptUserMode();
4090 .allPrivileges().exceptUserMode();
4092 .allPrivileges().exceptUserMode();
4094 .allPrivileges().exceptUserMode();
4096 .allPrivileges().exceptUserMode();
4098 .allPrivileges().exceptUserMode();
4101 .allPrivileges().exceptUserMode().writes(0);
4103 .allPrivileges().exceptUserMode().writes(0);
4105 .allPrivileges().exceptUserMode().writes(0);
4107 .allPrivileges().exceptUserMode()
4120 .allPrivileges().exceptUserMode()
4121 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4122 | (IESB ? 0 : 0x200000)
4123 | (EnDA ? 0 : 0x8000000)
4124 | (EnIB ? 0 : 0x40000000)
4125 | (EnIA ? 0 : 0x80000000))
4126 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4127 | (nTLSMD ? 0 : 0x8000000)
4128 | (LSMAOE ? 0 : 0x10000000))
4131 .allPrivileges().exceptUserMode()
4134 .allPrivileges().exceptUserMode()
4138 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4139 | (IESB ? 0 : 0x200000)
4140 | (EnDA ? 0 : 0x8000000)
4141 | (EnIB ? 0 : 0x40000000)
4142 | (EnIA ? 0 : 0x80000000))
4165 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4166 | (IESB ? 0 : 0x200000)
4167 | (EnDA ? 0 : 0x8000000)
4168 | (EnIB ? 0 : 0x40000000)
4169 | (EnIA ? 0 : 0x80000000))
4184 .allPrivileges().exceptUserMode()
4187 .allPrivileges().exceptUserMode()
4190 .allPrivileges().exceptUserMode()
4214 .allPrivileges().exceptUserMode()
4217 .allPrivileges().exceptUserMode();
4219 .allPrivileges().exceptUserMode();
4221 .allPrivileges().exceptUserMode();
4223 .allPrivileges().exceptUserMode().writes(0);
4225 .allPrivileges().exceptUserMode()
4226 .implemented(havePAN);
4262 .allPrivileges().exceptUserMode()
4265 .allPrivileges().exceptUserMode()
4268 .allPrivileges().exceptUserMode();
4290 .allPrivileges().exceptUserMode()
4302 .writes(1).exceptUserMode();
4304 .allPrivileges().exceptUserMode()
4308 .writes(1).exceptUserMode();
4311 .writes(1).exceptUserMode();
4314 .writes(1).exceptUserMode();
4316 .writes(1).exceptUserMode();
4318 .writes(1).exceptUserMode();
4320 .writes(1).exceptUserMode();
4322 .writes(1).exceptUserMode();
4325 .writes(1).exceptUserMode();
4328 .writes(1).exceptUserMode();
4331 .writes(1).userSecureWrite(0);
4344 .monNonSecureWrite().hypWrite();
4346 .monNonSecureWrite().hypWrite();
4348 .hypWrite().monSecureWrite().monNonSecureWrite();
4350 .hypWrite().monSecureWrite().monNonSecureWrite();
4352 .hypWrite().monSecureWrite().monNonSecureWrite();
4354 .hypWrite().monSecureWrite().monNonSecureWrite();
4356 .monSecureWrite().monNonSecureWrite();
4358 .monSecureWrite().monNonSecureWrite();
4360 .writes(1).exceptUserMode();
4362 .writes(1).exceptUserMode();
4364 .writes(1).exceptUserMode();
4366 .writes(1).exceptUserMode();
4368 .writes(1).exceptUserMode();
4370 .writes(1).exceptUserMode();
4372 .writes(1).exceptUserMode();
4374 .writes(1).exceptUserMode();
4376 .writes(1).exceptUserMode();
4378 .writes(1).exceptUserMode();
4380 .writes(1).exceptUserMode();
4382 .writes(1).exceptUserMode();
4384 .hypWrite().monSecureWrite().monNonSecureWrite();
4386 .hypWrite().monSecureWrite().monNonSecureWrite();
4388 .monNonSecureWrite().hypWrite();
4390 .monNonSecureWrite().hypWrite();
4392 .hypWrite().monSecureWrite().monNonSecureWrite();
4394 .monNonSecureWrite().hypWrite();
4396 .hypWrite().monSecureWrite().monNonSecureWrite();
4398 .hypWrite().monSecureWrite().monNonSecureWrite();
4400 .hypWrite().monSecureWrite().monNonSecureWrite();
4402 .monNonSecureWrite().hypWrite();
4404 .monNonSecureWrite().hypWrite();
4406 .hypWrite().monSecureWrite().monNonSecureWrite();
4408 .monNonSecureWrite().hypWrite();
4410 .hypWrite().monSecureWrite().monNonSecureWrite();
4412 .monSecureWrite().monNonSecureWrite();
4414 .monSecureWrite().monNonSecureWrite();
4416 .monSecureWrite().monNonSecureWrite();
4418 .monSecureWrite().monNonSecureWrite();
4420 .monSecureWrite().monNonSecureWrite();
4422 .monSecureWrite().monNonSecureWrite();
4424 .allPrivileges().exceptUserMode()
4427 .allPrivileges().exceptUserMode()
4465 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4471 .allPrivileges().exceptUserMode()
4474 .allPrivileges().exceptUserMode()
4487 .allPrivileges().exceptUserMode();
4489 .allPrivileges().exceptUserMode();
4491 .allPrivileges().exceptUserMode()
4494 .allPrivileges().exceptUserMode().writes(0);
4496 .allPrivileges().exceptUserMode().writes(0);
4502 .mon().hyp().writes(0);
4510 .allPrivileges().exceptUserMode()
4513 .allPrivileges().exceptUserMode()
4519 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4530 .privSecureWrite(aarch32EL3)
4542 .res0(0xfffffffffffffff8)
4549 .res0(0xffffffff00000000)
4553 .res0(0xfffffffffffffff8)
4560 .res0(0xffffffff00000000)
4565 .res0(0xfffffffffffffff8)
4574 .res0(0xffffffff00000000)
4579 .res0(0xfffffffffffffff8)
4588 .res0(0xffffffff00000000)
4593 .res0(0xfffffffffffdfc00)
4598 .res0(0xfffffffffffdfc00)
4603 .res0(0xfffffffffffffff8);
4610 .res0(0xffffffff00000000);
4614 .res0(0xfffffffffffc0000)
4619 .res0(0xfffffffffffffff8)
4628 .res0(0xffffffff00000000)
4634 .res0(0xfffffffffffffff8);
4641 .res0(0xffffffff00000000);
4685 .allPrivileges().exceptUserMode();
4687 .allPrivileges().exceptUserMode();
4689 .allPrivileges().exceptUserMode();
4691 .allPrivileges().exceptUserMode();
4693 .allPrivileges().exceptUserMode();
4695 .allPrivileges().exceptUserMode();
4697 .allPrivileges().exceptUserMode();
4699 .allPrivileges().exceptUserMode();
4701 .allPrivileges().exceptUserMode();
4703 .allPrivileges().exceptUserMode();
4705 .allPrivileges().exceptUserMode();
4707 .allPrivileges().exceptUserMode();
4709 .allPrivileges().exceptUserMode();
4713 .allPrivileges().exceptUserMode();
4715 .allPrivileges().exceptUserMode().writes(0);
4722 .allPrivileges().exceptUserMode()
4725 .allPrivileges().exceptUserMode().writes(0)
4728 .allPrivileges().exceptUserMode().reads(0)
4731 .allPrivileges().exceptUserMode().writes(0)
4735 .allPrivileges().exceptUserMode()
4738 .allPrivileges().exceptUserMode()
4741 .allPrivileges().exceptUserMode()
4744 .allPrivileges().exceptUserMode()
4747 .allPrivileges().exceptUserMode()
4754 .allPrivileges().exceptUserMode()
4758 .allPrivileges().exceptUserMode()
4765 .allPrivileges().exceptUserMode()
4769 .allPrivileges().exceptUserMode()
4776 .allPrivileges().exceptUserMode()
4780 .allPrivileges().exceptUserMode()
4787 .allPrivileges().exceptUserMode()
4791 .allPrivileges().exceptUserMode()
4795 .allPrivileges().exceptUserMode().reads(0)
4798 .allPrivileges().exceptUserMode().writes(0)
4801 .allPrivileges().exceptUserMode().reads(0)
4804 .allPrivileges().exceptUserMode().reads(0)
4807 .allPrivileges().exceptUserMode().reads(0)
4810 .allPrivileges().exceptUserMode().writes(0)
4814 .allPrivileges().exceptUserMode().reads(0)
4817 .allPrivileges().exceptUserMode().writes(0)
4825 .allPrivileges().exceptUserMode()
4830 .secure().exceptUserMode()
4838 .allPrivileges().exceptUserMode()
4843 .secure().exceptUserMode()
4851 .allPrivileges().exceptUserMode()
4856 .secure().exceptUserMode()
4860 .allPrivileges().exceptUserMode()
4868 .allPrivileges().exceptUserMode()
4873 .secure().exceptUserMode()
4879 .allPrivileges().exceptUserMode()
4882 .allPrivileges().exceptUserMode()
4885 .allPrivileges().exceptUserMode()
4922 .hyp().mon().writes(0)
4925 .hyp().mon().writes(0)
4928 .hyp().mon().writes(0)
4931 .hyp().mon().writes(0)
4938 .allPrivileges().exceptUserMode();
4941 .allPrivileges().exceptUserMode();
4944 .allPrivileges().exceptUserMode();
4947 .allPrivileges().exceptUserMode();
4950 .allPrivileges().exceptUserMode();
4953 .allPrivileges().exceptUserMode();
4956 .allPrivileges().exceptUserMode();
4959 .allPrivileges().exceptUserMode();
4962 .allPrivileges().exceptUserMode();
4965 .allPrivileges().exceptUserMode();
4968 .allPrivileges().exceptUserMode();
4971 .allPrivileges().exceptUserMode();
4974 .allPrivileges().exceptUserMode();
4977 .allPrivileges().exceptUserMode();
4980 .allPrivileges().exceptUserMode();
4983 .allPrivileges().exceptUserMode();
4987 .allPrivileges().exceptUserMode();
4989 .allPrivileges().exceptUserMode();
4991 .allPrivileges().exceptUserMode();
4993 .allPrivileges().exceptUserMode();
4995 .allPrivileges().exceptUserMode();
4997 .allPrivileges().exceptUserMode();
4999 .allPrivileges().exceptUserMode();
5001 .allPrivileges().exceptUserMode();
5003 .allPrivileges().exceptUserMode();
5005 .allPrivileges().exceptUserMode();
5007 .allPrivileges().exceptUserMode();
5009 .allPrivileges().exceptUserMode();
5011 .allPrivileges().exceptUserMode();
5013 .allPrivileges().exceptUserMode();
5015 .allPrivileges().exceptUserMode();
5017 .allPrivileges().exceptUserMode();
5019 .allPrivileges().exceptUserMode().reads(0);
5021 .allPrivileges().exceptUserMode();
5023 .allPrivileges().exceptUserMode();
5025 .allPrivileges().exceptUserMode();
5027 .allPrivileges().exceptUserMode();
5029 .allPrivileges().exceptUserMode();
5031 .allPrivileges().exceptUserMode();
5033 .allPrivileges().exceptUserMode();
5035 .allPrivileges().exceptUserMode().reads(0);
5037 .allPrivileges().exceptUserMode().reads(0);
5039 .allPrivileges().exceptUserMode().reads(0);
5041 .allPrivileges().exceptUserMode().writes(0);
5043 .allPrivileges().exceptUserMode().writes(0);
5045 .allPrivileges().exceptUserMode();
5047 .allPrivileges().exceptUserMode().writes(0);
5049 .allPrivileges().exceptUserMode().writes(0);
5051 .allPrivileges().exceptUserMode();
5053 .allPrivileges().exceptUserMode();
5055 .allPrivileges().exceptUserMode();
5057 .allPrivileges().exceptUserMode();
5059 .allPrivileges().exceptUserMode();
5061 .allPrivileges().exceptUserMode();
5063 .allPrivileges().exceptUserMode();
5065 .allPrivileges().exceptUserMode();
5067 .allPrivileges().exceptUserMode().writes(0);
5069 .allPrivileges().exceptUserMode().reads(0);
5071 .allPrivileges().exceptUserMode().reads(0);
5073 .allPrivileges().exceptUserMode();
5075 .allPrivileges().exceptUserMode();
5077 .allPrivileges().exceptUserMode();
5098 .hyp().mon().writes(0);
5100 .hyp().mon().writes(0);
5102 .hyp().mon().writes(0);
5104 .hyp().mon().writes(0);
5190 .allPrivileges().exceptUserMode().writes(0);
5196 .unimplemented().warnNotFail();
5198 .allPrivileges().exceptUserMode();
5204 .allPrivileges().exceptUserMode().writes(0);
5214 .warnNotFail(impdefAsNop);
#define panic(...)
This implements a cprintf based panic() function.
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
bitset< NUM_MISCREG_INFOS > miscRegInfo[NUM_MISCREGS]
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to write coprocessor registers.
bool AArch32isUndefinedGenericTimer(MiscRegIndex reg, 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...
static ExceptionLevel currEL(const ThreadContext *tc)
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 ELIs32(ThreadContext *tc, ExceptionLevel el)
bool canReadAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)
virtual BaseISA * getIsaPtr()=0
ExceptionLevel highestEL() const
Returns the highest implemented exception level.
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to read coprocessor registers.
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 condGenericTimerSystemAccessTrapEL1(const MiscRegIndex miscReg, ThreadContext *tc)
bool canWriteAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)