chiark / gitweb /
[PATCH] added klibc version 0.82 (cvs tree) to the udev tree.
[elogind.git] / klibc / klibc / arch / arm / setjmp-thumb.S
1 #
2 # arch/arm/setjmp-thumb.S
3 #
4 # setjmp/longjmp for the ARM/thumb architecture
5 #
6
7 #
8 # The jmp_buf is assumed to contain the following, in order:
9 #               lr
10 #               r4
11 #               r5
12 #               r6
13 #               r7
14 #               r8
15 #               r9
16 #               r10
17 #               fp
18 #               sp
19 #
20
21         .text
22         .align 4
23         .globl setjmp
24         .type setjmp, #function
25         .thumb_func
26 setjmp:
27         mov     r3, lr
28         stmia   r0!, {r3, r4, r5, r6, r7}
29         mov     r3, r8
30         mov     r4, r9
31         mov     r5, r10
32         mov     r6, fp
33         mov     r7, sp
34         stmia   r0!, {r3, r4, r5, r6, r7}
35         mov     r0, #0
36         mov     pc, lr
37         .size setjmp,.-setjmp
38
39         .text
40         .align 4
41         .globl longjmp
42         .type longjmp, #function
43         .thumb_func
44 longjmp:
45         mov     r2, r0
46         add     r0, #5*4
47         ldmia   r0!, {r3, r4, r5, r6, r7}
48         mov     r8, r3
49         mov     r9, r4
50         mov     r10, r5
51         mov     fp, r6
52         mov     sp, r7
53         ldmia   r2!, {r3, r4, r5, r6, r7}
54         mov     r0, r1
55         bne     1f
56         mov     r0, #1
57 1:      mov     pc, r3
58         .size longjmp,.-longjmp