summaryrefslogtreecommitdiff
path: root/thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thread.cpp')
-rw-r--r--thread.cpp31
1 files changed, 0 insertions, 31 deletions
diff --git a/thread.cpp b/thread.cpp
deleted file mode 100644
index a08bd61..0000000
--- a/thread.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "thread.h"
-#include "interrupt.h"
-
-Thread Thread::main_thread __attribute__ ((init_priority (1000)));
-Thread* Thread::active_thread = &Thread::main_thread;
-
-inline void __attribute__((naked)) switch_context() {
- asm volatile ("cpsid i");
-
- // Save unsaved registers.
- asm volatile ("push {r4, r5, r6, r7, r8, r9, r10, r11, lr}" ::: "memory");
-
- // Store stack pointer for old thread.
- asm volatile ("str sp, [%0]" :: "r" (&Thread::active_thread->sp));
-
- // Update running thread.
- Thread::active_thread = Thread::active_thread->next;
-
- // Fetch stack pointer for new thread.
- asm volatile ("ldr sp, [%0]" :: "r" (&Thread::active_thread->sp));
-
- asm volatile ("cpsie i");
-
- // Load registers and return.
- asm volatile ("pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}" ::: "memory");
-}
-
-template<>
-void interrupt<Interrupt::SVCall>() {
- switch_context();
-}