From 07667955f66e4d00b0f5421f2d08186109211080 Mon Sep 17 00:00:00 2001 From: Adam Higerd Date: Mon, 10 Aug 2020 10:20:58 -0500 Subject: [PATCH] ARM: Expose ARMSelectBank API --- include/mgba/internal/arm/isa-inlines.h | 22 +++++++++++++++++++ src/arm/arm.c | 28 ++----------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/include/mgba/internal/arm/isa-inlines.h b/include/mgba/internal/arm/isa-inlines.h index 22dde1c9c..93659b6d7 100644 --- a/include/mgba/internal/arm/isa-inlines.h +++ b/include/mgba/internal/arm/isa-inlines.h @@ -142,4 +142,26 @@ static inline bool ARMTestCondition(struct ARMCore* cpu, unsigned condition) { } } +static inline enum RegisterBank ARMSelectBank(enum PrivilegeMode mode) { + switch (mode) { + case MODE_USER: + case MODE_SYSTEM: + // No banked registers + return BANK_NONE; + case MODE_FIQ: + return BANK_FIQ; + case MODE_IRQ: + return BANK_IRQ; + case MODE_SUPERVISOR: + return BANK_SUPERVISOR; + case MODE_ABORT: + return BANK_ABORT; + case MODE_UNDEFINED: + return BANK_UNDEFINED; + default: + // This should be unreached + return BANK_NONE; + } +} + #endif diff --git a/src/arm/arm.c b/src/arm/arm.c index 747a1aac7..b113e1c89 100644 --- a/src/arm/arm.c +++ b/src/arm/arm.c @@ -9,16 +9,14 @@ #include #include -static inline enum RegisterBank _ARMSelectBank(enum PrivilegeMode); - void ARMSetPrivilegeMode(struct ARMCore* cpu, enum PrivilegeMode mode) { if (mode == cpu->privilegeMode) { // Not switching modes after all return; } - enum RegisterBank newBank = _ARMSelectBank(mode); - enum RegisterBank oldBank = _ARMSelectBank(cpu->privilegeMode); + enum RegisterBank newBank = ARMSelectBank(mode); + enum RegisterBank oldBank = ARMSelectBank(cpu->privilegeMode); if (newBank != oldBank) { // Switch banked registers if (mode == MODE_FIQ || cpu->privilegeMode == MODE_FIQ) { @@ -46,28 +44,6 @@ void ARMSetPrivilegeMode(struct ARMCore* cpu, enum PrivilegeMode mode) { cpu->privilegeMode = mode; } -static inline enum RegisterBank _ARMSelectBank(enum PrivilegeMode mode) { - switch (mode) { - case MODE_USER: - case MODE_SYSTEM: - // No banked registers - return BANK_NONE; - case MODE_FIQ: - return BANK_FIQ; - case MODE_IRQ: - return BANK_IRQ; - case MODE_SUPERVISOR: - return BANK_SUPERVISOR; - case MODE_ABORT: - return BANK_ABORT; - case MODE_UNDEFINED: - return BANK_UNDEFINED; - default: - // This should be unreached - return BANK_NONE; - } -} - void ARMInit(struct ARMCore* cpu) { cpu->master->init(cpu, cpu->master); size_t i;