Magellan Linux

Contents of /trunk/mkinitrd-magellan/klibc/usr/klibc/arch/arm/setjmp.S

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1297 - (show annotations) (download)
Fri May 27 15:12:11 2011 UTC (12 years, 11 months ago) by niro
File size: 1355 byte(s)
-updated to klibc-1.5.22 with mntproc definitions patch included
1 #
2 # arch/arm/setjmp.S
3 #
4 # setjmp/longjmp for the ARM architecture
5 #
6
7 #include <klibc/asmmacros.h>
8
9 #ifndef __thumb__
10
11 #
12 # "Pure ARM" version
13 #
14 # The jmp_buf is assumed to contain the following, in order:
15 # r4
16 # r5
17 # r6
18 # r7
19 # r8
20 # r9
21 # r10
22 # fp
23 # sp
24 # lr
25 #
26
27 .text
28 .balign 4
29 .globl setjmp
30 .type setjmp, #function
31 setjmp:
32 stmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr}
33 mov r0, #0
34 BX(lr)
35 .size setjmp,.-setjmp
36
37 .text
38 .balign 4
39 .globl longjmp
40 .type longjmp, #function
41 longjmp:
42 ldmia r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr}
43 mov r0, r1
44 BX(lr)
45 .size longjmp,.-longjmp
46
47 #else /* __thumb__ */
48
49 #
50 # Thumb version
51 #
52 # The jmp_buf is assumed to contain the following, in order:
53 # lr
54 # r4
55 # r5
56 # r6
57 # r7
58 # r8
59 # r9
60 # r10
61 # fp
62 # sp
63 #
64
65 .text
66 .balign 4
67 .globl setjmp
68 .type setjmp, #function
69 .thumb_func
70 setjmp:
71 mov r3, lr
72 stmia r0!, {r3, r4, r5, r6, r7}
73 mov r3, r8
74 mov r4, r9
75 mov r5, r10
76 mov r6, fp
77 mov r7, sp
78 stmia r0!, {r3, r4, r5, r6, r7}
79 mov r0, #0
80 BX(lr)
81 .size setjmp,.-setjmp
82
83 .text
84 .balign 4
85 .globl longjmp
86 .type longjmp, #function
87 .thumb_func
88 longjmp:
89 mov r2, r0
90 add r0, #5*4
91 ldmia r0!, {r3, r4, r5, r6, r7}
92 mov r8, r3
93 mov r9, r4
94 mov r10, r5
95 mov fp, r6
96 mov sp, r7
97 ldmia r2!, {r3, r4, r5, r6, r7}
98 mov r0, r1
99 bne 1f
100 mov r0, #1
101 1: BX(r3)
102 .size longjmp,.-longjmp
103
104 #endif /* __thumb__ */