334 warn(
"CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
335 crn, opc1, crm,
opc2);
420 if (crm == 0 &&
opc2 == 0) {
445 }
else if (crm == 1) {
454 }
else if (crm == 3) {
458 }
else if (opc1 == 4) {
464 }
else if (crm == 1) {
483 if (opc1 == 0 && crm == 0) {
492 }
else if (opc1 == 4) {
493 if (crm == 0 &&
opc2 == 2)
495 else if (crm == 1 &&
opc2 == 2)
500 if (opc1 == 0 && crm == 0 &&
opc2 == 0) {
505 if (opc1 == 0 && crm == 6 &&
opc2 == 0) {
514 }
else if (
opc2 == 1) {
517 }
else if (crm == 1) {
520 }
else if (
opc2 == 1) {
524 }
else if (opc1 == 4) {
530 }
else if (crm == 2 &&
opc2 == 0) {
536 if (opc1 == 0 && crm == 0) {
543 }
else if (opc1 == 4 && crm == 0) {
598 }
else if (
opc2 == 2) {
647 }
else if (
opc2 == 2) {
652 }
else if (opc1 == 4 && crm == 8) {
715 }
else if (opc1 == 4) {
723 }
else if (crm == 3) {
734 }
else if (crm == 4) {
741 }
else if (crm == 7) {
815 }
else if (opc1 == 1) {
834 }
else if (crm == 2) {
838 }
else if (
opc2 == 1) {
842 }
else if (crm == 3) {
845 }
else if (
opc2 == 1) {
849 }
else if (opc1 == 4) {
856 }
else if (crm == 3) {
889 }
else if (
opc2 == 1) {
892 }
else if (crm == 1) {
896 }
else if (crm == 8) {
915 }
else if (crm == 9) {
926 }
else if (crm == 11) {
933 }
else if (crm == 12) {
953 }
else if (opc1 == 4) {
954 if (crm == 0 &&
opc2 == 0) {
956 }
else if (crm == 8) {
967 }
else if (crm == 9) {
980 }
else if (crm == 11) {
995 }
else if (crm == 12) {
1014 }
else if (crm == 13) {
1033 }
else if (crm == 14) {
1052 }
else if (crm == 15) {
1072 }
else if (opc1 == 6) {
1101 }
else if (opc1 == 4) {
1102 if (crm == 0 &&
opc2 == 2)
1130 }
else if (opc1 == 4) {
1131 if (crm == 1 &&
opc2 == 0) {
1133 }
else if (crm == 2) {
1208 std::tuple<bool, bool>
1211 bool secure = !scr.ns;
1212 bool canRead =
false;
1213 bool undefined =
false;
1215 switch (cpsr.mode) {
1251 return std::make_tuple(canRead, undefined);
1254 std::tuple<bool, bool>
1257 bool secure = !scr.ns;
1258 bool canWrite =
false;
1259 bool undefined =
false;
1261 switch (cpsr.mode) {
1297 return std::make_tuple(canWrite, undefined);
1306 if (trap_cond && (!
EL2Enabled(tc) || !hcr.tge))
1322 int reg_as_int =
static_cast<int>(
reg);
1335 return isa->snsBankedIndex64(
reg, scr.ns);
1381 if (highest_el ==
EL2 || highest_el ==
EL3)
1386 if (highest_el ==
EL3)
1413 panic(
"Invalid exception level");
1449 panic(
"Invalid exception level");
1455 unsigned crn,
unsigned crm,
3404 static bool completed =
false;
3422 bool LSMAOE =
false;
3425 bool nTLSMD =
false;
3495 .privSecure(!aarch32EL3)
3505 .privSecure(!aarch32EL3)
3677 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3725 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3734 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3737 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3740 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3769 .allPrivileges().exceptUserMode().writes(0);
3812 .privSecure(!aarch32EL3)
3813 .nonSecure().exceptUserMode();
3816 .secure().exceptUserMode();
3818 .
hyp().monNonSecure();
3820 .
hyp().monNonSecure();
3826 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3827 | (LSMAOE ? 0 : 0x10)
3828 | (nTLSMD ? 0 : 0x8));
3831 .privSecure(!aarch32EL3)
3832 .nonSecure().exceptUserMode();
3835 .secure().exceptUserMode();
3840 .privSecure(!aarch32EL3)
3841 .nonSecure().exceptUserMode();
3844 .secure().exceptUserMode();
3850 .
mon().secure().exceptUserMode()
3856 .
allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3858 .
hyp().monNonSecure()
3859 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3860 | (IESB ? 0 : 0x200000)
3861 | (EnDA ? 0 : 0x8000000)
3862 | (EnIB ? 0 : 0x40000000)
3863 | (EnIA ? 0 : 0x80000000))
3866 .
hyp().monNonSecure();
3868 .
hyp().monNonSecure()
3871 .
hyp().monNonSecure()
3874 .
hyp().monNonSecure();
3876 .
hyp().monNonSecure();
3878 .
hyp().monNonSecure();
3882 .hyp().monNonSecure();
3887 .privSecure(!aarch32EL3)
3888 .nonSecure().exceptUserMode();
3891 .secure().exceptUserMode();
3896 .privSecure(!aarch32EL3)
3897 .nonSecure().exceptUserMode();
3900 .secure().exceptUserMode();
3905 .privSecure(!aarch32EL3)
3906 .nonSecure().exceptUserMode();
3909 .secure().exceptUserMode();
3911 .
hyp().monNonSecure();
3913 .
hyp().monNonSecure();
3918 .privSecure(!aarch32EL3)
3919 .nonSecure().exceptUserMode();
3922 .secure().exceptUserMode();
3927 .privSecure(!aarch32EL3)
3928 .nonSecure().exceptUserMode();
3931 .secure().exceptUserMode();
3936 .privSecure(!aarch32EL3)
3937 .nonSecure().exceptUserMode();
3940 .secure().exceptUserMode();
3949 .privSecure(!aarch32EL3)
3950 .nonSecure().exceptUserMode();
3955 .secure().exceptUserMode();
3964 .privSecure(!aarch32EL3)
3965 .nonSecure().exceptUserMode();
3970 .secure().exceptUserMode();
3972 .
hyp().monNonSecure();
3974 .
hyp().monNonSecure();
3976 .
hyp().monNonSecure();
3981 .privSecure(!aarch32EL3)
3982 .nonSecure().exceptUserMode();
3985 .secure().exceptUserMode();
3990 .privSecure(!aarch32EL3)
3991 .nonSecure().exceptUserMode();
3994 .secure().exceptUserMode();
3996 .
hyp().monNonSecure();
3998 .
hyp().monNonSecure();
4000 .
hyp().monNonSecure();
4004 .writes(1).exceptUserMode();
4008 .writes(1).exceptUserMode();
4013 .privSecure(!aarch32EL3)
4014 .nonSecure().exceptUserMode();
4017 .secure().exceptUserMode();
4019 .
writes(1).exceptUserMode();
4023 .writes(1).exceptUserMode();
4029 .writes(1).exceptUserMode();
4033 .writes(1).exceptUserMode();
4037 .writes(1).exceptUserMode();
4041 .writes(1).exceptUserMode();
4043 .
writes(1).exceptUserMode();
4045 .
writes(1).exceptUserMode();
4047 .
writes(1).exceptUserMode();
4049 .
writes(1).exceptUserMode();
4059 .
writes(1).exceptUserMode();
4063 .writes(1).exceptUserMode();
4071 .writes(1).exceptUserMode();
4075 .writes(1).exceptUserMode();
4079 .writes(1).exceptUserMode();
4085 .
writes(1).exceptUserMode();
4087 .
writes(1).exceptUserMode();
4089 .
writes(1).exceptUserMode();
4091 .
writes(1).exceptUserMode();
4093 .
writes(1).exceptUserMode();
4095 .
writes(1).exceptUserMode();
4097 .
writes(1).exceptUserMode();
4099 .
writes(1).exceptUserMode();
4101 .
writes(1).exceptUserMode();
4103 .
writes(1).exceptUserMode();
4105 .
writes(1).exceptUserMode();
4107 .
writes(1).exceptUserMode();
4109 .
writes(1).exceptUserMode();
4111 .
writes(1).exceptUserMode();
4113 .
writes(1).exceptUserMode();
4115 .
writes(1).exceptUserMode();
4117 .
writes(1).exceptUserMode();
4119 .
writes(1).exceptUserMode();
4181 .allPrivileges().exceptUserMode();
4186 .privSecure(!aarch32EL3)
4187 .nonSecure().exceptUserMode();
4190 .secure().exceptUserMode();
4195 .privSecure(!aarch32EL3)
4196 .nonSecure().exceptUserMode();
4199 .secure().exceptUserMode();
4204 .privSecure(!aarch32EL3)
4205 .nonSecure().exceptUserMode();
4208 .secure().exceptUserMode();
4213 .privSecure(!aarch32EL3)
4214 .nonSecure().exceptUserMode();
4217 .secure().exceptUserMode();
4222 .privSecure(!aarch32EL3)
4223 .nonSecure().exceptUserMode();
4226 .secure().exceptUserMode();
4231 .privSecure(!aarch32EL3)
4232 .nonSecure().exceptUserMode();
4235 .secure().exceptUserMode();
4237 .
hyp().monNonSecure();
4239 .
hyp().monNonSecure();
4243 .hyp().monNonSecure();
4247 .hyp().monNonSecure();
4252 .privSecure(!aarch32EL3)
4253 .nonSecure().exceptUserMode();
4256 .secure().exceptUserMode();
4264 .mon().secure().exceptUserMode();
4268 .
hyp().monNonSecure()
4273 .allPrivileges().exceptUserMode();
4278 .privSecure(!aarch32EL3)
4279 .nonSecure().exceptUserMode();
4282 .secure().exceptUserMode();
4288 .privSecure(!aarch32EL3)
4298 .userNonSecureWrite(0).userSecureRead(1)
4299 .privSecure(!aarch32EL3)
4303 .secure().userSecureWrite(0);
4308 .nonSecure().exceptUserMode()
4309 .privSecure(!aarch32EL3);
4312 .secure().exceptUserMode();
4314 .
hyp().monNonSecure();
4319 .privSecureWrite(aarch32EL3);
4331 .privSecure(!aarch32EL3)
4336 .privSecure(aarch32EL3)
4343 .privSecure(!aarch32EL3);
4347 .privSecure(aarch32EL3);
4353 .privSecure(!aarch32EL3);
4357 .privSecure(aarch32EL3);
4389 .allPrivileges().exceptUserMode();
4392 .allPrivileges().exceptUserMode();
4395 .allPrivileges().exceptUserMode();
4398 .allPrivileges().exceptUserMode();
4401 .allPrivileges().exceptUserMode();
4404 .allPrivileges().exceptUserMode();
4407 .allPrivileges().exceptUserMode();
4410 .allPrivileges().exceptUserMode();
4413 .allPrivileges().exceptUserMode();
4416 .writes(1).exceptUserMode();
4419 .allPrivileges().exceptUserMode();
4422 .allPrivileges().exceptUserMode().writes(0);
4424 .
hyp().monNonSecure();
4426 .
hyp().monNonSecure();
4429 .allPrivileges().exceptUserMode();
4433 .allPrivileges().exceptUserMode();
4808 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4809 | (IESB ? 0 : 0x200000)
4810 | (EnDA ? 0 : 0x8000000)
4811 | (EnIB ? 0 : 0x40000000)
4812 | (EnIA ? 0 : 0x80000000))
4813 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4814 | (nTLSMD ? 0 : 0x8000000)
4815 | (LSMAOE ? 0 : 0x10000000))
4819 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4820 | (IESB ? 0 : 0x200000)
4821 | (EnDA ? 0 : 0x8000000)
4822 | (EnIB ? 0 : 0x40000000)
4823 | (EnIA ? 0 : 0x80000000))
4824 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4825 | (nTLSMD ? 0 : 0x8000000)
4826 | (LSMAOE ? 0 : 0x10000000))
4839 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4840 | (IESB ? 0 : 0x200000)
4841 | (EnDA ? 0 : 0x8000000)
4842 | (EnIB ? 0 : 0x40000000)
4843 | (EnIA ? 0 : 0x80000000))
4866 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4867 | (IESB ? 0 : 0x200000)
4868 | (EnDA ? 0 : 0x8000000)
4869 | (EnIB ? 0 : 0x40000000)
4870 | (EnIA ? 0 : 0x80000000))
5035 .writes(1).exceptUserMode();
5041 .writes(1).exceptUserMode();
5044 .writes(1).exceptUserMode();
5047 .writes(1).exceptUserMode();
5049 .
writes(1).exceptUserMode();
5051 .
writes(1).exceptUserMode();
5053 .
writes(1).exceptUserMode();
5055 .
writes(1).exceptUserMode();
5058 .writes(1).exceptUserMode();
5061 .writes(1).exceptUserMode();
5064 .writes(1).userSecureWrite(0);
5081 .
hypWrite().monSecureWrite().monNonSecureWrite();
5083 .
hypWrite().monSecureWrite().monNonSecureWrite();
5085 .
hypWrite().monSecureWrite().monNonSecureWrite();
5087 .
hypWrite().monSecureWrite().monNonSecureWrite();
5093 .
writes(1).exceptUserMode();
5095 .
writes(1).exceptUserMode();
5097 .
writes(1).exceptUserMode();
5099 .
writes(1).exceptUserMode();
5101 .
writes(1).exceptUserMode();
5103 .
writes(1).exceptUserMode();
5105 .
writes(1).exceptUserMode();
5107 .
writes(1).exceptUserMode();
5109 .
writes(1).exceptUserMode();
5111 .
writes(1).exceptUserMode();
5113 .
writes(1).exceptUserMode();
5115 .
writes(1).exceptUserMode();
5117 .
hypWrite().monSecureWrite().monNonSecureWrite();
5119 .
hypWrite().monSecureWrite().monNonSecureWrite();
5125 .
hypWrite().monSecureWrite().monNonSecureWrite();
5129 .
hypWrite().monSecureWrite().monNonSecureWrite();
5131 .
hypWrite().monSecureWrite().monNonSecureWrite();
5133 .
hypWrite().monSecureWrite().monNonSecureWrite();
5139 .
hypWrite().monSecureWrite().monNonSecureWrite();
5143 .
hypWrite().monSecureWrite().monNonSecureWrite();
5244 .
mon().hyp().writes(0);
5275 .privSecureWrite(aarch32EL3)
5287 .res0(0xfffffffffffffff8)
5294 .res0(0xffffffff00000000)
5298 .res0(0xfffffffffffffff8)
5305 .res0(0xffffffff00000000)
5310 .res0(0xfffffffffffffff8)
5319 .res0(0xffffffff00000000)
5324 .res0(0xfffffffffffffff8)
5333 .res0(0xffffffff00000000)
5338 .res0(0xfffffffffffdfc00)
5343 .res0(0xfffffffffffdfc00)
5348 .res0(0xfffffffffffffff8);
5355 .res0(0xffffffff00000000);
5359 .res0(0xfffffffffffc0000)
5364 .res0(0xfffffffffffffff8)
5373 .res0(0xffffffff00000000)
5378 .res0(0xfffffffffffffff8)
5383 .res0(0xfffffffffffffff8)
5388 .res0(0xfffffffffffffff8)
5393 .res0(0xfffffffffffffff8);
5400 .res0(0xffffffff00000000);
5404 .res0(0xfffffffffffffff8)
5409 .res0(0xfffffffffffffff8)
5414 .res0(0xfffffffffffffff8)
5487 .allPrivileges().exceptUserMode();
5496 .allPrivileges().exceptUserMode()
5509 .allPrivileges().exceptUserMode()
5528 .allPrivileges().exceptUserMode()
5532 .allPrivileges().exceptUserMode()
5539 .allPrivileges().exceptUserMode()
5543 .allPrivileges().exceptUserMode()
5550 .allPrivileges().exceptUserMode()
5554 .allPrivileges().exceptUserMode()
5561 .allPrivileges().exceptUserMode()
5565 .allPrivileges().exceptUserMode()
5569 .allPrivileges().exceptUserMode().reads(0)
5588 .allPrivileges().exceptUserMode().reads(0)
5599 .allPrivileges().exceptUserMode()
5604 .secure().exceptUserMode()
5612 .allPrivileges().exceptUserMode()
5617 .secure().exceptUserMode()
5625 .allPrivileges().exceptUserMode()
5630 .secure().exceptUserMode()
5634 .allPrivileges().exceptUserMode()
5642 .allPrivileges().exceptUserMode()
5647 .secure().exceptUserMode()
5696 .
hyp().mon().writes(0)
5699 .
hyp().mon().writes(0)
5702 .
hyp().mon().writes(0)
5705 .
hyp().mon().writes(0)
5712 .allPrivileges().exceptUserMode();
5715 .allPrivileges().exceptUserMode();
5718 .allPrivileges().exceptUserMode();
5721 .allPrivileges().exceptUserMode();
5724 .allPrivileges().exceptUserMode();
5727 .allPrivileges().exceptUserMode();
5730 .allPrivileges().exceptUserMode();
5733 .allPrivileges().exceptUserMode();
5736 .allPrivileges().exceptUserMode();
5739 .allPrivileges().exceptUserMode();
5742 .allPrivileges().exceptUserMode();
5745 .allPrivileges().exceptUserMode();
5748 .allPrivileges().exceptUserMode();
5751 .allPrivileges().exceptUserMode();
5754 .allPrivileges().exceptUserMode();
5757 .allPrivileges().exceptUserMode();
5872 .
hyp().mon().writes(0);
5874 .
hyp().mon().writes(0);
5876 .
hyp().mon().writes(0);
5878 .
hyp().mon().writes(0);