[PATCH] ARM: Remove single-use user save/restore macros
Assembly macros are pointless if they're only used once. Move them inline. Signed-off-by: Russell King <rmk@arm.linux.org.uk>
This commit is contained in:
@@ -27,7 +27,15 @@ ret_fast_syscall:
|
|||||||
ldr r1, [tsk, #TI_FLAGS]
|
ldr r1, [tsk, #TI_FLAGS]
|
||||||
tst r1, #_TIF_WORK_MASK
|
tst r1, #_TIF_WORK_MASK
|
||||||
bne fast_work_pending
|
bne fast_work_pending
|
||||||
fast_restore_user_regs
|
|
||||||
|
@ fast_restore_user_regs
|
||||||
|
ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr
|
||||||
|
ldr lr, [sp, #S_OFF + S_PC]! @ get pc
|
||||||
|
msr spsr_cxsf, r1 @ save in spsr_svc
|
||||||
|
ldmdb sp, {r1 - lr}^ @ get calling r1 - lr
|
||||||
|
mov r0, r0
|
||||||
|
add sp, sp, #S_FRAME_SIZE - S_PC
|
||||||
|
movs pc, lr @ return & move spsr_svc into cpsr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ok, we need to do extra processing, enter the slow path.
|
* Ok, we need to do extra processing, enter the slow path.
|
||||||
@@ -57,7 +65,14 @@ ret_slow_syscall:
|
|||||||
tst r1, #_TIF_WORK_MASK
|
tst r1, #_TIF_WORK_MASK
|
||||||
bne work_pending
|
bne work_pending
|
||||||
no_work_pending:
|
no_work_pending:
|
||||||
slow_restore_user_regs
|
@ slow_restore_user_regs
|
||||||
|
ldr r1, [sp, #S_PSR] @ get calling cpsr
|
||||||
|
ldr lr, [sp, #S_PC]! @ get pc
|
||||||
|
msr spsr_cxsf, r1 @ save in spsr_svc
|
||||||
|
ldmdb sp, {r0 - lr}^ @ get calling r1 - lr
|
||||||
|
mov r0, r0
|
||||||
|
add sp, sp, #S_FRAME_SIZE - S_PC
|
||||||
|
movs pc, lr @ return & move spsr_svc into cpsr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is how we return from a fork.
|
* This is how we return from a fork.
|
||||||
@@ -109,7 +124,14 @@ ENTRY(ret_from_fork)
|
|||||||
|
|
||||||
.align 5
|
.align 5
|
||||||
ENTRY(vector_swi)
|
ENTRY(vector_swi)
|
||||||
save_user_regs
|
sub sp, sp, #S_FRAME_SIZE
|
||||||
|
stmia sp, {r0 - r12} @ Calling r0 - r12
|
||||||
|
add r8, sp, #S_PC
|
||||||
|
stmdb r8, {sp, lr}^ @ Calling sp, lr
|
||||||
|
mrs r8, spsr @ called from non-FIQ mode, so ok.
|
||||||
|
str lr, [sp, #S_PC] @ Save calling PC
|
||||||
|
str r8, [sp, #S_PSR] @ Save CPSR
|
||||||
|
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
|
||||||
zero_fp
|
zero_fp
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -57,57 +57,6 @@
|
|||||||
.endm
|
.endm
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.macro save_user_regs
|
|
||||||
sub sp, sp, #S_FRAME_SIZE
|
|
||||||
stmia sp, {r0 - r12} @ Calling r0 - r12
|
|
||||||
add r8, sp, #S_PC
|
|
||||||
stmdb r8, {sp, lr}^ @ Calling sp, lr
|
|
||||||
mrs r8, spsr @ called from non-FIQ mode, so ok.
|
|
||||||
str lr, [sp, #S_PC] @ Save calling PC
|
|
||||||
str r8, [sp, #S_PSR] @ Save CPSR
|
|
||||||
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro restore_user_regs
|
|
||||||
ldr r1, [sp, #S_PSR] @ Get calling cpsr
|
|
||||||
disable_irq ip @ disable IRQs
|
|
||||||
ldr lr, [sp, #S_PC]! @ Get PC
|
|
||||||
msr spsr_cxsf, r1 @ save in spsr_svc
|
|
||||||
ldmdb sp, {r0 - lr}^ @ Get calling r0 - lr
|
|
||||||
mov r0, r0
|
|
||||||
add sp, sp, #S_FRAME_SIZE - S_PC
|
|
||||||
movs pc, lr @ return & move spsr_svc into cpsr
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Must be called with IRQs already disabled.
|
|
||||||
*/
|
|
||||||
.macro fast_restore_user_regs
|
|
||||||
ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr
|
|
||||||
ldr lr, [sp, #S_OFF + S_PC]! @ get pc
|
|
||||||
msr spsr_cxsf, r1 @ save in spsr_svc
|
|
||||||
ldmdb sp, {r1 - lr}^ @ get calling r1 - lr
|
|
||||||
mov r0, r0
|
|
||||||
add sp, sp, #S_FRAME_SIZE - S_PC
|
|
||||||
movs pc, lr @ return & move spsr_svc into cpsr
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Must be called with IRQs already disabled.
|
|
||||||
*/
|
|
||||||
.macro slow_restore_user_regs
|
|
||||||
ldr r1, [sp, #S_PSR] @ get calling cpsr
|
|
||||||
ldr lr, [sp, #S_PC]! @ get pc
|
|
||||||
msr spsr_cxsf, r1 @ save in spsr_svc
|
|
||||||
ldmdb sp, {r0 - lr}^ @ get calling r1 - lr
|
|
||||||
mov r0, r0
|
|
||||||
add sp, sp, #S_FRAME_SIZE - S_PC
|
|
||||||
movs pc, lr @ return & move spsr_svc into cpsr
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro mask_pc, rd, rm
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro get_thread_info, rd
|
.macro get_thread_info, rd
|
||||||
mov \rd, sp, lsr #13
|
mov \rd, sp, lsr #13
|
||||||
mov \rd, \rd, lsl #13
|
mov \rd, \rd, lsl #13
|
||||||
|
Reference in New Issue
Block a user