summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jmp.S34
-rw-r--r--unwind.h17
2 files changed, 51 insertions, 0 deletions
diff --git a/jmp.S b/jmp.S
index 994b09bd..80841e63 100644
--- a/jmp.S
+++ b/jmp.S
@@ -329,6 +329,40 @@ DEFUN(jmp_restore)
mov w0, w1
br x30
+#elif _MIPS_SZPTR == 32
+
+DEFUN(jmp_save)
+ sw $16, 0($4)
+ sw $17, 4($4)
+ sw $18, 8($4)
+ sw $19, 12($4)
+ sw $20, 16($4)
+ sw $21, 20($4)
+ sw $22, 24($4)
+ sw $23, 28($4)
+ sw $28, 32($4)
+ sw $29, 36($4)
+ sw $30, 40($4)
+ sw $ra, 44($4)
+ jr $ra
+ li $2, 0
+
+DEFUN(jmp_restore)
+ lw $16, 0($4)
+ lw $17, 4($4)
+ lw $18, 8($4)
+ lw $19, 12($4)
+ lw $20, 16($4)
+ lw $21, 20($4)
+ lw $22, 24($4)
+ lw $23, 28($4)
+ lw $28, 32($4)
+ lw $29, 36($4)
+ lw $ra, 44($4)
+ lw $30, 40($4)
+ jr $ra
+ move $2, $5
+
#else
#error port me!
#endif
diff --git a/unwind.h b/unwind.h
index 2159a1a4..a9f8d60c 100644
--- a/unwind.h
+++ b/unwind.h
@@ -141,6 +141,23 @@ struct jmp {
x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not
saved. */
+#elif _MIPS_SZPTR == 32
+
+struct jmp {
+ unsigned long s0; /* $16 */
+ unsigned long s1; /* ... */
+ unsigned long s2;
+ unsigned long s3;
+ unsigned long s4;
+ unsigned long s5;
+ unsigned long s6; /* ... */
+ unsigned long s8; /* $23 */
+ unsigned long gp; /* $28 */
+ unsigned long sp; /* $29 */
+ unsigned long fp; /* $30 */
+ unsigned long ra; /* $31 */
+};
+
#else
#error port me!
#endif