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