a41a0e28c2
Not hooked up to the build yet.
59 lines
778 B
ArmAsm
59 lines
778 B
ArmAsm
#
|
|
# arch/arm/setjmp-thumb.S
|
|
#
|
|
# setjmp/longjmp for the ARM/thumb architecture
|
|
#
|
|
|
|
#
|
|
# The jmp_buf is assumed to contain the following, in order:
|
|
# lr
|
|
# r4
|
|
# r5
|
|
# r6
|
|
# r7
|
|
# r8
|
|
# r9
|
|
# r10
|
|
# fp
|
|
# sp
|
|
#
|
|
|
|
.text
|
|
.align 4
|
|
.globl setjmp
|
|
.type setjmp, #function
|
|
.thumb_func
|
|
setjmp:
|
|
mov r3, lr
|
|
stmia r0!, {r3, r4, r5, r6, r7}
|
|
mov r3, r8
|
|
mov r4, r9
|
|
mov r5, r10
|
|
mov r6, fp
|
|
mov r7, sp
|
|
stmia r0!, {r3, r4, r5, r6, r7}
|
|
mov r0, #0
|
|
mov pc, lr
|
|
.size setjmp,.-setjmp
|
|
|
|
.text
|
|
.align 4
|
|
.globl longjmp
|
|
.type longjmp, #function
|
|
.thumb_func
|
|
longjmp:
|
|
mov r2, r0
|
|
add r0, #5*4
|
|
ldmia r0!, {r3, r4, r5, r6, r7}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
mov fp, r6
|
|
mov sp, r7
|
|
ldmia r2!, {r3, r4, r5, r6, r7}
|
|
mov r0, r1
|
|
bne 1f
|
|
mov r0, #1
|
|
1: mov pc, r3
|
|
.size longjmp,.-longjmp
|