chiark / gitweb /
[PATCH] sync klibc with release 0.95
[elogind.git] / klibc / klibc / arch / ppc64 / setjmp.S
1 #
2 # arch/ppc64/setjmp.S
3 #
4 # Basic setjmp/longjmp implementation
5 # This file was derived from the equivalent file in NetBSD
6 #
7
8         .text
9         .align 4
10
11         .section ".opd","aw"
12 setjmp:
13         .quad   .setjmp,.TOC.@tocbase,0
14         .previous
15         .size   setjmp,24
16         .type   .setjmp,@function
17         .globl  setjmp
18         .globl  .setjmp
19 .setjmp:
20         mflr    %r11                    /* save return address */
21         mfcr    %r12                    /* save condition register */
22         mr      %r10,%r1                /* save stack pointer */
23         mr      %r9,%r2                 /* save GPR2 (not needed) */
24         stmw    %r9,0(%r3)              /* save r9..r31 */
25         li      %r3,0                   /* indicate success */
26         blr                             /* return */
27
28         .size .setjmp,.-.setjmp
29         .section ".opd","aw"
30 longjmp:
31         .quad   .longjmp,.TOC.@tocbase,0
32         .previous
33         .size   longjmp,24
34         .type   .longjmp,@function
35         .globl  longjmp
36         .globl  .longjmp
37 .longjmp:
38         lmw     %r9,0(%r3)              /* save r9..r31 */
39         mtlr    %r11                    /* restore LR */
40         mtcr    %r12                    /* restore CR */
41         mr      %r2,%r9                 /* restore GPR2 (not needed) */
42         mr      %r1,%r10                /* restore stack */
43         mr      %r3,%r4                 /* get return value */
44         blr                             /* return */
45
46         .size .longjmp,.-.longjmp