chiark / gitweb /
volume_id: provide libvolume_id.a file
[elogind.git] / klibc / klibc / arch / ppc / setjmp.S
1 #
2 # arch/ppc/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         .type setjmp,@function
11         .globl setjmp
12 setjmp:
13         mflr    %r11                    /* save return address */
14         mfcr    %r12                    /* save condition register */
15         mr      %r10,%r1                /* save stack pointer */
16         mr      %r9,%r2                 /* save GPR2 (not needed) */
17         stmw    %r9,0(%r3)              /* save r9..r31 */
18         li      %r3,0                   /* indicate success */
19         blr                             /* return */
20
21         .size setjmp,.-setjmp
22
23         .type longjmp,@function
24         .globl longjmp
25 longjmp:
26         lmw     %r9,0(%r3)              /* save r9..r31 */
27         mtlr    %r11                    /* restore LR */
28         mtcr    %r12                    /* restore CR */
29         mr      %r2,%r9                 /* restore GPR2 (not needed) */
30         mr      %r1,%r10                /* restore stack */
31         mr      %r3,%r4                 /* get return value */
32         blr                             /* return */
33
34         .size longjmp,.-longjmp
35