diff options
Diffstat (limited to 'cpsr.h')
-rw-r--r-- | cpsr.h | 39 |
1 files changed, 0 insertions, 39 deletions
@@ -1,39 +0,0 @@ -#include <stdint.h> - -enum execution_mode { - MODE_USER = 0x10, - MODE_FIQ = 0x11, - MODE_IRQ = 0x12, - MODE_SUPERVISOR = 0x13, - MODE_MONITOR = 0x16, - MODE_ABORT = 0x17, - MODE_HYPERVISOR = 0x1a, - MODE_UNDEFINED = 0x1b, - MODE_SYSTEM = 0x1f, -}; - -inline static uint32_t read_CPSR(void) -{ - uint32_t CPSR; - // get content of current program status register - asm("mrs %0, cpsr" : "=r" (CPSR) ::); - - return CPSR; -} - -inline static enum execution_mode read_processor_mode(void) -{ - /* lowest 5 bits indicate processor mode */ - return read_CPSR() & 0x1f; -} - -inline static void set_system_mode(void) -{ - uint32_t CPSR = read_CPSR(); - - CPSR = (CPSR >> 5) << 5; - - CPSR |= MODE_SYSTEM; - - asm("msr cpsr, %0" :: "r" (CPSR) : "memory"); -} |