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;
+}

Reply via email to