summaryrefslogtreecommitdiffstats
path: root/jmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'jmp.S')
-rw-r--r--jmp.S54
1 files changed, 54 insertions, 0 deletions
diff --git a/jmp.S b/jmp.S
index 9acee8a9..d426990f 100644
--- a/jmp.S
+++ b/jmp.S
@@ -486,6 +486,60 @@ DEFUN(jmp_restore)
mv a0, a1
ret
+#elif __loongarch64
+
+DEFUN(jmp_save)
+ st.d $ra, $a0, 0
+ st.d $sp, $a0, 8
+ st.d $fp, $a0, 16
+ st.d $s0, $a0, 24
+ st.d $s1, $a0, 32
+ st.d $s2, $a0, 40
+ st.d $s3, $a0, 48
+ st.d $s4, $a0, 56
+ st.d $s5, $a0, 64
+ st.d $s6, $a0, 72
+ st.d $s7, $a0, 80
+ st.d $s8, $a0, 88
+#if 0 && !__loongarch64_soft_float
+ fst.d $fs0, $a0, 96
+ fst.d $fs1, $a0, 104
+ fst.d $fs2, $a0, 112
+ fst.d $fs3, $a0, 120
+ fst.d $fs4, $a0, 128
+ fst.d $fs5, $a0, 136
+ fst.d $fs6, $a0, 144
+ fst.d $fs7, $a0, 152
+#endif
+ xor $v0, $v0, $v0
+ jirl $zero, $ra, 0
+
+DEFUN(jmp_restore)
+ ld.d $ra, $a0, 0
+ ld.d $sp, $a0, 8
+ ld.d $fp, $a0, 16
+ ld.d $s0, $a0, 24
+ ld.d $s1, $a0, 32
+ ld.d $s2, $a0, 40
+ ld.d $s3, $a0, 48
+ ld.d $s4, $a0, 56
+ ld.d $s5, $a0, 64
+ ld.d $s6, $a0, 72
+ ld.d $s7, $a0, 80
+ ld.d $s8, $a0, 88
+#if 0 && !__loongarch64_soft_float
+ fld.d $fs0, $a0, 96
+ fld.d $fs1, $a0, 104
+ fld.d $fs2, $a0, 112
+ fld.d $fs3, $a0, 120
+ fld.d $fs4, $a0, 128
+ fld.d $fs5, $a0, 136
+ fld.d $fs6, $a0, 144
+ fld.d $fs7, $a0, 152
+#endif
+ add.d $v0, $a1, $zero
+ jirl $zero, $ra, 0
+
#else
#error port me!
#endif