summaryrefslogtreecommitdiff
path: root/firmware/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/thread.c')
-rw-r--r--firmware/thread.c12
1 files changed, 1 insertions, 11 deletions
diff --git a/firmware/thread.c b/firmware/thread.c
index df90c7ac2f..e44db5706d 100644
--- a/firmware/thread.c
+++ b/firmware/thread.c
@@ -26,9 +26,6 @@ struct regs
26{ 26{
27 unsigned int r[7]; /* Registers r8 thru r14 */ 27 unsigned int r[7]; /* Registers r8 thru r14 */
28 void *sp; /* Stack pointer (r15) */ 28 void *sp; /* Stack pointer (r15) */
29 unsigned int mach;
30 unsigned int macl;
31 unsigned int sr; /* Status register */
32 void* pr; /* Procedure register */ 29 void* pr; /* Procedure register */
33}; 30};
34 31
@@ -52,11 +49,8 @@ void switch_thread(void) __attribute__ ((section(".icode")));
52 */ 49 */
53static inline void store_context(void* addr) 50static inline void store_context(void* addr)
54{ 51{
55 asm volatile ("add #48, %0\n\t" 52 asm volatile ("add #36, %0\n\t"
56 "sts.l pr, @-%0\n\t" 53 "sts.l pr, @-%0\n\t"
57 "stc.l sr, @-%0\n\t"
58 "sts.l macl,@-%0\n\t"
59 "sts.l mach,@-%0\n\t"
60 "mov.l r15, @-%0\n\t" 54 "mov.l r15, @-%0\n\t"
61 "mov.l r14, @-%0\n\t" 55 "mov.l r14, @-%0\n\t"
62 "mov.l r13, @-%0\n\t" 56 "mov.l r13, @-%0\n\t"
@@ -81,9 +75,6 @@ static inline void load_context(const void* addr)
81 "mov.l @%0+,r13\n\t" 75 "mov.l @%0+,r13\n\t"
82 "mov.l @%0+,r14\n\t" 76 "mov.l @%0+,r14\n\t"
83 "mov.l @%0+,r15\n\t" 77 "mov.l @%0+,r15\n\t"
84 "lds.l @%0+,mach\n\t"
85 "lds.l @%0+,macl\n\t"
86 "ldc.l @%0+,sr\n\t"
87 "mov.l @%0,%0\n\t" 78 "mov.l @%0,%0\n\t"
88 "lds %0,pr\n\t" 79 "lds %0,pr\n\t"
89 "mov.l %0, @(0, r15)" : "+r" (addr)); 80 "mov.l %0, @(0, r15)" : "+r" (addr));
@@ -170,7 +161,6 @@ int create_thread(void* function, void* stack, int stack_size,
170 /* Subtract 4 to leave room for the PR push in load_context() 161 /* Subtract 4 to leave room for the PR push in load_context()
171 Align it on an even 32 bit boundary */ 162 Align it on an even 32 bit boundary */
172 regs->sp = (void*)(((unsigned int)stack + stack_size - 4) & ~3); 163 regs->sp = (void*)(((unsigned int)stack + stack_size - 4) & ~3);
173 regs->sr = 0;
174 regs->pr = function; 164 regs->pr = function;
175 165
176 wake_up_thread(); 166 wake_up_thread();