in arm cancellation point asm, don't unnecessarily preserve link register
The only reason we needed to preserve the link register was because we were using a branch-link instruction to branch to __cp_cancel. Replacing this with a branch means we can avoid the save/restore as the link register is no longer modified.
This commit is contained in:
committed by
Rich Felker
parent
49eacf29d2
commit
e0e8ae754c
@@ -11,19 +11,19 @@
|
|||||||
.type __syscall_cp_asm,%function
|
.type __syscall_cp_asm,%function
|
||||||
__syscall_cp_asm:
|
__syscall_cp_asm:
|
||||||
mov ip,sp
|
mov ip,sp
|
||||||
stmfd sp!,{r4,r5,r6,r7,lr}
|
stmfd sp!,{r4,r5,r6,r7}
|
||||||
__cp_begin:
|
__cp_begin:
|
||||||
ldr r0,[r0]
|
ldr r0,[r0]
|
||||||
cmp r0,#0
|
cmp r0,#0
|
||||||
blne __cp_cancel
|
bne __cp_cancel
|
||||||
mov r7,r1
|
mov r7,r1
|
||||||
mov r0,r2
|
mov r0,r2
|
||||||
mov r1,r3
|
mov r1,r3
|
||||||
ldmfd ip,{r2,r3,r4,r5,r6}
|
ldmfd ip,{r2,r3,r4,r5,r6}
|
||||||
svc 0
|
svc 0
|
||||||
__cp_end:
|
__cp_end:
|
||||||
ldmfd sp!,{r4,r5,r6,r7,lr}
|
ldmfd sp!,{r4,r5,r6,r7}
|
||||||
bx lr
|
bx lr
|
||||||
__cp_cancel:
|
__cp_cancel:
|
||||||
ldmfd sp!,{r4,r5,r6,r7,lr}
|
ldmfd sp!,{r4,r5,r6,r7}
|
||||||
b __cancel
|
b __cancel
|
||||||
|
|||||||
Reference in New Issue
Block a user