summaryrefslogtreecommitdiff
path: root/libcpu/arm/arm926/stack.c
diff options
context:
space:
mode:
authorardafu <[email protected]>2015-04-16 14:13:43 +0800
committerardafu <[email protected]>2015-04-16 14:13:43 +0800
commit175e357acecdbe86200fdc8a0866716d822ca516 (patch)
tree27492c4bd0b6ab52d8c51be3de4a5cf84bd3c63d /libcpu/arm/arm926/stack.c
parentf4555bf71189ee76c41a4ad2398ad54da4b1d7bf (diff)
[libcpu][arm926] Remove unused SPSR register PUSH/POP when os switch thread.
Diffstat (limited to 'libcpu/arm/arm926/stack.c')
-rw-r--r--libcpu/arm/arm926/stack.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libcpu/arm/arm926/stack.c b/libcpu/arm/arm926/stack.c
index ba3a11d208..53508e5acf 100644
--- a/libcpu/arm/arm926/stack.c
+++ b/libcpu/arm/arm926/stack.c
@@ -66,8 +66,11 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
*(--stk) = 0; /* r2 */
*(--stk) = 0; /* r1 */
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
- *(--stk) = SVCMODE; /* cpsr */
- *(--stk) = SVCMODE; /* spsr */
+ /* cpsr */
+ if ((rt_uint32_t)tentry & 0x01)
+ *(--stk) = SVCMODE | 0x20; /* thumb mode */
+ else
+ *(--stk) = SVCMODE; /* arm mode */
/* return task's current stack address */
return (rt_uint8_t *)stk;