PERFORCE change 104869 for review
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Wed Aug 23 22:05:58 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=104869
Change 104869 by gonzo at gonzo_hideout on 2006/08/23 22:05:39
o Ported setjmp from NetBSD. XXX: Hardcoded softfloat.
Affected files ...
.. //depot/projects/mips2/src/lib/libc/mips/gen/_setjmp.S#2 edit
Differences ...
==== //depot/projects/mips2/src/lib/libc/mips/gen/_setjmp.S#2 (text+ko) ====
@@ -32,11 +32,8 @@
* SUCH DAMAGE.
*/
-#include <machine/cdefs.h>
-#include <mips/regnum.h>
-#include <mips/asm.h>
-#include <machine/setjmp.h>
-#include <machine/signal.h> /* XXX */
+#include <machine/regnum.h>
+#include <machine/asm.h>
#if defined(LIBC_SCCS) && !defined(lint)
ASMSTR("from: @(#)_setjmp.s 8.1 (Berkeley) 6/4/93")
@@ -47,6 +44,8 @@
.abicalls
#endif
+#define SOFTFLOAT /* XXX */
+
/*
* C library -- _setjmp, _longjmp
*
@@ -67,20 +66,21 @@
#.set reorder
#endif
- REG_PROLOGUE
- REG_LI v0, 0xACEDBADE # sigcontext magic number
- REG_S ra, (2 * 4)(a0) # sc_pc = return address
- REG_S v0, (_OFFSETOF_SC_REGS)(a0) # saved in sc_regs[0]
- REG_S s0, (_R_S0 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s1, (_R_S1 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s2, (_R_S2 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s3, (_R_S3 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s4, (_R_S4 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s5, (_R_S5 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s6, (_R_S6 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s7, (_R_S7 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S sp, (_R_SP * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_S s8, (_R_S8 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ .set push
+ li v0, 0xACEDBADE # sigcontext magic number
+ sw ra, (2 * 4)(a0) # sc_pc = return address
+ sw v0, (_OFFSETOF_SC_REGS)(a0) # saved in sc_regs[0]
+ sw s0, (S0 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s1, (S1 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s2, (S2 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s3, (S3 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s4, (S4 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s5, (S5 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s6, (S6 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s7, (S7 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw sp, (SP * SZREG + _OFFSETOF_SC_REGS)(a0)
+ sw s8, (S8 * SZREG + _OFFSETOF_SC_REGS)(a0)
+#ifndef SOFTFLOAT
cfc1 v0, $31 # too bad cant check if FP used
swc1 $f20, (20 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f21, (21 * 4 + _OFFSETOF_SC_FPREGS)(a0)
@@ -95,7 +95,8 @@
swc1 $f30, (30 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f31, (31 * 4 + _OFFSETOF_SC_FPREGS)(a0)
sw v0, (32 * 4 + _OFFSETOF_SC_FPREGS)(a0)
- REG_EPILOGUE
+#endif
+ .set pop
j ra
move v0, zero
END(_setjmp)
@@ -109,23 +110,24 @@
.cprestore 16
.set noreorder
#endif
- REG_PROLOGUE
- REG_L v0, (_OFFSETOF_SC_REGS)(a0) # get magic number
- REG_L ra, (2 * 4)(a0)
- REG_LI t0, 0xACEDBADE
+ .set push
+ lw v0, (_OFFSETOF_SC_REGS)(a0) # get magic number
+ lw ra, (2 * 4)(a0)
+ li t0, 0xACEDBADE
bne v0, t0, botch # jump if error
addu sp, sp, 32 # does not matter, sanity
- REG_L s0, (_R_S0 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s1, (_R_S1 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s2, (_R_S2 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s3, (_R_S3 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s4, (_R_S4 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s5, (_R_S5 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s6, (_R_S6 * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s7, (_R_S7 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s0, (S0 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s1, (S1 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s2, (S2 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s3, (S3 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s4, (S4 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s5, (S5 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s6, (S6 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s7, (S7 * SZREG + _OFFSETOF_SC_REGS)(a0)
lw v0, (32 * 4 + _OFFSETOF_SC_FPREGS)(a0) # get fpu status
- REG_L sp, (_R_SP * SZREG + _OFFSETOF_SC_REGS)(a0)
- REG_L s8, (_R_S8 * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw sp, (SP * SZREG + _OFFSETOF_SC_REGS)(a0)
+ lw s8, (S8 * SZREG + _OFFSETOF_SC_REGS)(a0)
+#ifndef SOFTFLOAT
ctc1 v0, $31
lwc1 $f20, (20 * 4 + _OFFSETOF_SC_FPREGS)(a0)
lwc1 $f21, (21 * 4 + _OFFSETOF_SC_FPREGS)(a0)
@@ -139,10 +141,10 @@
lwc1 $f29, (29 * 4 + _OFFSETOF_SC_FPREGS)(a0)
lwc1 $f30, (30 * 4 + _OFFSETOF_SC_FPREGS)(a0)
lwc1 $f31, (31 * 4 + _OFFSETOF_SC_FPREGS)(a0)
-
+#endif
j ra
move v0, a1
- REG_EPILOGUE
+ .set pop
botch:
jal _C_LABEL(longjmperror)
nop
More information about the p4-projects
mailing list