From c25d0e8843920d3428a44fb0d6224860d95e3d91 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 15 Mar 2024 18:39:56 -0400 Subject: [PATCH] Correctly capture mode upon exception. --- InstructionSets/ARM/Registers.hpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/InstructionSets/ARM/Registers.hpp b/InstructionSets/ARM/Registers.hpp index 61f9b420b..85ed909dd 100644 --- a/InstructionSets/ARM/Registers.hpp +++ b/InstructionSets/ARM/Registers.hpp @@ -153,18 +153,21 @@ struct Registers { } switch(type) { - case Exception::IRQ: + case Exception::IRQ: { + const auto r14 = pc_status(8); set_mode(Mode::IRQ); - active_[14] = pc_status(8); - break; - case Exception::FIQ: + active_[14] = r14; + } break; + case Exception::FIQ: { + const auto r14 = pc_status(8); set_mode(Mode::FIQ); - active_[14] = pc_status(8); - break; - default: + active_[14] = r14; + } break; + default: { + const auto r14 = pc_status(4); set_mode(Mode::Supervisor); - active_[14] = pc_status(4); - break; + active_[14] = r14; + } break; } set_pc(uint32_t(type));