diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/thread.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index 655af1a940..91fe81be4a 100644 --- a/firmware/thread.c +++ b/firmware/thread.c | |||
@@ -1149,8 +1149,19 @@ void switch_thread(void) | |||
1149 | } | 1149 | } |
1150 | 1150 | ||
1151 | #ifdef RB_PROFILE | 1151 | #ifdef RB_PROFILE |
1152 | #ifdef CPU_COLDFIRE | ||
1153 | /* Call this from asm to make sure the sp is pointing to the | ||
1154 | correct place before the context is saved */ | ||
1155 | uint16_t id = thread->id & THREAD_ID_SLOT_MASK; | ||
1156 | asm volatile ("move.l %[id], -(%%sp)\n\t" | ||
1157 | "jsr profile_thread_stopped\n\t" | ||
1158 | "addq.l #4, %%sp\n\t" | ||
1159 | :: [id] "r" (id) | ||
1160 | : "cc", "memory"); | ||
1161 | #else | ||
1152 | profile_thread_stopped(thread->id & THREAD_ID_SLOT_MASK); | 1162 | profile_thread_stopped(thread->id & THREAD_ID_SLOT_MASK); |
1153 | #endif | 1163 | #endif |
1164 | #endif | ||
1154 | 1165 | ||
1155 | /* Begin task switching by saving our current context so that we can | 1166 | /* Begin task switching by saving our current context so that we can |
1156 | * restore the state of the current thread later to the point prior | 1167 | * restore the state of the current thread later to the point prior |