# # arch/ppc64/setjmp.S # # Basic setjmp/longjmp implementation # .text .align 4 .section ".opd","aw" setjmp: .quad .setjmp,.TOC.@tocbase,0 .previous .size setjmp,24 .type .setjmp,@function .globl setjmp .globl .setjmp .setjmp: 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" longjmp: .quad .longjmp,.TOC.@tocbase,0 .previous .size longjmp,24 .type .longjmp,@function .globl longjmp .globl .longjmp .longjmp: 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