* math/Makefile (headers): Add bits/huge_valf.h, bits/huge_vall.h,

and bits/inf.h.
        * math/math.h: Include them.

        * sysdeps/alpha/fpu/bits/mathdef.h, sysdeps/arm/fpu/bits/mathdef.h,
        sysdeps/generic/bits/mathdef.h, sysdeps/i386/fpu/bits/mathdef.h,
        sysdeps/ia64/fpu/bits/mathdef.h, sysdeps/m68k/fpu/bits/mathdef.h,
        sysdeps/mips/fpu/bits/mathdef.h, sysdeps/powerpc/fpu/bits/mathdef.h,
        sysdeps/sh/sh4/fpu/bits/mathdef.h, sysdeps/sparc/fpu/bits/mathdef.h,
        sysdeps/x86_64/fpu/bits/mathdef.h: Remove INFINITY.

        * sysdeps/arm/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
        (HUGE_VALF, HUGE_VALL): Remove.
        * sysdeps/ieee754/bits/huge_val.h: Likewise.
        * sysdeps/sh/bits/huge_val.h: Likewise.

        * sysdeps/generic/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
        * sysdeps/generic/bits/huge_valf.h: New file.
        * sysdeps/generic/bits/huge_vall.h: New file.
        * sysdeps/generic/bits/inf.h: New file.
        * sysdeps/ieee754/bits/huge_valf.h: New file.
        * sysdeps/ieee754/bits/inf.h: New file.
        * sysdeps/i386/bits/huge_val.h: Remove file.
        * sysdeps/i386/bits/huge_vall.h: New file.
        * sysdeps/ia64/bits/huge_val.h: Remove file.
        * sysdeps/ia64/bits/huge_vall.h: New file.
        * sysdeps/ieee754/ldbl-128/bits/huge_vall.h: New file.
        * sysdeps/m68k/bits/huge_val.h: Remove file.
        * sysdeps/m68k/bits/huge_vall.h: New file.
        * sysdeps/s390/bits/huge_val.h: Remove file.
        * sysdeps/sh/sh4/fpu/bits/huge_val.h: Remove file.
        * sysdeps/sparc/bits/huge_vall.h: New file.
        * sysdeps/sparc/sparc32/fpu/bits/huge_val.h: Remove file.
        * sysdeps/sparc/sparc64/fpu/bits/huge_val.h: Remove file.

        * sysdeps/ieee754/bits/nan.h (NAN): Use __builtin_nanf.
        * sysdeps/mips/bits/nan.h (NAN): Likewise.
This commit is contained in:
Richard Henderson 2004-03-15 21:44:10 +00:00
parent 399e12d470
commit 154a5429ac
8 changed files with 64 additions and 175 deletions

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. /* Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -33,18 +34,12 @@
typedef float float_t; typedef float float_t;
typedef double double_t; typedef double double_t;
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
# else # else
/* For `gcc -traditional', `float' expressions are evaluated as `double'. */ /* For `gcc -traditional', `float' expressions are evaluated as `double'. */
typedef double float_t; typedef double float_t;
typedef double double_t; typedef double double_t;
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
# endif # endif
# else # else
@ -52,9 +47,6 @@ typedef double double_t;
typedef double float_t; typedef double float_t;
typedef double double_t; typedef double double_t;
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
# endif # endif
/* The values returned by `ilogb' for 0 and NaN respectively. */ /* The values returned by `ilogb' for 0 and NaN respectively. */

View File

@ -1,7 +1,8 @@
/* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity). /* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
Used by <stdlib.h> and <math.h> functions for overflow. Used by <stdlib.h> and <math.h> functions for overflow.
ARM version. ARM version.
Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. Copyright (C) 1992, 95, 96, 97, 98, 99, 2000, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -23,25 +24,19 @@
# error "Never use <bits/huge_val.h> directly; include <math.h> instead." # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
#endif #endif
#include <features.h>
/* IEEE positive infinity (-HUGE_VAL is negative infinity). */ /* IEEE positive infinity (-HUGE_VAL is negative infinity). */
#ifdef __GNUC__ #if __GNUC_PREREQ(3,3)
# define HUGE_VAL (__builtin_huge_val())
# if __GNUC_PREREQ(2,96) #elif __GNUC_PREREQ(2,96)
# define HUGE_VAL (__extension__ 0x1.0p2047) # define HUGE_VAL (__extension__ 0x1.0p2047)
#elif defined __GNUC__
# else
# define HUGE_VAL \ # define HUGE_VAL \
(__extension__ \ (__extension__ \
((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
{ __l: 0x000000007ff00000ULL }).__d) { __l: 0x000000007ff00000ULL }).__d)
# endif
#else /* not GCC */ #else /* not GCC */
# include <endian.h> # include <endian.h>
@ -59,46 +54,3 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
# define HUGE_VAL (__huge_val.__d) # define HUGE_VAL (__huge_val.__d)
#endif /* GCC. */ #endif /* GCC. */
/* ISO C99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL. */
#ifdef __USE_ISOC99
# ifdef __GNUC__
# if __GNUC_PREREQ(2,96)
# define HUGE_VALF (__extension__ 0x1.0p255f)
# else
# define HUGE_VALF \
(__extension__ \
((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; }) \
{ __l: 0x7f800000UL }).__d)
# endif
# else /* not GCC */
typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
# if __BYTE_ORDER == __BIG_ENDIAN
# define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 }
# endif
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f }
# endif
static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
# define HUGE_VALF (__huge_valf.__f)
# endif /* GCC. */
/* Generally there is no separate `long double' format and it is the
same as `double'. */
# define HUGE_VALL HUGE_VAL
#endif /* __USE_ISOC99. */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. /* Copyright (C) 1999, 2000, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -29,10 +29,6 @@ typedef float float_t; /* `float' expressions are evaluated as
typedef double double_t; /* `double' expressions are evaluated as typedef double double_t; /* `double' expressions are evaluated as
`double'. */ `double'. */
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
/* The values returned by `ilogb' for 0 and NaN respectively. */ /* The values returned by `ilogb' for 0 and NaN respectively. */
# define FP_ILOGB0 (-2147483647) # define FP_ILOGB0 (-2147483647)
# define FP_ILOGBNAN (2147483647) # define FP_ILOGBNAN (2147483647)

View File

@ -1,92 +0,0 @@
/* `HUGE_VAL' constants for m68k (where it is infinity).
Used by <stdlib.h> and <math.h> functions for overflow.
Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _MATH_H
# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
#endif
#include <features.h>
#include <sys/cdefs.h>
/* IEEE positive infinity (-HUGE_VAL is negative infinity). */
#ifdef __GNUC__
# if __GNUC_PREREQ(2,96)
# define HUGE_VAL (__extension__ 0x1.0p2047)
# else
# define HUGE_VAL \
(__extension__ \
((union { unsigned long long __l; double __d; }) \
{ __l: 0x7ff0000000000000ULL }).__d)
# endif
#else /* not GCC */
static union { unsigned char __c[8]; double __d; } __huge_val =
{ { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } };
# define HUGE_VAL (__huge_val.__d)
#endif /* GCC. */
/* ISO C 99 extensions: (float) HUGE_VALF and (long double) HUGE_VALL. */
#ifdef __USE_ISOC99
# if __GNUC_PREREQ(2,96)
# define HUGE_VALF (__extension__ 0x1.0p255f)
# define HUGE_VALL (__extension__ 0x1.0p32767L)
# else
# ifdef __GNUC__
# define HUGE_VALF \
(__extension__ \
((union { unsigned long __l; float __f; }) \
{ __l: 0x7f800000UL }).__f)
# define HUGE_VALL \
(__extension__ \
((union { unsigned long __l[3]; long double __ld; }) \
{ __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld)
# else /* not GCC */
static union { unsigned char __c[4]; float __f; } __huge_valf =
{ { 0x7f, 0x80, 0, 0 } };
# define HUGE_VALF (__huge_valf.__f)
static union { unsigned char __c[12]; long double __ld; } __huge_vall =
{ { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } };
# define HUGE_VALL (__huge_vall.__ld)
# endif /* GCC. */
# endif /* GCC 2.95. */
#endif /* __USE_ISOC99. */

View File

@ -0,0 +1,43 @@
/* `HUGE_VALL' constant for m68k (where it is infinity).
Used by <stdlib.h> and <math.h> functions for overflow.
Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _MATH_H
# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
#endif
#if __GNUC_PREREQ(3,3)
# define HUGE_VALL (__builtin_huge_vall ())
#elif __GNUC_PREREQ(2,96)
# define HUGE_VALL (__extension__ 0x1.0p32767L)
#elif defined__GNUC__
# define HUGE_VALL \
(__extension__ \
((union { unsigned long __l[3]; long double __ld; }) \
{ __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld)
#else /* not GCC */
static union { unsigned char __c[12]; long double __ld; } __huge_vall =
{ { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } };
# define HUGE_VALL (__huge_vall.__ld)
#endif /* GCC 2.95. */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. /* Copyright (C) 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -31,9 +31,6 @@ typedef long double float_t; /* `float' expressions are evaluated as
typedef long double double_t; /* `double' expressions are evaluated as typedef long double double_t; /* `double' expressions are evaluated as
`long double'. */ `long double'. */
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
/* The values returned by `ilogb' for 0 and NaN respectively. */ /* The values returned by `ilogb' for 0 and NaN respectively. */
# define FP_ILOGB0 (-2147483647 - 1) # define FP_ILOGB0 (-2147483647 - 1)
# define FP_ILOGBNAN (2147483647) # define FP_ILOGBNAN (2147483647)

View File

@ -1,5 +1,6 @@
/* `NAN' constant for IEEE 754 machines. /* `NAN' constant for IEEE 754 machines.
Copyright (C) 1992, 1996, 1997, 1999, 2002 Free Software Foundation, Inc. Copyright (C) 1992, 1996, 1997, 1999, 2002, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,7 +28,11 @@
the definition of this open to implementations, and for MIPS the top the definition of this open to implementations, and for MIPS the top
bit of the mantissa must be SET to indicate a SNaN. */ bit of the mantissa must be SET to indicate a SNaN. */
#ifdef __GNUC__ #if __GNUC_PREREQ(3,3)
# define NAN (__builtin_nanf(""))
#elif defined __GNUC__
# define NAN \ # define NAN \
(__extension__ \ (__extension__ \

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003 /* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -31,10 +31,6 @@ typedef double float_t; /* `float' expressions are evaluated as
typedef double double_t; /* `double' expressions are evaluated as typedef double double_t; /* `double' expressions are evaluated as
`double'. */ `double'. */
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
/* The values returned by `ilogb' for 0 and NaN respectively. */ /* The values returned by `ilogb' for 0 and NaN respectively. */
# define FP_ILOGB0 (-2147483647) # define FP_ILOGB0 (-2147483647)
# define FP_ILOGBNAN 2147483647 # define FP_ILOGBNAN 2147483647