Subject: mips SOFTFLOAT support
To: NetBSD port-mips <port-mips@netbsd.org>
From: TAKEMURA, Shin <takemura@ca2.so-net.ne.jp>
List: port-mips
Date: 09/25/1999 10:54:36
Hi,
Hpcmips needs completely FPU instruction free user land. So we made
patch (attached).
It should be more general, for example, '.if MACHINE_ARCH==mipssfel'
but I think that cause too match change. Before we start to discuss
about general SOFTFLOAT support, I want to commit this patch once.
Takemura
Index: gnu/dist/gcc/config/mips/ecoff.h
===================================================================
RCS file: /cvsroot/hpcmips/gnu/dist/gcc/config/mips/ecoff.h,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- ecoff.h 1999/05/06 05:00:35 1.1.1.1
+++ ecoff.h 1999/09/05 16:46:34 1.3
@@ -19,8 +19,10 @@
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#ifndef NOUSE_GOFAST
/* US Software GOFAST library support. */
#define INIT_SUBTARGET_OPTABS INIT_GOFAST_OPTABS
+#endif
#include "mips/mips.h"
Index: gnu/dist/gcc/config/mips/elf.h
===================================================================
RCS file: /cvsroot/hpcmips/gnu/dist/gcc/config/mips/elf.h,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- elf.h 1999/05/06 05:00:35 1.1.1.1
+++ elf.h 1999/09/05 16:46:34 1.3
@@ -29,7 +29,9 @@
#endif
/* Mostly like ECOFF. */
+#ifndef NOUSE_GOFAST
#include "gofast.h"
+#endif
#include "mips/ecoff.h"
/* We need to use .esize and .etype instead of .size and .type to
Index: gnu/dist/gcc/config/mips/netbsd.h
===================================================================
RCS file: /cvsroot/hpcmips/gnu/dist/gcc/config/mips/netbsd.h,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- netbsd.h 1999/05/06 05:00:39 1.1.1.1
+++ netbsd.h 1999/09/05 16:46:34 1.3
@@ -23,6 +23,11 @@
#define TARGET_ENDIAN_DEFAULT 0
#define TARGET_DEFAULT MASK_GAS
+#ifdef hpcmips /* XXX should use distinct target name -uch */
+#define NOUSE_GOFAST
+#define SOFT_FLOAT
+#endif
+
/* Get generic mips ELF definitions. */
#include <mips/elf.h>
@@ -252,7 +257,11 @@
GO_IF_LEGITIMATE_ADDRESS ever accepting such addresses. */
#undef TARGET_DEFAULT
+#ifdef SOFT_FLOAT
+#define TARGET_DEFAULT (MASK_GAS|MASK_DEBUG_A|MASK_SOFT_FLOAT)
+#else
#define TARGET_DEFAULT (MASK_GAS|MASK_DEBUG_A)
+#endif
/* Since gas and gld are standard on NetBSD, we don't need these */
#undef ASM_FINAL_SPEC
Index: gnu/lib/libgcc/Makefile
===================================================================
RCS file: /cvsroot/hpcmips/gnu/lib/libgcc/Makefile,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -u -r1.1.1.2 -r1.2
--- Makefile 1999/08/25 09:24:55 1.1.1.2
+++ Makefile 1999/09/05 16:46:34 1.2
@@ -18,6 +18,10 @@
CPPFLAGS+= -I${ARCH}/${ARCHSUBDIR} -I${ARCH} \
-I${DIST}/config -I${DIST}/cp -I${DIST}
+.if (${MACHINE} == "hpcmips") # XXX
+CPPFLAGS+=-D${MACHINE}
+.endif
+
LIB2OBJS= __gcc_bcmp.o _varargs.o __dummy.o _eprintf.o _bb.o _shtab.o
\
_clear_cache.o _trampoline.o __main.o _exit.o _ctors.o \
_pure.o
Index: gnu/lib/libobjc/Makefile
===================================================================
RCS file: /cvsroot/hpcmips/gnu/lib/libobjc/Makefile,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -u -r1.1.1.2 -r1.2
--- Makefile 1999/08/25 09:24:57 1.1.1.2
+++ Makefile 1999/09/05 16:46:34 1.2
@@ -24,6 +24,10 @@
CPPFLAGS+= -I. -I${ARCH}/${ARCHSUBDIR} -I${ARCH} \
-I${DIST}/config -I${DIST}
+.if (${MACHINE} == "hpcmips") # XXX
+CPPFLAGS+=-D${MACHINE}
+.endif
+
MKLINT= no
DIST= ${.CURDIR}/../../dist/gcc
Index: gnu/usr.bin/egcs/Makefile.inc
===================================================================
RCS file: /cvsroot/hpcmips/gnu/usr.bin/egcs/Makefile.inc,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -u -r1.1.1.2 -r1.2
--- Makefile.inc 1999/08/25 09:25:52 1.1.1.2
+++ Makefile.inc 1999/09/05 16:46:35 1.2
@@ -38,6 +38,10 @@
CPPFLAGS+=-DDEFAULT_ELF
.endif
+.if (${MACHINE} == "hpcmips") # XXX
+CPPFLAGS+=-D${MACHINE}
+.endif
+
HOST_CPPFLAGS= ${CPPFLAGS}
.PATH: ${.CURDIR}/../arch \
Index: lib/libc/arch/mips/Makefile.inc
===================================================================
RCS file: /cvsroot/hpcmips/lib/libc/arch/mips/Makefile.inc,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- Makefile.inc 1999/05/06 05:09:17 1.1.1.1
+++ Makefile.inc 1999/07/04 05:44:50 1.2
@@ -2,3 +2,9 @@
KMINCLUDES=
KMSRCS=
+
+.if (${MACHINE} == "hpcmips")
+CPPFLAGS+=-DSOFTFLOAT
+
+.include <fplib/Makefile.inc>
+.endif
Index: lib/libc/arch/mips/gen/Makefile.inc
===================================================================
RCS file: /cvsroot/hpcmips/lib/libc/arch/mips/gen/Makefile.inc,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- Makefile.inc 1999/05/06 05:09:17 1.1.1.1
+++ Makefile.inc 1999/07/04 05:48:56 1.2
@@ -1,8 +1,14 @@
# $NetBSD: Makefile.inc,v 1.8 1999/01/18 04:32:49 castor Exp $
+.if (${MACHINE} == "hpcmips")
+SRCS+= sf_fabs.c frexp.c infinity.c sf_isinf.c sf_ldexp.c sf_modf.c
+SRCS+= sf_flt_rounds.c sf_fpgetmask.c sf_fpgetround.c sf_fpgetsticky.c \
+ sf_fpsetmask.c sf_fpsetround.c sf_fpsetsticky.c
+.else
SRCS+= fabs.S frexp.c infinity.c isinf.S ldexp.S modf.S
SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \
fpsetround.c fpsetsticky.c
+.endif
SRCS+= setjmp.S __setjmp14.S
SRCS+= _setjmp.S
Index: lib/libc/arch/mips/gen/__setjmp14.S
===================================================================
RCS file: /cvsroot/hpcmips/lib/libc/arch/mips/gen/__setjmp14.S,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- __setjmp14.S 1999/05/06 05:09:17 1.1.1.1
+++ __setjmp14.S 1999/07/04 05:48:56 1.2
@@ -117,6 +117,7 @@
REG_S s8, (_OFFSETOF_SC_REGS + S8 * SZREG)(a0)
li v0, 1 # be nice if we could tell
sw v0, (_OFFSETOF_SC_REGS + 34 * SZREG)(a0) # sc_fpused
= 1
+#ifndef SOFTFLOAT
cfc1 v0, $31
swc1 $f20, (20 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f21, (21 * 4 + _OFFSETOF_SC_FPREGS)(a0)
@@ -130,6 +131,7 @@
swc1 $f29, (29 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f30, (30 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f31, (31 * 4 + _OFFSETOF_SC_FPREGS)(a0)
+#endif
sw v0, (32 * 4 + _OFFSETOF_SC_FPREGS)(a0)
move v0, zero
j ra
Index: lib/libc/arch/mips/gen/_setjmp.S
===================================================================
RCS file: /cvsroot/hpcmips/lib/libc/arch/mips/gen/_setjmp.S,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- _setjmp.S 1999/05/06 05:09:17 1.1.1.1
+++ _setjmp.S 1999/07/04 05:48:56 1.2
@@ -85,6 +85,7 @@
REG_S s7, (S7 * SZREG + _OFFSETOF_SC_REGS)(a0)
REG_S sp, (SP * SZREG + _OFFSETOF_SC_REGS)(a0)
REG_S 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)
@@ -98,6 +99,7 @@
swc1 $f29, (29 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f30, (30 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f31, (31 * 4 + _OFFSETOF_SC_FPREGS)(a0)
+#endif
sw v0, (32 * 4 + _OFFSETOF_SC_FPREGS)(a0)
REG_EPILOGUE
j ra
@@ -130,6 +132,7 @@
lw v0, (32 * 4 + _OFFSETOF_SC_FPREGS)(a0) # get fpu status
REG_L sp, (SP * SZREG + _OFFSETOF_SC_REGS)(a0)
REG_L 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)
@@ -143,6 +146,7 @@
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
Index: lib/libc/arch/mips/gen/setjmp.S
===================================================================
RCS file: /cvsroot/hpcmips/lib/libc/arch/mips/gen/setjmp.S,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- setjmp.S 1999/05/06 05:09:17 1.1.1.1
+++ setjmp.S 1999/07/04 05:48:56 1.2
@@ -109,6 +109,7 @@
REG_S s8, (_OFFSETOF_SC_REGS + SZREG * S8)(a0)
li v0, 1 # be nice if we could tell
sw v0, (_OFFSETOF_SC_REGS + 34 * SZREG)(a0) # sc_fpused
= 1
+#ifndef SOFTFLOAT
cfc1 v0, $31
swc1 $f20, (20 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f21, (21 * 4 + _OFFSETOF_SC_FPREGS)(a0)
@@ -122,6 +123,7 @@
swc1 $f29, (29 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f30, (30 * 4 + _OFFSETOF_SC_FPREGS)(a0)
swc1 $f31, (31 * 4 + _OFFSETOF_SC_FPREGS)(a0)
+#endif
sw v0, ((32 * 4) + _OFFSETOF_SC_FPREGS)(a0)
REG_EPILOGUE
move v0, zero
------
EOF