diff options
-rw-r--r-- | jmp.S | 60 | ||||
-rw-r--r-- | signal.h | 28 |
2 files changed, 88 insertions, 0 deletions
@@ -175,6 +175,66 @@ DEFUN(jmp_restore) mov r0, r1 bx r3 +#elif __PPC64__ + +DEFUN(jmp_save) + mflr %r11 + mfcr %r12 + std %r1, 0(%r3) + std %r2, 8(%r3) + std %r11, 16(%r3) + std %r12, 24(%r3) + std %r13, 32(%r3) + std %r14, 40(%r3) + std %r15, 48(%r3) + std %r16, 56(%r3) + std %r17, 64(%r3) + std %r18, 72(%r3) + std %r19, 80(%r3) + std %r20, 88(%r3) + std %r21, 96(%r3) + std %r22, 104(%r3) + std %r23, 112(%r3) + std %r24, 120(%r3) + std %r25, 128(%r3) + std %r26, 136(%r3) + std %r27, 144(%r3) + std %r28, 152(%r3) + std %r29, 160(%r3) + std %r30, 168(%r3) + std %r31, 176(%r3) + li %r3, 0 + blr + +DEFUN(jmp_restore) + ld %r31, 176(%r3) + ld %r30, 168(%r3) + ld %r29, 160(%r3) + ld %r28, 152(%r3) + ld %r27, 144(%r3) + ld %r26, 136(%r3) + ld %r25, 128(%r3) + ld %r24, 120(%r3) + ld %r23, 112(%r3) + ld %r22, 104(%r3) + ld %r21, 96(%r3) + ld %r20, 88(%r3) + ld %r17, 64(%r3) + ld %r19, 80(%r3) + ld %r18, 72(%r3) + ld %r16, 56(%r3) + ld %r15, 48(%r3) + ld %r14, 40(%r3) + ld %r13, 32(%r3) + ld %r12, 24(%r3) + ld %r11, 16(%r3) + ld %r2, 8(%r3) + ld %r1, 0(%r3) + mtcr %r12 + mtlr %r11 + mr %r3, %r4 + blr + #else #error port me! #endif @@ -94,6 +94,34 @@ struct jmp { unsigned long sp; }; +#elif __PPC64__ + +struct jmp { + unsigned long r1; + unsigned long r2; + unsigned long r11; + unsigned long r12; + unsigned long r13; + unsigned long r14; + unsigned long r15; + unsigned long r16; + unsigned long r17; + unsigned long r18; + unsigned long r19; + unsigned long r20; + unsigned long r21; + unsigned long r22; + unsigned long r23; + unsigned long r24; + unsigned long r25; + unsigned long r26; + unsigned long r27; + unsigned long r28; + unsigned long r29; + unsigned long r30; + unsigned long r31; +}; + #else #error port me! #endif |