forked from Imagelibrary/rtems
Simplify TLS support in context switch
There is no need to save the thread pointer in _CPU_Context_switch() since it is a thread invariant. It is initialized once in _CPU_Context_Initialize().
This commit is contained in:
@@ -59,7 +59,11 @@
|
||||
PUBLIC(_CPU_Context_switch)
|
||||
SYM(_CPU_Context_switch):
|
||||
st %g5, [%o0 + G5_OFFSET] ! save the global registers
|
||||
st %g7, [%o0 + G7_OFFSET]
|
||||
|
||||
/*
|
||||
* No need to save the thread pointer %g7 since it is a thread
|
||||
* invariant. It is initialized once in _CPU_Context_Initialize().
|
||||
*/
|
||||
|
||||
std %l0, [%o0 + L0_OFFSET] ! save the local registers
|
||||
std %l2, [%o0 + L2_OFFSET]
|
||||
|
||||
@@ -336,7 +336,6 @@ PROC (_CPU_Context_switch):
|
||||
PPC_GPR_STORE r30, PPC_CONTEXT_OFFSET_GPR30(r3)
|
||||
PPC_GPR_STORE r31, PPC_CONTEXT_OFFSET_GPR31(r3)
|
||||
|
||||
stw r2, PPC_CONTEXT_OFFSET_GPR2(r3)
|
||||
stw r11, PPC_CONTEXT_OFFSET_ISR_DISPATCH_DISABLE(r3)
|
||||
|
||||
#ifdef PPC_MULTILIB_ALTIVEC
|
||||
|
||||
@@ -56,24 +56,15 @@
|
||||
DEFINE_FUNCTION_ARM(_CPU_Context_switch)
|
||||
/* Start saving context */
|
||||
GET_SELF_CPU_CONTROL r2
|
||||
ldr r3, [r2, #PER_CPU_ISR_DISPATCH_DISABLE]
|
||||
stm r0, {r4, r5, r6, r7, r8, r9, r10, r11, r13, r14}
|
||||
|
||||
#ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER
|
||||
mrc p15, 0, r3, c13, c0, 3
|
||||
#endif
|
||||
|
||||
ldr r4, [r2, #PER_CPU_ISR_DISPATCH_DISABLE]
|
||||
|
||||
#ifdef ARM_MULTILIB_VFP
|
||||
add r5, r0, #ARM_CONTEXT_CONTROL_D8_OFFSET
|
||||
vstm r5, {d8-d15}
|
||||
#endif
|
||||
|
||||
#ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER
|
||||
str r3, [r0, #ARM_CONTEXT_CONTROL_THREAD_ID_OFFSET]
|
||||
#endif
|
||||
|
||||
str r4, [r0, #ARM_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE]
|
||||
str r3, [r0, #ARM_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE]
|
||||
|
||||
#ifdef RTEMS_SMP
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user