chiark / gitweb /
volume_id: provide libvolume_id.a file
[elogind.git] / klibc / klibc / arch / ppc64 / setjmp.S
1 #
2 # arch/ppc64/setjmp.S
3 #
4 # Basic setjmp/longjmp implementation
5 #
6
7         .text
8         .align 4
9
10         .section ".opd","aw"
11 setjmp:
12         .quad   .setjmp,.TOC.@tocbase,0
13         .previous
14         .size   setjmp,24
15         .type   .setjmp,@function
16         .globl  setjmp
17         .globl  .setjmp
18 .setjmp:
19         mflr    %r11                    /* save return address */
20         mfcr    %r12                    /* save condition register */
21         std     %r2,0(%r3)              /* save TOC pointer (not needed) */
22         stdu    %r1,8(%r3)              /* save stack pointer */
23         stdu    %r11,8(%r3)
24         stdu    %r12,8(%r3)
25         stdu    %r13,8(%r3)             /* save caller saved regs */
26         stdu    %r14,8(%r3)
27         stdu    %r15,8(%r3)
28         stdu    %r16,8(%r3)
29         stdu    %r17,8(%r3)
30         stdu    %r18,8(%r3)
31         stdu    %r19,8(%r3)
32         stdu    %r20,8(%r3)
33         stdu    %r21,8(%r3)
34         stdu    %r22,8(%r3)
35         stdu    %r23,8(%r3)
36         stdu    %r24,8(%r3)
37         stdu    %r25,8(%r3)
38         stdu    %r26,8(%r3)
39         stdu    %r27,8(%r3)
40         stdu    %r28,8(%r3)
41         stdu    %r29,8(%r3)
42         stdu    %r30,8(%r3)
43         std     %r31,8(%r3)
44         li      %r3,0                   /* indicate success */
45         blr                             /* return */
46
47         .size .setjmp,.-.setjmp
48         .section ".opd","aw"
49 longjmp:
50         .quad   .longjmp,.TOC.@tocbase,0
51         .previous
52         .size   longjmp,24
53         .type   .longjmp,@function
54         .globl  longjmp
55         .globl  .longjmp
56 .longjmp:
57         ld      %r2,0(%r3)              /* restore TOC pointer (not needed) */
58         ldu     %r1,8(%r3)              /* restore stack */
59         ldu     %r11,8(%r3)
60         ldu     %r12,8(%r3)
61         ldu     %r13,8(%r3)             /* restore caller saved regs */
62         ldu     %r14,8(%r3)
63         ldu     %r15,8(%r3)
64         ldu     %r16,8(%r3)
65         ldu     %r17,8(%r3)
66         ldu     %r18,8(%r3)
67         ldu     %r19,8(%r3)
68         ldu     %r20,8(%r3)
69         ldu     %r21,8(%r3)
70         ldu     %r22,8(%r3)
71         ldu     %r23,8(%r3)
72         ldu     %r24,8(%r3)
73         ldu     %r25,8(%r3)
74         ldu     %r26,8(%r3)
75         ldu     %r27,8(%r3)
76         ldu     %r28,8(%r3)
77         ldu     %r29,8(%r3)
78         ldu     %r30,8(%r3)
79         ld      %r31,8(%r3)
80         mtlr    %r11                    /* restore LR */
81         mtcr    %r12                    /* restore CR */
82         mr      %r3,%r4                 /* get return value */
83         blr                             /* return */
84
85         .size .longjmp,.-.longjmp