chiark / gitweb /
[PATCH] update klibc to version 0.181
[elogind.git] / klibc / klibc / arch / ppc64 / setjmp.S
index 1dcc67035e11b611451d266d72cb8113c5ac0cb6..30db419140ed56bc23bce8251c19b283d4972625 100644 (file)
@@ -2,7 +2,6 @@
 # arch/ppc64/setjmp.S
 #
 # Basic setjmp/longjmp implementation
-# This file was derived from the equivalent file in NetBSD
 #
 
        .text
@@ -17,13 +16,33 @@ setjmp:
        .globl  setjmp
        .globl  .setjmp
 .setjmp:
-        mflr    %r11                    /* save return address */
-        mfcr    %r12                    /* save condition register */
-        mr      %r10,%r1                /* save stack pointer */
-        mr      %r9,%r2                 /* save GPR2 (not needed) */
-        stmw    %r9,0(%r3)              /* save r9..r31 */
-        li      %r3,0                   /* indicate success */
-        blr                             /* return */
+       mflr    %r11                    /* save return address */
+       mfcr    %r12                    /* save condition register */
+       std     %r2,0(%r3)              /* save TOC pointer (not needed) */
+       stdu    %r1,8(%r3)              /* save stack pointer */
+       stdu    %r11,8(%r3)
+       stdu    %r12,8(%r3)
+       stdu    %r13,8(%r3)             /* save caller saved regs */
+       stdu    %r14,8(%r3)
+       stdu    %r15,8(%r3)
+       stdu    %r16,8(%r3)
+       stdu    %r17,8(%r3)
+       stdu    %r18,8(%r3)
+       stdu    %r19,8(%r3)
+       stdu    %r20,8(%r3)
+       stdu    %r21,8(%r3)
+       stdu    %r22,8(%r3)
+       stdu    %r23,8(%r3)
+       stdu    %r24,8(%r3)
+       stdu    %r25,8(%r3)
+       stdu    %r26,8(%r3)
+       stdu    %r27,8(%r3)
+       stdu    %r28,8(%r3)
+       stdu    %r29,8(%r3)
+       stdu    %r30,8(%r3)
+       std     %r31,8(%r3)
+       li      %r3,0                   /* indicate success */
+       blr                             /* return */
 
        .size .setjmp,.-.setjmp
        .section ".opd","aw"
@@ -35,12 +54,32 @@ longjmp:
        .globl  longjmp
        .globl  .longjmp
 .longjmp:
-        lmw     %r9,0(%r3)              /* save r9..r31 */
-        mtlr    %r11                    /* restore LR */
-        mtcr    %r12                    /* restore CR */
-        mr      %r2,%r9                 /* restore GPR2 (not needed) */
-        mr      %r1,%r10                /* restore stack */
-        mr      %r3,%r4                 /* get return value */
-        blr                             /* return */
+       ld      %r2,0(%r3)              /* restore TOC pointer (not needed) */
+       ldu     %r1,8(%r3)              /* restore stack */
+       ldu     %r11,8(%r3)
+       ldu     %r12,8(%r3)
+       ldu     %r13,8(%r3)             /* restore caller saved regs */
+       ldu     %r14,8(%r3)
+       ldu     %r15,8(%r3)
+       ldu     %r16,8(%r3)
+       ldu     %r17,8(%r3)
+       ldu     %r18,8(%r3)
+       ldu     %r19,8(%r3)
+       ldu     %r20,8(%r3)
+       ldu     %r21,8(%r3)
+       ldu     %r22,8(%r3)
+       ldu     %r23,8(%r3)
+       ldu     %r24,8(%r3)
+       ldu     %r25,8(%r3)
+       ldu     %r26,8(%r3)
+       ldu     %r27,8(%r3)
+       ldu     %r28,8(%r3)
+       ldu     %r29,8(%r3)
+       ldu     %r30,8(%r3)
+       ld      %r31,8(%r3)
+       mtlr    %r11                    /* restore LR */
+       mtcr    %r12                    /* restore CR */
+       mr      %r3,%r4                 /* get return value */
+       blr                             /* return */
 
        .size .longjmp,.-.longjmp