long double and GLIBCPP_CHECK_MATH_SUPPORT
David Edelsohn
dje@watson.ibm.com
Wed Oct 25 19:18:00 GMT 2000
I discovered that strtold() test and use should be included in the
_GLIBCPP_USE_LONG_DOUBLE wrapper as well. Below is the revised patch
(with the block of code in the wrong location for ease of comparison) for
acinclude.m4 and an additional patch for include/bits/locale_facets.tcc
In locale_facets.tcc I chose to expand the existing test wrapping
the strtold() call as opposed to wrapping the long double versions
do_get() and do_put() completely. I do not know which is preferred or
what the standard requires.
David
Index: acinclude.m4
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/acinclude.m4,v
retrieving revision 1.71
diff -c -p -r1.71 acinclude.m4
*** acinclude.m4 2000/10/25 12:50:04 1.71
--- acinclude.m4 2000/10/26 02:08:36
*************** AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPP
*** 457,479 ****
dnl Test for builtin math functions.
dnl These are made in gcc/c-common.c
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
-
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
-
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
- GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
dnl There is, without a doubt, a more elegant way to have these
dnl names exported so that they won't be stripped out of acconfig.h by
dnl autoheader. I leave this as an exercise to somebody less frustrated
--- 457,482 ----
dnl Test for builtin math functions.
dnl These are made in gcc/c-common.c
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
+
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
+ if test x"$enable_long_double" = x"yes"; then
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
+ fi
+
+ GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
+
dnl There is, without a doubt, a more elegant way to have these
dnl names exported so that they won't be stripped out of acconfig.h by
dnl autoheader. I leave this as an exercise to somebody less frustrated
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 520,528 ****
ac_save_LIBS="$LIBS"
LIBS="$LIBS $libm"
- dnl Although not math functions, needed and for some reason checked here.
- AC_CHECK_FUNCS(strtof strtold)
-
dnl Check to see if certain C math functions exist.
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
--- 523,528 ----
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 559,594 ****
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
! dnl Check to see if basic C math functions have long double versions.
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
dnl Some runtimes have these functions with a preceding underscore. Please
dnl keep this sync'd with the one above. And if you add any new symbol,
dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
--- 559,602 ----
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
+
+ dnl Although not math function, needed and for some reason checked here.
+ AC_CHECK_FUNCS(strtof)
! if test x"$enable_long_double" = x"yes"; then
! dnl Check to see if basic C math functions have long double versions.
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
+ dnl Although not math functions, needed and for some reason checked here.
+ AC_CHECK_FUNCS(strtold)
+ fi
+
dnl Some runtimes have these functions with a preceding underscore. Please
dnl keep this sync'd with the one above. And if you add any new symbol,
dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 629,662 ****
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
! dnl Check to see if basic C math functions have long double versions.
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
LIBS="$ac_save_LIBS"
CXXFLAGS="$ac_save_CXXFLAGS"
--- 637,672 ----
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
! if test x"$enable_long_double" = x"yes"; then
! dnl Check to see if basic C math functions have long double versions.
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
! GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
! fi
LIBS="$ac_save_LIBS"
CXXFLAGS="$ac_save_CXXFLAGS"
*************** AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPP
*** 683,689 ****
dnl Currently this includes copysignl and atan2l, which should be
dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
USE_COMPLEX_LONG_DOUBLE=no
! if test x$ac_cv_func_atan2l = x"yes" \
&& test x$ac_cv_func_copysignl = x"yes"; then
USE_COMPLEX_LONG_DOUBLE=yes
AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
--- 693,700 ----
dnl Currently this includes copysignl and atan2l, which should be
dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
USE_COMPLEX_LONG_DOUBLE=no
! if test x"$enable_long_double" = x"yes" \
! && test x$ac_cv_func_atan2l = x"yes" \
&& test x$ac_cv_func_copysignl = x"yes"; then
USE_COMPLEX_LONG_DOUBLE=yes
AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
Index: include/bits/locale_facets.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/locale_facets.tcc,v
retrieving revision 1.3
diff -c -p -r1.3 locale_facets.tcc
*** locale_facets.tcc 2000/10/25 16:54:47 1.3
--- locale_facets.tcc 2000/10/26 02:08:38
*************** namespace std
*** 630,636 ****
return __beg;
}
! #if defined(_GLIBCPP_HAVE_STRTOLD) && !defined(__hpux)
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
--- 630,636 ----
return __beg;
}
! #if defined (_GLIBCPP_USE_LONG_DOUBLE) && defined(_GLIBCPP_HAVE_STRTOLD) && !defined(__hpux)
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
More information about the Libstdc++
mailing list