summaryrefslogtreecommitdiffstats
path: root/usr/klibc/arch/mips64/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/arch/mips64/setjmp.S')
-rw-r--r--usr/klibc/arch/mips64/setjmp.S50
1 files changed, 50 insertions, 0 deletions
diff --git a/usr/klibc/arch/mips64/setjmp.S b/usr/klibc/arch/mips64/setjmp.S
new file mode 100644
index 0000000..5d902e2
--- /dev/null
+++ b/usr/klibc/arch/mips64/setjmp.S
@@ -0,0 +1,50 @@
+#
+# arch/mips64/setjmp.S
+#
+# setjmp/longjmp for the MIPS architecture
+#
+# The jmp_buf is assumed to contain the following, in order:
+# s0..s7
+# gp
+# sp
+# s8
+# ra
+#
+
+#include <machine/asm.h>
+
+LEAF(setjmp)
+ sd s0, 0(a0)
+ sd s1, 8(a0)
+ sd s2, 16(a0)
+ sd s3, 24(a0)
+ sd s4, 32(a0)
+ sd s5, 40(a0)
+ sd s6, 48(a0)
+ sd s7, 56(a0)
+ sd gp, 64(a0)
+ sd sp, 72(a0)
+ sd s8, 80(a0)
+ sd ra, 88(a0)
+ move v0, zero
+ jr ra
+
+ END(setjmp)
+
+LEAF(longjmp)
+ ld s0, 0(a0)
+ ld s1, 8(a0)
+ ld s2, 16(a0)
+ ld s3, 24(a0)
+ ld s4, 32(a0)
+ ld s5, 40(a0)
+ ld s6, 48(a0)
+ ld s7, 56(a0)
+ ld gp, 64(a0)
+ ld sp, 72(a0)
+ ld s8, 80(a0)
+ ld ra, 88(a0)
+ move v0, a1
+ jr ra
+
+ END(longjmp)