| # |
| # arch/ppc64/setjmp.S |
| # |
| # Basic setjmp/longjmp implementation |
| # This file was derived from the equivalent file in NetBSD |
| # |
| |
| .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 */ |
| 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 */ |
| |
| .size .setjmp,.-.setjmp |
| .section ".opd","aw" |
| longjmp: |
| .quad .longjmp,.TOC.@tocbase,0 |
| .previous |
| .size longjmp,24 |
| .type .longjmp,@function |
| .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 */ |
| |
| .size .longjmp,.-.longjmp |