summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jmp.S60
-rw-r--r--signal.h28
2 files changed, 88 insertions, 0 deletions
diff --git a/jmp.S b/jmp.S
index 9784d5d7..d8128375 100644
--- a/jmp.S
+++ b/jmp.S
@@ -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
diff --git a/signal.h b/signal.h
index b842256a..e2cf1d5b 100644
--- a/signal.h
+++ b/signal.h
@@ -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