diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/thread.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index 4a13d5394e..dc7d42566a 100644 --- a/firmware/thread.c +++ b/firmware/thread.c | |||
@@ -23,6 +23,8 @@ typedef union | |||
23 | struct regs_t | 23 | struct regs_t |
24 | { | 24 | { |
25 | unsigned int r[7]; /* Registers r8 thru r14 */ | 25 | unsigned int r[7]; /* Registers r8 thru r14 */ |
26 | unsigned int mach, | ||
27 | macl; | ||
26 | void *sp; /* Stack pointer (r15) */ | 28 | void *sp; /* Stack pointer (r15) */ |
27 | unsigned int sr; /* Status register */ | 29 | unsigned int sr; /* Status register */ |
28 | #if 0 | 30 | #if 0 |
@@ -111,6 +113,8 @@ static inline void stctx(void* addr) | |||
111 | /* here a far better code */ | 113 | /* here a far better code */ |
112 | asm volatile ("sts.l pr, @-%0\n\t" | 114 | asm volatile ("sts.l pr, @-%0\n\t" |
113 | "stc.l sr, @-%0\n\t" | 115 | "stc.l sr, @-%0\n\t" |
116 | "sts.l macl,@-%0\n\t" | ||
117 | "sts.l mach,@-%0\n\t" | ||
114 | "mov.l r15, @-%0\n\t" | 118 | "mov.l r15, @-%0\n\t" |
115 | "mov.l r14, @-%0\n\t" | 119 | "mov.l r14, @-%0\n\t" |
116 | "mov.l r13, @-%0\n\t" | 120 | "mov.l r13, @-%0\n\t" |
@@ -159,6 +163,8 @@ static inline void ldctx(void* addr) | |||
159 | "mov.l @%0+,r13\n\t" | 163 | "mov.l @%0+,r13\n\t" |
160 | "mov.l @%0+,r14\n\t" | 164 | "mov.l @%0+,r14\n\t" |
161 | "mov.l @%0+,r15\n\t" | 165 | "mov.l @%0+,r15\n\t" |
166 | "lds.l @%0+,mach\n\t" | ||
167 | "lds.l @%0+,macl\n\t" | ||
162 | "ldc.l @%0+,sr\n\t" | 168 | "ldc.l @%0+,sr\n\t" |
163 | "lds.l @%0+,pr" : : "r" (addr)); | 169 | "lds.l @%0+,pr" : : "r" (addr)); |
164 | 170 | ||