Module Name: src
Committed By: matt
Date: Wed Jan 27 06:55:25 UTC 2010
Modified Files:
src/lib/libc/arch/mips/gen [matt-nb5-mips64]: Makefile.inc _setjmp.S
flt_rounds.c setjmp.S
src/lib/libc/compat/arch/mips/gen [matt-nb5-mips64]: compat_setjmp.S
src/lib/libc/gen [matt-nb5-mips64]: nlist_private.h
Added Files:
src/lib/libc/gen [matt-nb5-mips64]: fabs_ieee754.c
Log Message:
Don't use cfc1/ctc1 in softfloat. Use the "common" fabs/modf/ldexp when
using softfloat.
To generate a diff of this commit:
cvs rdiff -u -r1.28.34.1 -r1.28.34.2 src/lib/libc/arch/mips/gen/Makefile.inc
cvs rdiff -u -r1.20.34.3 -r1.20.34.4 src/lib/libc/arch/mips/gen/_setjmp.S
cvs rdiff -u -r1.5 -r1.5.34.1 src/lib/libc/arch/mips/gen/flt_rounds.c
cvs rdiff -u -r1.17.34.3 -r1.17.34.4 src/lib/libc/arch/mips/gen/setjmp.S
cvs rdiff -u -r1.1.34.2 -r1.1.34.3 \
src/lib/libc/compat/arch/mips/gen/compat_setjmp.S
cvs rdiff -u -r0 -r1.1.2.1 src/lib/libc/gen/fabs_ieee754.c
cvs rdiff -u -r1.17 -r1.17.46.1 src/lib/libc/gen/nlist_private.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/arch/mips/gen/Makefile.inc
diff -u src/lib/libc/arch/mips/gen/Makefile.inc:1.28.34.1 src/lib/libc/arch/mips/gen/Makefile.inc:1.28.34.2
--- src/lib/libc/arch/mips/gen/Makefile.inc:1.28.34.1 Sat Sep 5 18:46:38 2009
+++ src/lib/libc/arch/mips/gen/Makefile.inc Wed Jan 27 06:55:25 2010
@@ -1,6 +1,10 @@
-# $NetBSD: Makefile.inc,v 1.28.34.1 2009/09/05 18:46:38 matt Exp $
+# $NetBSD: Makefile.inc,v 1.28.34.2 2010/01/27 06:55:25 matt Exp $
+.if ${MKSOFTFLOAT} == "no"
SRCS+= fabs.S ldexp.S modf.S
+.else
+SRCS+= fabs_ieee754.c ldexp_ieee754.c modf_ieee754.c
+.endif
# Common ieee754 constants and functions
SRCS+= infinityf_ieee754.c infinity_ieee754.c infinityl_dbl_ieee754.c
@@ -11,9 +15,12 @@
SRCS+= signbitf_ieee754.c signbitd_ieee754.c
SRCS+= nanf.c
+SRCS+= flt_rounds.c
-SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \
+.if ${MKSOFTFLOAT} == "no"
+SRCS+= fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \
fpsetround.c fpsetsticky.c
+.endif
SRCS+= setjmp.S longjmp.c
SRCS+= _setjmp.S
Index: src/lib/libc/arch/mips/gen/_setjmp.S
diff -u src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.3 src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.4
--- src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.3 Sat Dec 12 19:08:57 2009
+++ src/lib/libc/arch/mips/gen/_setjmp.S Wed Jan 27 06:55:25 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: _setjmp.S,v 1.20.34.3 2009/12/12 19:08:57 cliff Exp $ */
+/* $NetBSD: _setjmp.S,v 1.20.34.4 2010/01/27 06:55:25 matt Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -46,7 +46,7 @@
#if 0
RCSID("from: @(#)_setjmp.s 8.1 (Berkeley) 6/4/93")
#else
- RCSID("$NetBSD: _setjmp.S,v 1.20.34.3 2009/12/12 19:08:57 cliff Exp $")
+ RCSID("$NetBSD: _setjmp.S,v 1.20.34.4 2010/01/27 06:55:25 matt Exp $")
#endif
#endif /* LIBC_SCCS and not lint */
@@ -82,13 +82,14 @@
#if defined(__mips_n32) || defined(__mips_n64)
REG_S gp, _OFFSETOF_SC_REGS_GP(a0) # newabi gp is callee-saved
#endif
- cfc1 v0, $31 # too bad cant check if FP used
/*
* In N32, FP registers F20, F22, F24, F26, F28, F30 are callee-saved.
* In N64, FP registers F23 .. F31 are callee-saved.
* In O32, FP registers F20 .. F23 are callee-saved.
*/
#ifndef SOFTFLOAT_FOR_GCC
+ cfc1 v0, $31 # too bad cant check if FP used
+ INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
#if defined(__mips_n64) || defined(__mips_n32)
FP_S $f30, _OFFSETOF_SC_FPREGS_F30(a0)
FP_S $f28, _OFFSETOF_SC_FPREGS_F28(a0)
@@ -110,7 +111,6 @@
FP_S $f31, _OFFSETOF_SC_FPREGS_F31(a0)
#endif
#endif /* SOFTFLOAT_FOR_GCC */
- INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
REG_EPILOGUE
j ra
@@ -140,16 +140,16 @@
REG_L gp, _OFFSETOF_SC_REGS_GP(a0)
#endif
# get fpu status
- INT_L v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
REG_L sp, _OFFSETOF_SC_REGS_SP(a0)
REG_L s8, _OFFSETOF_SC_REGS_S8(a0)
+#ifndef SOFTFLOAT_FOR_GCC
+ INT_L v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
ctc1 v0, $31
/*
* In N32, FP registers F20, F22, F24, F26, F28, F30 are callee-saved.
* In N64, FP registers F23 .. F31 are callee-saved.
* In O32, FP registers F20 .. F23 are callee-saved.
*/
-#ifndef SOFTFLOAT_FOR_GCC
#if defined(__mips_n64) || defined(__mips_n32)
FP_L $f30, _OFFSETOF_SC_FPREGS_F30(a0)
FP_L $f28, _OFFSETOF_SC_FPREGS_F28(a0)
Index: src/lib/libc/arch/mips/gen/flt_rounds.c
diff -u src/lib/libc/arch/mips/gen/flt_rounds.c:1.5 src/lib/libc/arch/mips/gen/flt_rounds.c:1.5.34.1
--- src/lib/libc/arch/mips/gen/flt_rounds.c:1.5 Sat Dec 24 23:10:08 2005
+++ src/lib/libc/arch/mips/gen/flt_rounds.c Wed Jan 27 06:55:25 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: flt_rounds.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */
+/* $NetBSD: flt_rounds.c,v 1.5.34.1 2010/01/27 06:55:25 matt Exp $ */
/*
* Written by J.T. Conklin, Apr 11, 1995
@@ -7,10 +7,11 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: flt_rounds.c,v 1.5 2005/12/24 23:10:08 perry Exp $");
+__RCSID("$NetBSD: flt_rounds.c,v 1.5.34.1 2010/01/27 06:55:25 matt Exp $");
#endif /* LIBC_SCCS and not lint */
#include <machine/float.h>
+#include <ieeefp.h>
static const int map[] = {
1, /* round to nearest */
@@ -22,8 +23,12 @@
int
__flt_rounds()
{
+#ifdef SOFTFLOAT_FOR_GCC
+ return map[fpgetround()];
+#else
int x;
- __asm("cfc1 %0,$31" : "=r" (x));
+ __asm("cfc1\t%0,$31" : "=r" (x));
return map[x & 0x03];
+#endif
}
Index: src/lib/libc/arch/mips/gen/setjmp.S
diff -u src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.3 src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.4
--- src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.3 Sat Dec 12 19:08:57 2009
+++ src/lib/libc/arch/mips/gen/setjmp.S Wed Jan 27 06:55:25 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: setjmp.S,v 1.17.34.3 2009/12/12 19:08:57 cliff Exp $ */
+/* $NetBSD: setjmp.S,v 1.17.34.4 2010/01/27 06:55:25 matt Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -41,7 +41,7 @@
#if 0
RCSID("from: @(#)setjmp.s 8.1 (Berkeley) 6/4/93")
#else
- RCSID("$NetBSD: setjmp.S,v 1.17.34.3 2009/12/12 19:08:57 cliff Exp $")
+ RCSID("$NetBSD: setjmp.S,v 1.17.34.4 2010/01/27 06:55:25 matt Exp $")
#endif
#endif /* LIBC_SCCS and not lint */
@@ -113,9 +113,9 @@
REG_S s8, _OFFSETOF_SC_REGS_S8(a0)
li v0, 1 # be nice if we could tell
INT_S v0, _OFFSETOF_SC_FPUSED(a0) # sc_fpused = 1
+#ifndef SOFTFLOAT_FOR_GCC
cfc1 v0, $31
INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
-#ifndef SOFTFLOAT_FOR_GCC
#if defined(__mips_o32) || defined(__mips_o64) || defined(__mips_n32)
FP_S $f20, _OFFSETOF_SC_FPREGS_F20(a0)
FP_S $f22, _OFFSETOF_SC_FPREGS_F22(a0)
Index: src/lib/libc/compat/arch/mips/gen/compat_setjmp.S
diff -u src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.1.34.2 src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.1.34.3
--- src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.1.34.2 Tue Aug 18 14:42:26 2009
+++ src/lib/libc/compat/arch/mips/gen/compat_setjmp.S Wed Jan 27 06:55:25 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_setjmp.S,v 1.1.34.2 2009/08/18 14:42:26 uebayasi Exp $ */
+/* $NetBSD: compat_setjmp.S,v 1.1.34.3 2010/01/27 06:55:25 matt Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -41,7 +41,7 @@
#if 0
RCSID("from: @(#)setjmp.s 8.1 (Berkeley) 6/4/93")
#else
- RCSID("$NetBSD: compat_setjmp.S,v 1.1.34.2 2009/08/18 14:42:26 uebayasi Exp $")
+ RCSID("$NetBSD: compat_setjmp.S,v 1.1.34.3 2010/01/27 06:55:25 matt Exp $")
#endif
#endif /* LIBC_SCCS and not lint */
@@ -113,6 +113,7 @@
REG_S s8, _OFFSETOF_SC_REGS_S8(a0)
li v0, 1 # be nice if we could tell
INT_S v0, _OFFSETOF_SC_FPUSED(a0) # sc_fpused = 1
+#if !defined(SOFTFLOAT_FOR_GCC)
cfc1 v0, $31
INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
#if defined(__mips_o32) || defined(__mips_o64) || defined(__mips_n32)
@@ -135,6 +136,7 @@
FP_S $f29, _OFFSETOF_SC_FPREGS_F29(a0)
FP_S $f31, _OFFSETOF_SC_FPREGS_F31(a0)
#endif
+#endif /* SOFTFLOAT_FOR_GCC */
REG_EPILOGUE
j ra
move v0, zero
Index: src/lib/libc/gen/nlist_private.h
diff -u src/lib/libc/gen/nlist_private.h:1.17 src/lib/libc/gen/nlist_private.h:1.17.46.1
--- src/lib/libc/gen/nlist_private.h:1.17 Sat Jul 26 19:24:43 2003
+++ src/lib/libc/gen/nlist_private.h Wed Jan 27 06:55:25 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: nlist_private.h,v 1.17 2003/07/26 19:24:43 salo Exp $ */
+/* $NetBSD: nlist_private.h,v 1.17.46.1 2010/01/27 06:55:25 matt Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou
@@ -44,6 +44,9 @@
# define NLIST_AOUT
# define NLIST_ECOFF
# define NLIST_ELF32
+#ifndef __mips_o32
+# define NLIST_ELF64
+#endif
#elif defined(__arm__) || defined(__i386__) || defined (__m68k__) || \
defined(__powerpc__) || defined(__vax__)
# define NLIST_AOUT
Added files:
Index: src/lib/libc/gen/fabs_ieee754.c
diff -u /dev/null src/lib/libc/gen/fabs_ieee754.c:1.1.2.1
--- /dev/null Wed Jan 27 06:55:25 2010
+++ src/lib/libc/gen/fabs_ieee754.c Wed Jan 27 06:55:25 2010
@@ -0,0 +1,54 @@
+/* $NetBSD: fabs_ieee754.c,v 1.1.2.1 2010/01/27 06:55:25 matt Exp $ */
+
+/*-
+ * Copyright (c) 2003 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Klaus Klein.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: fabs_ieee754.c,v 1.1.2.1 2010/01/27 06:55:25 matt Exp $");
+#endif
+
+#include <machine/ieee.h>
+#include <math.h>
+
+/*
+ * 7.12.3.6 fabs - return the absolute value of the argument
+ * IEEE 754 double-precision version
+ */
+double
+fabs(double x)
+{
+ union ieee_double_u u;
+
+ u.dblu_d = x;
+
+ u.dblu_dbl.dbl_sign = 0;
+
+ return u.dblu_d;
+}