aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Cunningham <cc@localhost>2022-02-19 13:20:36 -0700
committerChristian Cunningham <cc@localhost>2022-02-19 13:20:36 -0700
commit5419a7174ef491427797196903c35ce921129f27 (patch)
tree472be2141f330d07a445c05653c95572db48e22e /src
parentfc8b9b0b932a09d7484c1cd7173236f79de14ee1 (diff)
Moved scheduler macros
Diffstat (limited to 'src')
-rw-r--r--src/sys/schedule.S28
1 files changed, 1 insertions, 27 deletions
diff --git a/src/sys/schedule.S b/src/sys/schedule.S
index 3c49494..d10b844 100644
--- a/src/sys/schedule.S
+++ b/src/sys/schedule.S
@@ -1,33 +1,7 @@
.section ".text"
.globl schedule
-.macro preserve_ctx
- cps #0x1f // Sys mode
- // Store Usr regs
- push {r0-r12}
- push {lr}
- ldr r3, =scheduler // struct Scheduler
- ldr r2, [r3, #0] // struct Thread* rthread
- str sp, [r2, #4] // svc_lr -> void* sp
- cps #0x13 // Svc mode
- mrs r1, spsr
- str r1, [r2, #0xc] // preserve cpsr
- str lr, [r2, #0] // svc_lr -> void* pc
-.endm
-.macro restore_ctx
- ldr r3, =scheduler // struct Scheduler
- ldr r2, [r3, #0] // struct Thread* rthread
- ldr lr, [r2, #0] // void* pc -> lr_svc
- ldr r0, [r2, #4] // void* sp -> r0
- ldr r1, [r2, #0xc] // restore cpsr
- msr spsr_f, r1
- cps #0x1f // Sys mode
- mov sp, r0 // Set stack pointer
- // Restore Usr regs
- pop {lr}
- pop {r0-r12}
- cps #0x13 // Svc mode
-.endm
+.include "macros.inc"
// Assumption: Enter in SVC mode
schedule: