OSDN Git Service

honour NO_LONG_DOUBLE_MATH
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Thu, 12 Mar 2009 16:51:53 +0000 (16:51 +0000)
committerKhem Raj <raj.khem@gmail.com>
Sun, 30 Aug 2009 18:57:48 +0000 (11:57 -0700)
  This fixes compilation errors on hosts that turn off long double support
  for C99 like powerpc32.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
22 files changed:
include/math.h
include/tgmath.h
libc/sysdeps/linux/alpha/bits/mathdef.h
libc/sysdeps/linux/alpha/bits/wordsize.h
libc/sysdeps/linux/arm/bits/mathdef.h
libc/sysdeps/linux/common/bits/mathdef.h
libc/sysdeps/linux/i386/bits/mathdef.h
libc/sysdeps/linux/ia64/bits/mathdef.h
libc/sysdeps/linux/m68k/bits/mathdef.h
libc/sysdeps/linux/mips/bits/mathdef.h
libc/sysdeps/linux/nios/bits/mathdef.h
libc/sysdeps/linux/nios2/bits/mathdef.h
libc/sysdeps/linux/powerpc/bits/mathdef.h
libc/sysdeps/linux/powerpc/bits/wordsize.h
libc/sysdeps/linux/sh/bits/mathdef.h
libc/sysdeps/linux/sparc/bits/mathdef.h
libc/sysdeps/linux/sparc/bits/mathinline.h
libc/sysdeps/linux/sparc/bits/wordsize.h
libc/sysdeps/linux/x86_64/bits/mathdef.h
libc/sysdeps/linux/xtensa/bits/mathdef.h
libm/ldouble_wrappers.c
libm/nan.c

index a8f0608..a7c69b0 100644 (file)
@@ -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
index 2897697..fc9c9ff 100644 (file)
@@ -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
index cbfaf68..3b52ec7 100644 (file)
@@ -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
index 029a7df..22fc641 100644 (file)
 
 #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
index 22722e3..e013e74 100644 (file)
@@ -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
index 1927299..00c6724 100644 (file)
@@ -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
index ec42ed5..a3786fc 100644 (file)
@@ -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
index 3dc2860..5da23cc 100644 (file)
@@ -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
index 65cf8d4..a69e930 100644 (file)
@@ -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
index b741f65..331da13 100644 (file)
@@ -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
index 22722e3..e013e74 100644 (file)
@@ -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
index 22722e3..e013e74 100644 (file)
@@ -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
index 81a46dd..f28bace 100644 (file)
@@ -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 */
index dc19246..cf93423 100644 (file)
@@ -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
index c419fcd..2b8caf1 100644 (file)
@@ -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
index b1a0d91..7f9bbee 100644 (file)
@@ -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
index 66ca047..c774dea 100644 (file)
@@ -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)
 {
index c8e5bfd..c0e600e 100644 (file)
@@ -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
index 7b16189..b0567e4 100644 (file)
@@ -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
index 99a4a31..0177fa9 100644 (file)
@@ -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
index 61940cb..c53b997 100644 (file)
@@ -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
index ec221ea..eee3b1c 100644 (file)
@@ -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)
 {