From 35f31b6a983710aa9a2bd7e308d1567f326f3f5f Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Fri, 24 Apr 2009 22:49:55 +0000 Subject: [PATCH] 2009-04-24 Jeff johnston * configure.in: Add configuration test for long double equals dbl and set flag _LDBL_EQ_DBL if true. * configure: Regenerated. * newlib.hin: Add _LDBL_EQ_DBL flag. * libc/include/math.h: Use _LDBL_EQ_DBL flag instead of _HAVE_LDBL_MATH. * libc/include/stdlib.h: Use _LDBL_EQ_DBL flag instead of _HAVE_LDBL_STDLIB. * libc/common/local.h: Remove _LDBL_EQ_DBL flag setting. * libc/stdlib/local.h: Ditto. --- newlib/ChangeLog | 13 +++++++++++++ newlib/configure | 37 ++++++++++++++++++++++++++++++++++++ newlib/configure.in | 23 ++++++++++++++++++++++ newlib/libc/include/math.h | 8 ++++---- newlib/libc/include/stdlib.h | 6 +++--- newlib/libc/stdlib/local.h | 9 --------- newlib/libm/common/local.h | 10 +--------- newlib/newlib.hin | 3 +++ 8 files changed, 84 insertions(+), 25 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index c81f47d46..c7f3110d0 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,16 @@ +2009-04-24 Jeff johnston + + * configure.in: Add configuration test for long double equals dbl + and set flag _LDBL_EQ_DBL if true. + * configure: Regenerated. + * newlib.hin: Add _LDBL_EQ_DBL flag. + * libc/include/math.h: Use _LDBL_EQ_DBL flag instead of + _HAVE_LDBL_MATH. + * libc/include/stdlib.h: Use _LDBL_EQ_DBL flag instead of + _HAVE_LDBL_STDLIB. + * libc/common/local.h: Remove _LDBL_EQ_DBL flag setting. + * libc/stdlib/local.h: Ditto. + 2009-04-24 Joseph Myers * libc/include/stdint.h (UINTPTR_MAX): Define to __UINTPTR_MAX__ diff --git a/newlib/configure b/newlib/configure index d2c7588b5..1d9108d88 100755 --- a/newlib/configure +++ b/newlib/configure @@ -11900,6 +11900,43 @@ if test $libc_cv_initfinit_array = yes; then #define HAVE_INITFINI_ARRAY 1 _ACEOF +fi + +echo "$as_me:$LINENO: checking long double equals double" >&5 +echo $ECHO_N "checking long double equals double... $ECHO_C" >&6 +if test "${newlib_ldbl_eq_dbl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat > conftest.c < +#if DBL_MANT_DIG == LDBL_MANT_DIG && LDBL_MIN_EXP == DBL_MIN_EXP && \ + LDBL_MAX_EXP == DBL_MAX_EXP + #define _LDBL_EQ_DBL + #else + #error "LDBL != DBL" +#endif +EOF +if { ac_try='${CC} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c + -static -nostartfiles -nostdlib 1>&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } +then + newlib_ldbl_eq_dbl=yes; +else + newlib_ldbl_eq_dbl=no; +fi +rm -f conftest* +fi +echo "$as_me:$LINENO: result: $newlib_ldbl_eq_dbl" >&5 +echo "${ECHO_T}$newlib_ldbl_eq_dbl" >&6 +if test $newlib_ldbl_eq_dbl = yes; then + cat >>confdefs.h <<_ACEOF +#define _LDBL_EQ_DBL 1 +_ACEOF + fi ac_config_files="$ac_config_files Makefile" diff --git a/newlib/configure.in b/newlib/configure.in index 01ca6a3a3..9ff520100 100644 --- a/newlib/configure.in +++ b/newlib/configure.in @@ -395,6 +395,29 @@ if test $libc_cv_initfinit_array = yes; then AC_DEFINE_UNQUOTED(HAVE_INITFINI_ARRAY) fi +AC_CACHE_CHECK(long double equals double, + newlib_ldbl_eq_dbl, [dnl +cat > conftest.c < +#if DBL_MANT_DIG == LDBL_MANT_DIG && LDBL_MIN_EXP == DBL_MIN_EXP && \ + LDBL_MAX_EXP == DBL_MAX_EXP + #define _LDBL_EQ_DBL + #else + #error "LDBL != DBL" +#endif +EOF +if AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c + -static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD]) +then + newlib_ldbl_eq_dbl=yes; +else + newlib_ldbl_eq_dbl=no; +fi +rm -f conftest*]) +if test $newlib_ldbl_eq_dbl = yes; then + AC_DEFINE_UNQUOTED(_LDBL_EQ_DBL) +fi + AC_CONFIG_FILES([Makefile], [if test -n "$CONFIG_FILES"; then unset ac_file diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index 87b2626b5..3efdb3675 100644 --- a/newlib/libc/include/math.h +++ b/newlib/libc/include/math.h @@ -334,8 +334,8 @@ extern float log2f _PARAMS((float)); extern float hypotf _PARAMS((float, float)); #endif /* ! defined (_REENT_ONLY) */ -/* On platforms where long double math functions are supported. */ -#ifdef _HAVE_LDBL_MATH +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL /* Reentrant ANSI C functions. */ #ifndef __math_68881 extern long double atanl _PARAMS((long double)); @@ -400,14 +400,14 @@ extern long double lgammal _PARAMS((long double)); extern long double erfl _PARAMS((long double)); extern long double erfcl _PARAMS((long double)); #endif /* ! defined (_REENT_ONLY) */ -#else /* !_HAVE_LDBL_MATH */ +#else /* !_LDBL_EQ_DBL */ #ifdef __i386__ /* Other long double precision functions. */ extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); extern long int lrintl _PARAMS((_LONG_DOUBLE)); extern _LONG_LONG_TYPE llrintl _PARAMS((_LONG_DOUBLE)); #endif /* __i386__ */ -#endif /* !_HAVE_LDBL_MATH */ +#endif /* !_LDBL_EQ_DBL */ #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h index 7dfb77983..8f7d31e18 100644 --- a/newlib/libc/include/stdlib.h +++ b/newlib/libc/include/stdlib.h @@ -199,11 +199,11 @@ int _EXFUN(_system_r,(struct _reent *, const char *)); _VOID _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *)); -/* On platforms where long double stdlib functions are supported. */ -#ifdef _HAVE_LDBL_STDLIB +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL extern long double strtold (const char *, char **); extern long double wcstold (const wchar_t *, wchar_t **); -#endif /* _HAVE_LDBL_STDLIB */ +#endif /* _LDBL_EQ_DBL */ _END_STD_C diff --git a/newlib/libc/stdlib/local.h b/newlib/libc/stdlib/local.h index 3e8eb02c6..703d70eed 100644 --- a/newlib/libc/stdlib/local.h +++ b/newlib/libc/stdlib/local.h @@ -63,13 +63,4 @@ int __iso_8859_index (const char *); extern wchar_t __cp_conv[12][0x80]; int __cp_index (const char *); -#include - -/* Check if long double is as wide as double. */ -#if (!defined(__STRICT_ANSI__) || __STDC_VERSION__ > 199901L || \ - defined(__cplusplus)) && defined(LDBL_MANT_DIG) && \ - (DBL_MANT_DIG == LDBL_MANT_DIG && LDBL_MIN_EXP == DBL_MIN_EXP && \ - LDBL_MAX_EXP == DBL_MAX_EXP) - #define _LDBL_EQ_DBL -#endif #endif diff --git a/newlib/libm/common/local.h b/newlib/libm/common/local.h index 9e32afacb..8461d0215 100644 --- a/newlib/libm/common/local.h +++ b/newlib/libm/common/local.h @@ -1,9 +1 @@ -#include - -/* Check if long double is as wide as double. */ -#if (!defined(__STRICT_ANSI__) || __STDC_VERSION__ > 199901L || \ - defined(__cplusplus)) && defined(LDBL_MANT_DIG) && \ - (DBL_MANT_DIG == LDBL_MANT_DIG && LDBL_MIN_EXP == DBL_MIN_EXP && \ - LDBL_MAX_EXP == DBL_MAX_EXP) - #define _LDBL_EQ_DBL -#endif +/* placeholder for future usage. */ diff --git a/newlib/newlib.hin b/newlib/newlib.hin index b643411e9..f7afdebb7 100644 --- a/newlib/newlib.hin +++ b/newlib/newlib.hin @@ -46,6 +46,9 @@ functions. */ #undef _ATEXIT_DYNAMIC_ALLOC +/* True if long double supported and it is equal to double. */ +#undef _LDBL_EQ_DBL + /* * Iconv encodings enabled ("to" direction) */