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,
3406 static bool completed =
false;
3424 bool LSMAOE =
false;
3427 bool nTLSMD =
false;
3497 .privSecure(!aarch32EL3)
3507 .privSecure(!aarch32EL3)
3679 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3727 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3736 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3739 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3742 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3771 .allPrivileges().exceptUserMode().writes(0);
3814 .privSecure(!aarch32EL3)
3815 .nonSecure().exceptUserMode();
3818 .secure().exceptUserMode();
3820 .
hyp().monNonSecure();
3822 .
hyp().monNonSecure();
3828 .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3829 | (LSMAOE ? 0 : 0x10)
3830 | (nTLSMD ? 0 : 0x8));
3833 .privSecure(!aarch32EL3)
3834 .nonSecure().exceptUserMode();
3837 .secure().exceptUserMode();
3842 .privSecure(!aarch32EL3)
3843 .nonSecure().exceptUserMode();
3846 .secure().exceptUserMode();
3852 .
mon().secure().exceptUserMode()
3858 .
allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3860 .
hyp().monNonSecure()
3861 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3862 | (IESB ? 0 : 0x200000)
3863 | (EnDA ? 0 : 0x8000000)
3864 | (EnIB ? 0 : 0x40000000)
3865 | (EnIA ? 0 : 0x80000000))
3868 .
hyp().monNonSecure();
3870 .
hyp().monNonSecure()
3873 .
hyp().monNonSecure()
3876 .
hyp().monNonSecure();
3878 .
hyp().monNonSecure();
3880 .
hyp().monNonSecure();
3884 .hyp().monNonSecure();
3889 .privSecure(!aarch32EL3)
3890 .nonSecure().exceptUserMode();
3893 .secure().exceptUserMode();
3898 .privSecure(!aarch32EL3)
3899 .nonSecure().exceptUserMode();
3902 .secure().exceptUserMode();
3907 .privSecure(!aarch32EL3)
3908 .nonSecure().exceptUserMode();
3911 .secure().exceptUserMode();
3913 .
hyp().monNonSecure();
3915 .
hyp().monNonSecure();
3920 .privSecure(!aarch32EL3)
3921 .nonSecure().exceptUserMode();
3924 .secure().exceptUserMode();
3929 .privSecure(!aarch32EL3)
3930 .nonSecure().exceptUserMode();
3933 .secure().exceptUserMode();
3938 .privSecure(!aarch32EL3)
3939 .nonSecure().exceptUserMode();
3942 .secure().exceptUserMode();
3951 .privSecure(!aarch32EL3)
3952 .nonSecure().exceptUserMode();
3957 .secure().exceptUserMode();
3966 .privSecure(!aarch32EL3)
3967 .nonSecure().exceptUserMode();
3972 .secure().exceptUserMode();
3974 .
hyp().monNonSecure();
3976 .
hyp().monNonSecure();
3978 .
hyp().monNonSecure();
3983 .privSecure(!aarch32EL3)
3984 .nonSecure().exceptUserMode();
3987 .secure().exceptUserMode();
3992 .privSecure(!aarch32EL3)
3993 .nonSecure().exceptUserMode();
3996 .secure().exceptUserMode();
3998 .
hyp().monNonSecure();
4000 .
hyp().monNonSecure();
4002 .
hyp().monNonSecure();
4006 .writes(1).exceptUserMode();
4010 .writes(1).exceptUserMode();
4015 .privSecure(!aarch32EL3)
4016 .nonSecure().exceptUserMode();
4019 .secure().exceptUserMode();
4021 .
writes(1).exceptUserMode();
4025 .writes(1).exceptUserMode();
4031 .writes(1).exceptUserMode();
4035 .writes(1).exceptUserMode();
4039 .writes(1).exceptUserMode();
4043 .writes(1).exceptUserMode();
4045 .
writes(1).exceptUserMode();
4047 .
writes(1).exceptUserMode();
4049 .
writes(1).exceptUserMode();
4051 .
writes(1).exceptUserMode();
4061 .
writes(1).exceptUserMode();
4065 .writes(1).exceptUserMode();
4073 .writes(1).exceptUserMode();
4077 .writes(1).exceptUserMode();
4081 .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();
4121 .
writes(1).exceptUserMode();
4183 .allPrivileges().exceptUserMode();
4188 .privSecure(!aarch32EL3)
4189 .nonSecure().exceptUserMode();
4192 .secure().exceptUserMode();
4197 .privSecure(!aarch32EL3)
4198 .nonSecure().exceptUserMode();
4201 .secure().exceptUserMode();
4206 .privSecure(!aarch32EL3)
4207 .nonSecure().exceptUserMode();
4210 .secure().exceptUserMode();
4215 .privSecure(!aarch32EL3)
4216 .nonSecure().exceptUserMode();
4219 .secure().exceptUserMode();
4224 .privSecure(!aarch32EL3)
4225 .nonSecure().exceptUserMode();
4228 .secure().exceptUserMode();
4233 .privSecure(!aarch32EL3)
4234 .nonSecure().exceptUserMode();
4237 .secure().exceptUserMode();
4239 .
hyp().monNonSecure();
4241 .
hyp().monNonSecure();
4245 .hyp().monNonSecure();
4249 .hyp().monNonSecure();
4254 .privSecure(!aarch32EL3)
4255 .nonSecure().exceptUserMode();
4258 .secure().exceptUserMode();
4266 .mon().secure().exceptUserMode();
4270 .
hyp().monNonSecure()
4275 .allPrivileges().exceptUserMode();
4280 .privSecure(!aarch32EL3)
4281 .nonSecure().exceptUserMode();
4284 .secure().exceptUserMode();
4290 .privSecure(!aarch32EL3)
4300 .userNonSecureWrite(0).userSecureRead(1)
4301 .privSecure(!aarch32EL3)
4305 .secure().userSecureWrite(0);
4310 .nonSecure().exceptUserMode()
4311 .privSecure(!aarch32EL3);
4314 .secure().exceptUserMode();
4316 .
hyp().monNonSecure();
4321 .privSecureWrite(aarch32EL3);
4333 .privSecure(!aarch32EL3)
4338 .privSecure(aarch32EL3)
4345 .privSecure(!aarch32EL3);
4349 .privSecure(aarch32EL3);
4355 .privSecure(!aarch32EL3);
4359 .privSecure(aarch32EL3);
4391 .allPrivileges().exceptUserMode();
4394 .allPrivileges().exceptUserMode();
4397 .allPrivileges().exceptUserMode();
4400 .allPrivileges().exceptUserMode();
4403 .allPrivileges().exceptUserMode();
4406 .allPrivileges().exceptUserMode();
4409 .allPrivileges().exceptUserMode();
4412 .allPrivileges().exceptUserMode();
4415 .allPrivileges().exceptUserMode();
4418 .writes(1).exceptUserMode();
4421 .allPrivileges().exceptUserMode();
4424 .allPrivileges().exceptUserMode().writes(0);
4426 .
hyp().monNonSecure();
4428 .
hyp().monNonSecure();
4431 .allPrivileges().exceptUserMode();
4435 .allPrivileges().exceptUserMode();
4810 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4811 | (IESB ? 0 : 0x200000)
4812 | (EnDA ? 0 : 0x8000000)
4813 | (EnIB ? 0 : 0x40000000)
4814 | (EnIA ? 0 : 0x80000000))
4815 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4816 | (nTLSMD ? 0 : 0x8000000)
4817 | (LSMAOE ? 0 : 0x10000000))
4821 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4822 | (IESB ? 0 : 0x200000)
4823 | (EnDA ? 0 : 0x8000000)
4824 | (EnIB ? 0 : 0x40000000)
4825 | (EnIA ? 0 : 0x80000000))
4826 .res1(0x500800 | (SPAN ? 0 : 0x800000)
4827 | (nTLSMD ? 0 : 0x8000000)
4828 | (LSMAOE ? 0 : 0x10000000))
4841 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4842 | (IESB ? 0 : 0x200000)
4843 | (EnDA ? 0 : 0x8000000)
4844 | (EnIB ? 0 : 0x40000000)
4845 | (EnIA ? 0 : 0x80000000))
4868 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4869 | (IESB ? 0 : 0x200000)
4870 | (EnDA ? 0 : 0x8000000)
4871 | (EnIB ? 0 : 0x40000000)
4872 | (EnIA ? 0 : 0x80000000))
4949 .implemented(
release->
has(ArmExtension::FEAT_PAN));
5039 .writes(1).exceptUserMode();
5045 .writes(1).exceptUserMode();
5048 .writes(1).exceptUserMode();
5051 .writes(1).exceptUserMode();
5053 .
writes(1).exceptUserMode();
5055 .
writes(1).exceptUserMode();
5057 .
writes(1).exceptUserMode();
5059 .
writes(1).exceptUserMode();
5062 .writes(1).exceptUserMode();
5065 .writes(1).exceptUserMode();
5068 .writes(1).userSecureWrite(0);
5085 .
hypWrite().monSecureWrite().monNonSecureWrite();
5087 .
hypWrite().monSecureWrite().monNonSecureWrite();
5089 .
hypWrite().monSecureWrite().monNonSecureWrite();
5091 .
hypWrite().monSecureWrite().monNonSecureWrite();
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 .
writes(1).exceptUserMode();
5119 .
writes(1).exceptUserMode();
5121 .
hypWrite().monSecureWrite().monNonSecureWrite();
5123 .
hypWrite().monSecureWrite().monNonSecureWrite();
5129 .
hypWrite().monSecureWrite().monNonSecureWrite();
5133 .
hypWrite().monSecureWrite().monNonSecureWrite();
5135 .
hypWrite().monSecureWrite().monNonSecureWrite();
5137 .
hypWrite().monSecureWrite().monNonSecureWrite();
5143 .
hypWrite().monSecureWrite().monNonSecureWrite();
5147 .
hypWrite().monSecureWrite().monNonSecureWrite();
5248 .
mon().hyp().writes(0);
5279 .privSecureWrite(aarch32EL3)
5291 .res0(0xfffffffffffffff8)
5298 .res0(0xffffffff00000000)
5302 .res0(0xfffffffffffffff8)
5309 .res0(0xffffffff00000000)
5314 .res0(0xfffffffffffffff8)
5323 .res0(0xffffffff00000000)
5328 .res0(0xfffffffffffffff8)
5337 .res0(0xffffffff00000000)
5342 .res0(0xfffffffffffdfc00)
5347 .res0(0xfffffffffffdfc00)
5352 .res0(0xfffffffffffffff8);
5359 .res0(0xffffffff00000000);
5363 .res0(0xfffffffffffc0000)
5368 .res0(0xfffffffffffffff8)
5377 .res0(0xffffffff00000000)
5382 .res0(0xfffffffffffffff8)
5387 .res0(0xfffffffffffffff8)
5392 .res0(0xfffffffffffffff8)
5397 .res0(0xfffffffffffffff8);
5404 .res0(0xffffffff00000000);
5408 .res0(0xfffffffffffffff8)
5413 .res0(0xfffffffffffffff8)
5418 .res0(0xfffffffffffffff8)
5491 .allPrivileges().exceptUserMode();
5500 .allPrivileges().exceptUserMode()
5513 .allPrivileges().exceptUserMode()
5532 .allPrivileges().exceptUserMode()
5536 .allPrivileges().exceptUserMode()
5543 .allPrivileges().exceptUserMode()
5547 .allPrivileges().exceptUserMode()
5554 .allPrivileges().exceptUserMode()
5558 .allPrivileges().exceptUserMode()
5565 .allPrivileges().exceptUserMode()
5569 .allPrivileges().exceptUserMode()
5573 .allPrivileges().exceptUserMode().reads(0)
5592 .allPrivileges().exceptUserMode().reads(0)
5603 .allPrivileges().exceptUserMode()
5608 .secure().exceptUserMode()
5616 .allPrivileges().exceptUserMode()
5621 .secure().exceptUserMode()
5629 .allPrivileges().exceptUserMode()
5634 .secure().exceptUserMode()
5638 .allPrivileges().exceptUserMode()
5646 .allPrivileges().exceptUserMode()
5651 .secure().exceptUserMode()
5700 .
hyp().mon().writes(0)
5703 .
hyp().mon().writes(0)
5706 .
hyp().mon().writes(0)
5709 .
hyp().mon().writes(0)
5716 .allPrivileges().exceptUserMode();
5719 .allPrivileges().exceptUserMode();
5722 .allPrivileges().exceptUserMode();
5725 .allPrivileges().exceptUserMode();
5728 .allPrivileges().exceptUserMode();
5731 .allPrivileges().exceptUserMode();
5734 .allPrivileges().exceptUserMode();
5737 .allPrivileges().exceptUserMode();
5740 .allPrivileges().exceptUserMode();
5743 .allPrivileges().exceptUserMode();
5746 .allPrivileges().exceptUserMode();
5749 .allPrivileges().exceptUserMode();
5752 .allPrivileges().exceptUserMode();
5755 .allPrivileges().exceptUserMode();
5758 .allPrivileges().exceptUserMode();
5761 .allPrivileges().exceptUserMode();
5876 .
hyp().mon().writes(0);
5878 .
hyp().mon().writes(0);
5880 .
hyp().mon().writes(0);
5882 .
hyp().mon().writes(0);