switch/case for get_trap_action

This commit is contained in:
folkert van heusden 2024-05-10 17:08:27 +02:00
parent a3f651b986
commit e883822ccc
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1

46
mmu.cpp
View file

@ -270,27 +270,35 @@ std::pair<trap_action_t, int> mmu::get_trap_action(const int run_mode, const boo
trap_action_t trap_action = T_PROCEED; trap_action_t trap_action = T_PROCEED;
if (access_control == 0) switch(access_control) {
trap_action = T_ABORT_4; case 0:
else if (access_control == 1)
trap_action = is_write ? T_ABORT_4 : T_TRAP_250;
else if (access_control == 2) {
if (is_write)
trap_action = T_ABORT_4; trap_action = T_ABORT_4;
} break;
else if (access_control == 3) case 1:
trap_action = T_ABORT_4; trap_action = is_write ? T_ABORT_4 : T_TRAP_250;
else if (access_control == 4) break;
trap_action = T_TRAP_250;
else if (access_control == 5) { case 2:
if (is_write) if (is_write)
trap_action = T_ABORT_4;
break;
case 3:
trap_action = T_ABORT_4;
break;
case 4:
trap_action = T_TRAP_250; trap_action = T_TRAP_250;
} break;
else if (access_control == 6) { case 5:
// proceed if (is_write)
} trap_action = T_TRAP_250;
else if (access_control == 7) { break;
trap_action = T_ABORT_4; case 6:
// proceed
break;
case 7:
trap_action = T_ABORT_4;
break;
} }
return { trap_action, access_control }; return { trap_action, access_control };