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