4 |
# setjmp/longjmp for the ARM architecture |
# setjmp/longjmp for the ARM architecture |
5 |
# |
# |
6 |
|
|
7 |
|
#include <klibc/asmmacros.h> |
8 |
|
|
9 |
#ifndef __thumb__ |
#ifndef __thumb__ |
10 |
|
|
11 |
# |
# |
31 |
setjmp: |
setjmp: |
32 |
stmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr} |
stmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr} |
33 |
mov r0, #0 |
mov r0, #0 |
34 |
mov pc, lr |
BX(lr) |
35 |
.size setjmp,.-setjmp |
.size setjmp,.-setjmp |
36 |
|
|
37 |
.text |
.text |
41 |
longjmp: |
longjmp: |
42 |
ldmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr} |
ldmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr} |
43 |
mov r0, r1 |
mov r0, r1 |
44 |
mov pc, lr |
BX(lr) |
45 |
.size longjmp,.-longjmp |
.size longjmp,.-longjmp |
46 |
|
|
47 |
#else /* __thumb__ */ |
#else /* __thumb__ */ |
77 |
mov r7, sp |
mov r7, sp |
78 |
stmia r0!, {r3, r4, r5, r6, r7} |
stmia r0!, {r3, r4, r5, r6, r7} |
79 |
mov r0, #0 |
mov r0, #0 |
80 |
mov pc, lr |
BX(lr) |
81 |
.size setjmp,.-setjmp |
.size setjmp,.-setjmp |
82 |
|
|
83 |
.text |
.text |
98 |
mov r0, r1 |
mov r0, r1 |
99 |
bne 1f |
bne 1f |
100 |
mov r0, #1 |
mov r0, #1 |
101 |
1: mov pc, r3 |
1: BX(r3) |
102 |
.size longjmp,.-longjmp |
.size longjmp,.-longjmp |
103 |
|
|
104 |
#endif /* __thumb__ */ |
#endif /* __thumb__ */ |