From owner-svn-src-all@FreeBSD.ORG Fri Oct 21 06:40:37 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 53CF91065675; Fri, 21 Oct 2011 06:40:37 +0000 (UTC) (envelope-from das@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3FCAA8FC16; Fri, 21 Oct 2011 06:40:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p9L6ebL5010614; Fri, 21 Oct 2011 06:40:37 GMT (envelope-from das@svn.freebsd.org) Received: (from das@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p9L6eaeC010594; Fri, 21 Oct 2011 06:40:36 GMT (envelope-from das@svn.freebsd.org) Message-Id: <201110210640.p9L6eaeC010594@svn.freebsd.org> From: David Schultz Date: Fri, 21 Oct 2011 06:40:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226606 - in head/lib/libc: amd64 amd64/gen arm arm/gen gen i386 i386/gen ia64 ia64/gen mips mips/gen powerpc powerpc/gen powerpc64 powerpc64/gen sparc64 sparc64/gen X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Oct 2011 06:40:37 -0000 Author: das Date: Fri Oct 21 06:40:36 2011 New Revision: 226606 URL: http://svn.freebsd.org/changeset/base/226606 Log: Replace a proliferation of buggy MD implementations of modf() with a working MI one. The MI one only needs to be overridden on machines with non-IEEE754 arithmetic. (The last supported one was the VAX.) It can also be overridden if someone comes up with a faster one that actually passes the regression tests -- but this is harder than it sounds. Added: head/lib/libc/gen/modf.c - copied, changed from r226410, head/lib/msun/src/s_modf.c Deleted: head/lib/libc/amd64/gen/modf.S head/lib/libc/arm/gen/modf.c head/lib/libc/i386/gen/modf.S head/lib/libc/ia64/gen/modf.c head/lib/libc/mips/gen/modf.S head/lib/libc/mips/gen/modf.c head/lib/libc/powerpc/gen/modf.c head/lib/libc/powerpc64/gen/modf.c head/lib/libc/sparc64/gen/modf.S Modified: head/lib/libc/amd64/Symbol.map head/lib/libc/amd64/gen/Makefile.inc head/lib/libc/arm/Symbol.map head/lib/libc/arm/gen/Makefile.inc head/lib/libc/gen/Makefile.inc head/lib/libc/gen/Symbol.map head/lib/libc/i386/Symbol.map head/lib/libc/i386/gen/Makefile.inc head/lib/libc/ia64/Symbol.map head/lib/libc/ia64/gen/Makefile.inc head/lib/libc/mips/Symbol.map head/lib/libc/mips/gen/Makefile.inc head/lib/libc/powerpc/Symbol.map head/lib/libc/powerpc/gen/Makefile.inc head/lib/libc/powerpc64/Symbol.map head/lib/libc/powerpc64/gen/Makefile.inc head/lib/libc/sparc64/Symbol.map head/lib/libc/sparc64/gen/Makefile.inc Modified: head/lib/libc/amd64/Symbol.map ============================================================================== --- head/lib/libc/amd64/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/amd64/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -26,7 +26,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; rfork_thread; setjmp; longjmp; Modified: head/lib/libc/amd64/gen/Makefile.inc ============================================================================== --- head/lib/libc/amd64/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/amd64/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,7 +2,7 @@ # $FreeBSD$ SRCS+= _setjmp.S _set_tp.c rfork_thread.S setjmp.S sigsetjmp.S \ - fabs.S modf.S \ + fabs.S \ infinity.c ldexp.c makecontext.c signalcontext.c \ flt_rounds.c fpgetmask.c fpsetmask.c fpgetprec.c fpsetprec.c \ fpgetround.c fpsetround.c fpgetsticky.c Modified: head/lib/libc/arm/Symbol.map ============================================================================== --- head/lib/libc/arm/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/arm/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -19,7 +19,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/arm/gen/Makefile.inc ============================================================================== --- head/lib/libc/arm/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/arm/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,5 +2,5 @@ # $FreeBSD$ SRCS+= _ctx_start.S _setjmp.S _set_tp.c alloca.S fabs.c \ - infinity.c ldexp.c makecontext.c modf.c \ + infinity.c ldexp.c makecontext.c \ setjmp.S signalcontext.c sigsetjmp.S divsi3.S Modified: head/lib/libc/gen/Makefile.inc ============================================================================== --- head/lib/libc/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -35,6 +35,8 @@ SRCS+= __getosreldate.c __xuname.c \ usleep.c utime.c utxdb.c valloc.c vis.c wait.c wait3.c waitpid.c \ wordexp.c +MISRCS+=modf.c + CANCELPOINTS_SRCS=sem.c sem_new.c .for src in ${CANCELPOINTS_SRCS} SRCS+=cancelpoints_${src} Modified: head/lib/libc/gen/Symbol.map ============================================================================== --- head/lib/libc/gen/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/gen/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -213,6 +213,7 @@ FBSD_1.0 { ldexp; lockf; lrand48; + modf; mrand48; nftw; nice; Copied and modified: head/lib/libc/gen/modf.c (from r226410, head/lib/msun/src/s_modf.c) ============================================================================== --- head/lib/msun/src/s_modf.c Sat Oct 15 23:15:55 2011 (r226410, copy source) +++ head/lib/libc/gen/modf.c Fri Oct 21 06:40:36 2011 (r226606) @@ -10,9 +10,8 @@ * ==================================================== */ -#ifndef lint -static char rcsid[] = "$FreeBSD$"; -#endif +#include +__FBSDID("$FreeBSD$"); /* * modf(double x, double *iptr) @@ -24,8 +23,68 @@ static char rcsid[] = "$FreeBSD$"; * No exception. */ -#include "math.h" -#include "math_private.h" +#include +#include +#include + +/* Bit fiddling routines copied from msun/src/math_private.h,v 1.15 */ + +#if BYTE_ORDER == BIG_ENDIAN + +typedef union +{ + double value; + struct + { + u_int32_t msw; + u_int32_t lsw; + } parts; +} ieee_double_shape_type; + +#endif + +#if BYTE_ORDER == LITTLE_ENDIAN + +typedef union +{ + double value; + struct + { + u_int32_t lsw; + u_int32_t msw; + } parts; +} ieee_double_shape_type; + +#endif + +/* Get two 32 bit ints from a double. */ + +#define EXTRACT_WORDS(ix0,ix1,d) \ +do { \ + ieee_double_shape_type ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (0) + +/* Get the more significant 32 bit int from a double. */ + +#define GET_HIGH_WORD(i,d) \ +do { \ + ieee_double_shape_type gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (0) + +/* Set a double from two 32 bit ints. */ + +#define INSERT_WORDS(d,ix0,ix1) \ +do { \ + ieee_double_shape_type iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (0) static const double one = 1.0; Modified: head/lib/libc/i386/Symbol.map ============================================================================== --- head/lib/libc/i386/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/i386/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -20,7 +20,6 @@ FBSD_1.0 { __nan; __infinity; makecontext; - modf; rfork_thread; setjmp; longjmp; Modified: head/lib/libc/i386/gen/Makefile.inc ============================================================================== --- head/lib/libc/i386/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/i386/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,5 +2,5 @@ # $FreeBSD$ SRCS+= _ctx_start.S _setjmp.S _set_tp.c fabs.S \ - flt_rounds.c infinity.c ldexp.c makecontext.c modf.S \ + flt_rounds.c infinity.c ldexp.c makecontext.c \ rfork_thread.S setjmp.S signalcontext.c sigsetjmp.S Modified: head/lib/libc/ia64/Symbol.map ============================================================================== --- head/lib/libc/ia64/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/ia64/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -23,7 +23,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/ia64/gen/Makefile.inc ============================================================================== --- head/lib/libc/ia64/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/ia64/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -3,7 +3,7 @@ SRCS+= __divdf3.S __divdi3.S __divsf3.S __divsi3.S __moddi3.S __modsi3.S \ __udivdi3.S __udivsi3.S __umoddi3.S __umodsi3.S _mcount.S _set_tp.c \ _setjmp.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c fpsetmask.c \ - fpsetround.c infinity.c ldexp.c makecontext.c modf.c setjmp.S \ + fpsetround.c infinity.c ldexp.c makecontext.c setjmp.S \ signalcontext.c sigsetjmp.S # The following may go away if function _Unwind_FindTableEntry() Modified: head/lib/libc/mips/Symbol.map ============================================================================== --- head/lib/libc/mips/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/mips/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -18,7 +18,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/mips/gen/Makefile.inc ============================================================================== --- head/lib/libc/mips/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/mips/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -1,7 +1,7 @@ # $NetBSD: Makefile.inc,v 1.27 2005/10/07 17:16:40 tsutsui Exp $ # $FreeBSD$ -SRCS+= infinity.c fabs.c ldexp.c modf.c +SRCS+= infinity.c fabs.c ldexp.c # SRCS+= flt_rounds.c fpgetmask.c fpgetround.c fpgetsticky.c fpsetmask.c \ # fpsetround.c fpsetsticky.c Modified: head/lib/libc/powerpc/Symbol.map ============================================================================== --- head/lib/libc/powerpc/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/powerpc/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -24,7 +24,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/powerpc/gen/Makefile.inc ============================================================================== --- head/lib/libc/powerpc/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/powerpc/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,7 +2,7 @@ SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \ fpgetsticky.c fpsetmask.c fpsetround.c \ - infinity.c ldexp.c makecontext.c modf.c _setjmp.S \ + infinity.c ldexp.c makecontext.c _setjmp.S \ setjmp.S sigsetjmp.S signalcontext.c syncicache.c \ _set_tp.c Modified: head/lib/libc/powerpc64/Symbol.map ============================================================================== --- head/lib/libc/powerpc64/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/powerpc64/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -24,7 +24,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/powerpc64/gen/Makefile.inc ============================================================================== --- head/lib/libc/powerpc64/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/powerpc64/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,7 +2,7 @@ SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \ fpgetsticky.c fpsetmask.c fpsetround.c \ - infinity.c ldexp.c makecontext.c modf.c _setjmp.S \ + infinity.c ldexp.c makecontext.c _setjmp.S \ setjmp.S sigsetjmp.S signalcontext.c syncicache.c \ _set_tp.c Modified: head/lib/libc/sparc64/Symbol.map ============================================================================== --- head/lib/libc/sparc64/Symbol.map Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/sparc64/Symbol.map Fri Oct 21 06:40:36 2011 (r226606) @@ -24,7 +24,6 @@ FBSD_1.0 { __infinity; __nan; makecontext; - modf; setjmp; longjmp; sigsetjmp; Modified: head/lib/libc/sparc64/gen/Makefile.inc ============================================================================== --- head/lib/libc/sparc64/gen/Makefile.inc Fri Oct 21 06:36:40 2011 (r226605) +++ head/lib/libc/sparc64/gen/Makefile.inc Fri Oct 21 06:40:36 2011 (r226606) @@ -2,5 +2,5 @@ SRCS+= _ctx_start.S _setjmp.S fabs.S fixunsdfsi.S flt_rounds.c fpgetmask.c \ fpgetround.c fpgetsticky.c fpsetmask.c fpsetround.c \ - infinity.c ldexp.c makecontext.c modf.S \ + infinity.c ldexp.c makecontext.c \ signalcontext.c setjmp.S sigsetjmp.S _set_tp.c