* libc/include/math.h (INFINITY, NAN, FP_ILOGB0, FP_ILOGBNAN)
(MATH_ERRNO, MATH_ERREXCEPT, math_errhandling): Add macros required by POSIX. * libc/stdlib/ldtoa.c (USE_INFINITY): Rename from INFINITY, to avoid clash with <math.h>.
This commit is contained in:
parent
f65607751c
commit
895d76fed6
|
@ -1,5 +1,11 @@
|
|||
2007-05-16 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* libc/include/math.h (INFINITY, NAN, FP_ILOGB0, FP_ILOGBNAN)
|
||||
(MATH_ERRNO, MATH_ERREXCEPT, math_errhandling): Add macros
|
||||
required by POSIX.
|
||||
* libc/stdlib/ldtoa.c (USE_INFINITY): Rename from INFINITY, to
|
||||
avoid clash with <math.h>.
|
||||
|
||||
* libc/stdlib/wctomb_r.c (_wctomb_r): Avoid gcc warnings on cygwin.
|
||||
* libc/search/hash.c (__hash_open): Likewise.
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
|
@ -13,13 +12,13 @@ union __dmath
|
|||
__ULong i[2];
|
||||
double d;
|
||||
};
|
||||
|
||||
|
||||
union __fmath
|
||||
{
|
||||
__ULong i[1];
|
||||
float f;
|
||||
};
|
||||
|
||||
|
||||
union __ldmath
|
||||
{
|
||||
__ULong i[4];
|
||||
|
@ -32,23 +31,31 @@ union __ldmath
|
|||
|
||||
/* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */
|
||||
|
||||
#ifndef HUGE_VAL
|
||||
#define HUGE_VAL (__builtin_huge_val())
|
||||
#endif
|
||||
# ifndef HUGE_VAL
|
||||
# define HUGE_VAL (__builtin_huge_val())
|
||||
# endif
|
||||
|
||||
#ifndef HUGE_VALF
|
||||
#define HUGE_VALF (__builtin_huge_valf())
|
||||
#endif
|
||||
# ifndef HUGE_VALF
|
||||
# define HUGE_VALF (__builtin_huge_valf())
|
||||
# endif
|
||||
|
||||
#ifndef HUGE_VALL
|
||||
#define HUGE_VALL (__builtin_huge_vall())
|
||||
#endif
|
||||
# ifndef HUGE_VALL
|
||||
# define HUGE_VALL (__builtin_huge_vall())
|
||||
# endif
|
||||
|
||||
# ifndef INFINITY
|
||||
# define INFINITY (__builtin_inff())
|
||||
# endif
|
||||
|
||||
# ifndef NAN
|
||||
# define NAN (__builtin_nanf(""))
|
||||
# endif
|
||||
|
||||
#else /* !gcc >= 3.3 */
|
||||
|
||||
/* No builtins. Use floating-point unions instead. Declare as an array
|
||||
without bounds so no matter what small data support a port and/or
|
||||
library has, the reference will be via the general method for accessing
|
||||
/* No builtins. Use floating-point unions instead. Declare as an array
|
||||
without bounds so no matter what small data support a port and/or
|
||||
library has, the reference will be via the general method for accessing
|
||||
globals. */
|
||||
|
||||
#ifndef HUGE_VAL
|
||||
|
@ -118,6 +125,23 @@ typedef double double_t;
|
|||
#define FP_SUBNORMAL 3
|
||||
#define FP_NORMAL 4
|
||||
|
||||
#ifndef FP_ILOGB0
|
||||
# define FP_ILOGB0 (-INT_MAX)
|
||||
#endif
|
||||
#ifndef FP_ILOGBNAN
|
||||
# define FP_ILOGBNAN INT_MAX
|
||||
#endif
|
||||
|
||||
#ifndef MATH_ERRNO
|
||||
# define MATH_ERRNO 1
|
||||
#endif
|
||||
#ifndef MATH_ERREXCEPT
|
||||
# define MATH_ERREXCEPT 2
|
||||
#endif
|
||||
#ifndef math_errhandling
|
||||
# define math_errhandling MATH_ERRNO
|
||||
#endif
|
||||
|
||||
extern int __isinff (float x);
|
||||
extern int __isinfd (double x);
|
||||
extern int __isnanf (float x);
|
||||
|
@ -347,9 +371,9 @@ extern int *__signgam _PARAMS((void));
|
|||
/* We have a problem when using C++ since `exception' is a reserved
|
||||
name in C++. */
|
||||
#ifdef __cplusplus
|
||||
struct __exception
|
||||
struct __exception
|
||||
#else
|
||||
struct exception
|
||||
struct exception
|
||||
#endif
|
||||
{
|
||||
int type;
|
||||
|
@ -397,7 +421,7 @@ extern int matherr _PARAMS((struct exception *e));
|
|||
#define M_SQRT1_2 0.70710678118654752440
|
||||
#define M_LN2LO 1.9082149292705877000E-10
|
||||
#define M_LN2HI 6.9314718036912381649E-1
|
||||
#define M_SQRT3 1.73205080756887719000
|
||||
#define M_SQRT3 1.73205080756887719000
|
||||
#define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */
|
||||
#define M_LOG2_E 0.693147180559945309417
|
||||
#define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
/* Extended precision arithmetic functions for long double I/O.
|
||||
* This program has been placed in the public domain.
|
||||
*/
|
||||
|
@ -244,7 +243,7 @@ static char *ermsg[7] = {
|
|||
*
|
||||
* Exception flags are NOT fully supported.
|
||||
*
|
||||
* Define INFINITY in mconf.h for support of infinity; otherwise a
|
||||
* Define USE_INFINITY in mconf.h for support of infinity; otherwise a
|
||||
* saturation arithmetic is implemented.
|
||||
*
|
||||
* Define NANS for support of Not-a-Number items; otherwise the
|
||||
|
@ -381,12 +380,12 @@ typedef struct
|
|||
#define VOLATILE
|
||||
|
||||
#define NANS
|
||||
#define INFINITY
|
||||
#define USE_INFINITY
|
||||
|
||||
/* NaN's require infinity support. */
|
||||
#ifdef NANS
|
||||
#ifndef INFINITY
|
||||
#define INFINITY
|
||||
#define USE_INFINITY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -544,7 +543,7 @@ static void einfin(register short unsigned int *x, register LDPARMS *ldp)
|
|||
{
|
||||
register int i;
|
||||
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
for( i=0; i<NE-1; i++ )
|
||||
*x++ = 0;
|
||||
*x |= 32767;
|
||||
|
@ -596,7 +595,7 @@ else
|
|||
/* get the exponent */
|
||||
*q = *p--;
|
||||
*q++ &= 0x7fff; /* delete the sign bit */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( (*(q-1) & 0x7fff) == 0x7fff )
|
||||
{
|
||||
#ifdef NANS
|
||||
|
@ -639,7 +638,7 @@ if( i )
|
|||
*q-- = *p++ | 0x8000;
|
||||
else
|
||||
*q-- = *p++;
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( *(p-1) == 0x7fff )
|
||||
{
|
||||
#ifdef NANS
|
||||
|
@ -1173,7 +1172,7 @@ unsigned short r;
|
|||
j = enormlz( s );
|
||||
|
||||
/* a blank significand could mean either zero or infinity. */
|
||||
#ifndef INFINITY
|
||||
#ifndef USE_INFINITY
|
||||
if( j > NBITS )
|
||||
{
|
||||
ecleazs( s );
|
||||
|
@ -1181,7 +1180,7 @@ if( j > NBITS )
|
|||
}
|
||||
#endif
|
||||
exp -= j;
|
||||
#ifndef INFINITY
|
||||
#ifndef USE_INFINITY
|
||||
if( exp >= 32767L )
|
||||
goto overf;
|
||||
#else
|
||||
|
@ -1329,10 +1328,10 @@ mdfin:
|
|||
s[NI-1] = 0;
|
||||
if( exp >= 32767L )
|
||||
{
|
||||
#ifndef INFINITY
|
||||
#ifndef USE_INFINITY
|
||||
overf:
|
||||
#endif
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
s[1] = 32767;
|
||||
for( i=2; i<NI-1; i++ )
|
||||
s[i] = 0;
|
||||
|
@ -1405,7 +1404,7 @@ unsigned short ai[NI], bi[NI], ci[NI];
|
|||
int i, lost, j, k;
|
||||
long lt, lta, ltb;
|
||||
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( eisinf(a) )
|
||||
{
|
||||
emov(a,c);
|
||||
|
@ -1536,7 +1535,7 @@ if( ((ecmp(a,ezero) == 0) && (ecmp(b,ezero) == 0))
|
|||
}
|
||||
#endif
|
||||
/* Infinity over anything else is infinity. */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( eisinf(b) )
|
||||
{
|
||||
if( eisneg(a) ^ eisneg(b) )
|
||||
|
@ -1640,7 +1639,7 @@ if( (eisinf(a) && (ecmp(b,ezero) == 0))
|
|||
}
|
||||
#endif
|
||||
/* Infinity times anything else is infinity. */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( eisinf(a) || eisinf(b) )
|
||||
{
|
||||
if( eisneg(a) ^ eisneg(b) )
|
||||
|
@ -1719,7 +1718,7 @@ yy[0] = 0;
|
|||
if( r & 0x8000 )
|
||||
yy[0] = 0xffff;
|
||||
r &= 0x7fff;
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( r == 0x7fff )
|
||||
{
|
||||
#ifdef NANS
|
||||
|
@ -1865,7 +1864,7 @@ if((yy[NE-1] & 0x7fff) == 0 && (yy[NE-2] & 0x8000) == 0)
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
/* Point to the exponent field. */
|
||||
p = &yy[NE-1];
|
||||
if( (*p & 0x7fff) == 0x7fff )
|
||||
|
@ -1900,7 +1899,7 @@ if( (*p & 0x7fff) == 0x7fff )
|
|||
eneg(y);
|
||||
return;
|
||||
}
|
||||
#endif /* INFINITY */
|
||||
#endif /* USE_INFINITY */
|
||||
p = yy;
|
||||
q = y;
|
||||
for( i=0; i<NE; i++ )
|
||||
|
@ -1955,7 +1954,7 @@ else
|
|||
for( i=0; i<4; i++ )
|
||||
*q++ = *p++;
|
||||
#else
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
#ifdef IBMPC
|
||||
if (eiisinf (a))
|
||||
{
|
||||
|
@ -1967,7 +1966,7 @@ if (eiisinf (a))
|
|||
return;
|
||||
}
|
||||
#endif /* IBMPC */
|
||||
#endif /* INFINITY */
|
||||
#endif /* USE_INFINITY */
|
||||
for( i=0; i<4; i++ )
|
||||
*q-- = *p++;
|
||||
#endif
|
||||
|
@ -2010,7 +2009,7 @@ if( r & 0x8000 )
|
|||
yy[0] = 0xffff;
|
||||
yy[M] = (r & 0x0f) | 0x10;
|
||||
r &= ~0x800f; /* strip sign and 4 significand bits */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( r == 0x7ff0 )
|
||||
{
|
||||
#ifdef NANS
|
||||
|
@ -2120,7 +2119,7 @@ if( *p++ )
|
|||
i = *p++;
|
||||
if( i >= (unsigned int )2047 )
|
||||
{ /* Saturate at largest number less than infinity. */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
*y |= 0x7ff0;
|
||||
#ifdef IBMPC
|
||||
*(--y) = 0;
|
||||
|
@ -2132,7 +2131,7 @@ if( i >= (unsigned int )2047 )
|
|||
*y++ = 0;
|
||||
*y++ = 0;
|
||||
#endif /* IBMPC */
|
||||
#else /* !INFINITY */
|
||||
#else /* !USE_INFINITY */
|
||||
*y |= (unsigned short )0x7fef;
|
||||
#ifdef IBMPC
|
||||
*(--y) = 0xffff;
|
||||
|
@ -2144,7 +2143,7 @@ if( i >= (unsigned int )2047 )
|
|||
*y++ = 0xffff;
|
||||
*y++ = 0xffff;
|
||||
#endif
|
||||
#endif /* !INFINITY */
|
||||
#endif /* !USE_INFINITY */
|
||||
return;
|
||||
}
|
||||
if( i == 0 )
|
||||
|
@ -2202,7 +2201,7 @@ if( r & 0x8000 )
|
|||
yy[0] = 0xffff;
|
||||
yy[M] = (r & 0x7f) | 0200;
|
||||
r &= ~0x807f; /* strip sign and 7 significand bits */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
if( r == 0x7f80 )
|
||||
{
|
||||
#ifdef NANS
|
||||
|
@ -2285,7 +2284,7 @@ if( *p++ )
|
|||
i = *p++;
|
||||
if( i >= 255 )
|
||||
{ /* Saturate at largest number less than infinity. */
|
||||
#ifdef INFINITY
|
||||
#ifdef USE_INFINITY
|
||||
*y |= (unsigned short )0x7f80;
|
||||
#ifdef IBMPC
|
||||
*(--y) = 0;
|
||||
|
@ -2297,7 +2296,7 @@ if( i >= 255 )
|
|||
++y;
|
||||
*y = 0;
|
||||
#endif
|
||||
#else /* !INFINITY */
|
||||
#else /* !USE_INFINITY */
|
||||
*y |= (unsigned short )0x7f7f;
|
||||
#ifdef IBMPC
|
||||
*(--y) = 0xffff;
|
||||
|
@ -2309,7 +2308,7 @@ if( i >= 255 )
|
|||
++y;
|
||||
*y = 0xffff;
|
||||
#endif
|
||||
#endif /* !INFINITY */
|
||||
#endif /* !USE_INFINITY */
|
||||
return;
|
||||
}
|
||||
if( i == 0 )
|
||||
|
@ -3743,7 +3742,3 @@ switch( size )
|
|||
for (i=0; i < n; i++)
|
||||
*nan++ = *p++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue