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:
Patrick Oppenlander
2019-08-06 14:03:56 -04:00
committed by Rich Felker
parent 49eacf29d2
commit e0e8ae754c
+4 -4
View File
@@ -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