diff options
22 files changed, 99 insertions, 27 deletions
diff --git a/include/math.h b/include/math.h index a8f06082c..a7c69b084 100644 --- a/include/math.h +++ b/include/math.h @@ -135,7 +135,7 @@ __BEGIN_DECLS  # if (defined __STDC__ || defined __GNUC__) \ -     && (defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ || defined __LDBL_COMPAT) +     && (defined __NO_LONG_DOUBLE_MATH || defined __LDBL_COMPAT)  #  ifdef __LDBL_COMPAT  #   ifdef __USE_ISOC99 @@ -249,7 +249,7 @@ enum    };  /* Return number of classification appropriate for X.  */ -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define fpclassify(x) \       (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))  # else @@ -261,7 +261,7 @@ enum  # endif  /* Return nonzero value if sign of X is negative.  */ -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define signbit(x) \       (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))  # else @@ -273,7 +273,7 @@ enum  # endif  /* Return nonzero value if X is not +-Inf or NaN.  */ -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define isfinite(x) \       (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))  # else @@ -289,7 +289,7 @@ enum  /* Return nonzero value if X is a NaN.  We could use `fpclassify' but     we already have this functions `__isnan' and it is faster.  */ -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define isnan(x) \       (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))  # else @@ -301,7 +301,7 @@ enum  # endif  /* Return nonzero value is X is positive or negative infinity.  */ -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define isinf(x) \       (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))  # else diff --git a/include/tgmath.h b/include/tgmath.h index 2897697b6..fc9c9ffaf 100644 --- a/include/tgmath.h +++ b/include/tgmath.h @@ -36,7 +36,7 @@  #if __GNUC_PREREQ (2, 7) -# ifndef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# ifdef __NO_LONG_DOUBLE_MATH  #  define __tgml(fct) fct  # else  #  define __tgml(fct) fct ## l diff --git a/libc/sysdeps/linux/alpha/bits/mathdef.h b/libc/sysdeps/linux/alpha/bits/mathdef.h index cbfaf68e2..3b52ec7d5 100644 --- a/libc/sysdeps/linux/alpha/bits/mathdef.h +++ b/libc/sysdeps/linux/alpha/bits/mathdef.h @@ -78,3 +78,7 @@ typedef double double_t;  # endif /* GNUC before 3.4 */  #endif /* COMPLEX_H */ + +#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/alpha/bits/wordsize.h b/libc/sysdeps/linux/alpha/bits/wordsize.h index 029a7dfb2..22fc64109 100644 --- a/libc/sysdeps/linux/alpha/bits/wordsize.h +++ b/libc/sysdeps/linux/alpha/bits/wordsize.h @@ -18,13 +18,13 @@  #define __WORDSIZE	64 -#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL +#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL  /* Signal that we didn't used to have a `long double'. The changes all     the `long double' function variants to be redirects to the double     functions.  */  # define __LONG_DOUBLE_MATH_OPTIONAL	1  # ifndef __LONG_DOUBLE_128__ -#  undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH		1  # endif  #endif diff --git a/libc/sysdeps/linux/arm/bits/mathdef.h b/libc/sysdeps/linux/arm/bits/mathdef.h index 22722e37a..e013e74b7 100644 --- a/libc/sysdeps/linux/arm/bits/mathdef.h +++ b/libc/sysdeps/linux/arm/bits/mathdef.h @@ -34,3 +34,11 @@ typedef double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(2147483647)  #endif	/* ISO C99 */ + +#ifndef __NO_LONG_DOUBLE_MATH +/* Signal that we do not really have a `long double'.  This disables the +   declaration of all the `long double' function variants.  */ +/* XXX The FPA does support this but the patterns in GCC are currently +   turned off.  */ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/common/bits/mathdef.h b/libc/sysdeps/linux/common/bits/mathdef.h index 1927299f9..00c67241a 100644 --- a/libc/sysdeps/linux/common/bits/mathdef.h +++ b/libc/sysdeps/linux/common/bits/mathdef.h @@ -35,3 +35,9 @@ typedef double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	2147483647  #endif	/* ISO C99 */ + +#ifndef __NO_LONG_DOUBLE_MATH +/* Signal that we do not really have a `long double'.  The disables the +   declaration of all the `long double' function variants.  */ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/i386/bits/mathdef.h b/libc/sysdeps/linux/i386/bits/mathdef.h index ec42ed5df..a3786fc81 100644 --- a/libc/sysdeps/linux/i386/bits/mathdef.h +++ b/libc/sysdeps/linux/i386/bits/mathdef.h @@ -44,3 +44,7 @@ typedef long double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(-2147483647 - 1)  #endif	/* ISO C99 */ + +#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/ia64/bits/mathdef.h b/libc/sysdeps/linux/ia64/bits/mathdef.h index 3dc286022..5da23cc8a 100644 --- a/libc/sysdeps/linux/ia64/bits/mathdef.h +++ b/libc/sysdeps/linux/ia64/bits/mathdef.h @@ -35,3 +35,7 @@ typedef double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	2147483647  #endif	/* ISO C99 */ + +#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/m68k/bits/mathdef.h b/libc/sysdeps/linux/m68k/bits/mathdef.h index 65cf8d49f..a69e93089 100644 --- a/libc/sysdeps/linux/m68k/bits/mathdef.h +++ b/libc/sysdeps/linux/m68k/bits/mathdef.h @@ -36,3 +36,7 @@ typedef long double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(2147483647)  #endif	/* ISO C99 */ + +#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/mips/bits/mathdef.h b/libc/sysdeps/linux/mips/bits/mathdef.h index b741f6551..331da13a9 100644 --- a/libc/sysdeps/linux/mips/bits/mathdef.h +++ b/libc/sysdeps/linux/mips/bits/mathdef.h @@ -39,8 +39,10 @@ typedef double double_t;	/* `double' expressions are evaluated as  #endif	/* ISO C99 */ -#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && _MIPS_SIM == _ABIO32 +#if ! defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32  /* Signal that we do not really have a `long double'.  This disables the     declaration of all the `long double' function variants.  */ -# error defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ and _MIPS_SIM == _ABIO32 +# define __NO_LONG_DOUBLE_MATH	1 +#elif !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1  #endif diff --git a/libc/sysdeps/linux/nios/bits/mathdef.h b/libc/sysdeps/linux/nios/bits/mathdef.h index 22722e37a..e013e74b7 100644 --- a/libc/sysdeps/linux/nios/bits/mathdef.h +++ b/libc/sysdeps/linux/nios/bits/mathdef.h @@ -34,3 +34,11 @@ typedef double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(2147483647)  #endif	/* ISO C99 */ + +#ifndef __NO_LONG_DOUBLE_MATH +/* Signal that we do not really have a `long double'.  This disables the +   declaration of all the `long double' function variants.  */ +/* XXX The FPA does support this but the patterns in GCC are currently +   turned off.  */ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/nios2/bits/mathdef.h b/libc/sysdeps/linux/nios2/bits/mathdef.h index 22722e37a..e013e74b7 100644 --- a/libc/sysdeps/linux/nios2/bits/mathdef.h +++ b/libc/sysdeps/linux/nios2/bits/mathdef.h @@ -34,3 +34,11 @@ typedef double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(2147483647)  #endif	/* ISO C99 */ + +#ifndef __NO_LONG_DOUBLE_MATH +/* Signal that we do not really have a `long double'.  This disables the +   declaration of all the `long double' function variants.  */ +/* XXX The FPA does support this but the patterns in GCC are currently +   turned off.  */ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/powerpc/bits/mathdef.h b/libc/sysdeps/linux/powerpc/bits/mathdef.h index 81a46ddcd..f28bacece 100644 --- a/libc/sysdeps/linux/powerpc/bits/mathdef.h +++ b/libc/sysdeps/linux/powerpc/bits/mathdef.h @@ -65,11 +65,13 @@ typedef double double_t;  #endif	/* ISO C99 */ -#ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#ifndef __NO_LONG_DOUBLE_MATH  #include <bits/wordsize.h>  /* Signal that we do not really have a `long double'.  The disables the     declaration of all the `long double' function variants.  */  # if __WORDSIZE == 32 -#  undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH	1 +# elif !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH	1  # endif  /* __WORDSIZE == 32 */ -#endif  /* __UCLIBC_HAS_LONG_DOUBLE_MATH__ */ +#endif  /* __NO_LONG_DOUBLE_MATH */ diff --git a/libc/sysdeps/linux/powerpc/bits/wordsize.h b/libc/sysdeps/linux/powerpc/bits/wordsize.h index dc19246d7..cf934234f 100644 --- a/libc/sysdeps/linux/powerpc/bits/wordsize.h +++ b/libc/sysdeps/linux/powerpc/bits/wordsize.h @@ -7,13 +7,13 @@  # define __WORDSIZE	32  #endif -#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL +#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL  /* Signal the glibc ABI didn't used to have a `long double'.     The changes all the `long double' function variants to be redirects     to the double functions.  */  # define __LONG_DOUBLE_MATH_OPTIONAL   1  # ifndef __LONG_DOUBLE_128__ -#  undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH        1  # endif  #endif diff --git a/libc/sysdeps/linux/sh/bits/mathdef.h b/libc/sysdeps/linux/sh/bits/mathdef.h index c419fcd4a..2b8caf194 100644 --- a/libc/sysdeps/linux/sh/bits/mathdef.h +++ b/libc/sysdeps/linux/sh/bits/mathdef.h @@ -61,3 +61,9 @@ typedef double double_t;  # define FP_ILOGBNAN	0x7fffffff  #endif	/* ISO C99 */ + +#ifndef __NO_LONG_DOUBLE_MATH +/* Signal that we do not really have a `long double'.  The disables the +   declaration of all the `long double' function variants.  */ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/sparc/bits/mathdef.h b/libc/sysdeps/linux/sparc/bits/mathdef.h index b1a0d917c..7f9bbee81 100644 --- a/libc/sysdeps/linux/sparc/bits/mathdef.h +++ b/libc/sysdeps/linux/sparc/bits/mathdef.h @@ -57,13 +57,15 @@ typedef double double_t;  #endif	/* ISO C99 */ -#ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#ifndef __NO_LONG_DOUBLE_MATH  # if __WORDSIZE == 32  /* Signal that in 32bit ABI we do not really have a `long double'.     The disables the declaration of all the `long double' function     variants.  */ -#  undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH	1 +# elif !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  define __NO_LONG_DOUBLE_MATH	1  # endif  #endif diff --git a/libc/sysdeps/linux/sparc/bits/mathinline.h b/libc/sysdeps/linux/sparc/bits/mathinline.h index 66ca0473d..c774dea9b 100644 --- a/libc/sysdeps/linux/sparc/bits/mathinline.h +++ b/libc/sysdeps/linux/sparc/bits/mathinline.h @@ -37,7 +37,7 @@  # if __WORDSIZE == 32 -#  ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#  ifndef __NO_LONG_DOUBLE_MATH  #   define __unordered_cmp(x, y) \    (__extension__							      \ @@ -157,7 +157,7 @@ __NTH (__signbit (double __x))    return __u.__i[0] < 0;  } -#    ifdef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#    ifndef __NO_LONG_DOUBLE_MATH  __MATH_INLINE int  __NTH (__signbitl (long double __x))  { @@ -219,7 +219,7 @@ __NTH (sqrtl (long double __x))    _Qp_sqrt (&__r, &__x);    return __r;  } -#   elif defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#   elif !defined __NO_LONG_DOUBLE_MATH  __MATH_INLINE long double  sqrtl (long double __x) __THROW  { @@ -257,7 +257,7 @@ __ieee754_sqrtl (long double __x)    _Qp_sqrt(&__r, &__x);    return __r;  } -#   elif defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#   elif !defined __NO_LONG_DOUBLE_MATH  __MATH_INLINE long double  __ieee754_sqrtl (long double __x)  { diff --git a/libc/sysdeps/linux/sparc/bits/wordsize.h b/libc/sysdeps/linux/sparc/bits/wordsize.h index c8e5bfdea..c0e600ed5 100644 --- a/libc/sysdeps/linux/sparc/bits/wordsize.h +++ b/libc/sysdeps/linux/sparc/bits/wordsize.h @@ -6,7 +6,7 @@  # define __WORDSIZE	32  #endif -#if 0 /* uClibc: done in mathdefs.h: defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __LONG_DOUBLE_MATH_OPTIONAL*/ +#if 0 /* uClibc: done in mathdefs.h: !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL*/  # if __WORDSIZE == 32  /* Signal that in 32bit ABI we didn't used to have a `long double'. @@ -14,7 +14,7 @@     to the double functions.  */  #  define __LONG_DOUBLE_MATH_OPTIONAL   1  #  ifndef __LONG_DOUBLE_128__ -#   undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#   define __NO_LONG_DOUBLE_MATH        1  #  endif  # endif  #endif diff --git a/libc/sysdeps/linux/x86_64/bits/mathdef.h b/libc/sysdeps/linux/x86_64/bits/mathdef.h index 7b1618959..b0567e4d4 100644 --- a/libc/sysdeps/linux/x86_64/bits/mathdef.h +++ b/libc/sysdeps/linux/x86_64/bits/mathdef.h @@ -46,3 +46,7 @@ typedef long double double_t;	/* `double' expressions are evaluated as  # define FP_ILOGBNAN	(-2147483647 - 1)  #endif	/* ISO C99 */ + +#if !defined __NO_LONG_DOUBLE_MATH && !defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1 +#endif diff --git a/libc/sysdeps/linux/xtensa/bits/mathdef.h b/libc/sysdeps/linux/xtensa/bits/mathdef.h index 99a4a318d..0177fa9fc 100644 --- a/libc/sysdeps/linux/xtensa/bits/mathdef.h +++ b/libc/sysdeps/linux/xtensa/bits/mathdef.h @@ -36,8 +36,8 @@ typedef double double_t;	/* `double' expressions are evaluated as  #endif	/* ISO C99 */ -#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#ifndef __NO_LONG_DOUBLE_MATH  /* Signal that we do not really have a `long double'.  The disables the     declaration of all the `long double' function variants.  */ -# undef __UCLIBC_HAS_LONG_DOUBLE_MATH__ +# define __NO_LONG_DOUBLE_MATH	1  #endif diff --git a/libm/ldouble_wrappers.c b/libm/ldouble_wrappers.c index 61940cb12..c53b99773 100644 --- a/libm/ldouble_wrappers.c +++ b/libm/ldouble_wrappers.c @@ -116,6 +116,16 @@ long long func##l(long double x) \  }  #endif /* __i386__ && __OPTIMIZE__ */ +#if defined __NO_LONG_DOUBLE_MATH +# define int_WRAPPER_C99(func) /* not needed */ +# else +# define int_WRAPPER_C99(func) \ +int func##l(long double x) \ +{ \ +    return func((double) x); \ +} \ +libm_hidden_def(func##l) +#endif  /* Implement the following, as defined by SuSv3 */  #if 0 diff --git a/libm/nan.c b/libm/nan.c index ec221ea71..eee3b1cc4 100644 --- a/libm/nan.c +++ b/libm/nan.c @@ -45,7 +45,7 @@ float nanf (const char *tagp)  }  libm_hidden_def(nanf) -#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ +#if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __NO_LONG_DOUBLE_MATH  libm_hidden_proto(nanl)  long double nanl (const char *tagp)  {  | 
