summaryrefslogtreecommitdiff
path: root/firmware/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/thread.c')
-rw-r--r--firmware/thread.c11
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