mirror of git://gcc.gnu.org/git/gcc.git
acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_ISFINITE, [...]): Remove.
* acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_ISFINITE, LIBGFOR_CHECK_FOR_BROKEN_ISNAN, LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY): Remove. * configure.ac: Remove above checks. * libgfortran.h: Define isnan, isinf, isfinite, isnormal and signbit in terms of the respective built-ins. * io/write_float.def (WRITE_FLOAT): Use signbit() instead of __builtin_signbit(). * intrinsics/c99_functions.c (tgamma): Use isnan() instead of __builtin_isnan(). * config.h.in: Regenerate. * configure: Regenerate. From-SVN: r164119
This commit is contained in:
parent
82916e7e24
commit
b1012ca4be
|
@ -1,3 +1,18 @@
|
||||||
|
2010-09-09 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||||
|
|
||||||
|
* acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_ISFINITE,
|
||||||
|
LIBGFOR_CHECK_FOR_BROKEN_ISNAN,
|
||||||
|
LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY): Remove.
|
||||||
|
* configure.ac: Remove above checks.
|
||||||
|
* libgfortran.h: Define isnan, isinf, isfinite, isnormal and
|
||||||
|
signbit in terms of the respective built-ins.
|
||||||
|
* io/write_float.def (WRITE_FLOAT): Use signbit() instead of
|
||||||
|
__builtin_signbit().
|
||||||
|
* intrinsics/c99_functions.c (tgamma): Use isnan() instead of
|
||||||
|
__builtin_isnan().
|
||||||
|
* config.h.in: Regenerate.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
2010-09-06 Tobias Burnus <burnus@net-b.de>
|
2010-09-06 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/38282
|
PR fortran/38282
|
||||||
|
|
|
@ -196,119 +196,6 @@ if test x"$libgfor_cv_have_crlf" = xyes; then
|
||||||
AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.])
|
AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.])
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
dnl Check whether isfinite is broken.
|
|
||||||
dnl The most common problem is that it does not work on long doubles.
|
|
||||||
AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISFINITE], [
|
|
||||||
AC_CACHE_CHECK([whether isfinite is broken],
|
|
||||||
libgfor_cv_have_broken_isfinite, [
|
|
||||||
libgfor_check_for_broken_isfinite_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef isfinite
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
if (!isfinite(LDBL_MAX)) return 1;
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
if (!isfinite(DBL_MAX)) return 1;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}], libgfor_cv_have_broken_isfinite=no, libgfor_cv_have_broken_isfinite=yes, [
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_isfinite=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_isfinite=no ;;
|
|
||||||
esac])]
|
|
||||||
LIBS=$libgfor_check_for_broken_isfinite_save_LIBS)
|
|
||||||
if test x"$libgfor_cv_have_broken_isfinite" = xyes; then
|
|
||||||
AC_DEFINE(HAVE_BROKEN_ISFINITE, 1, [Define if isfinite is broken.])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl Check whether isnan is broken.
|
|
||||||
dnl The most common problem is that it does not work on long doubles.
|
|
||||||
AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISNAN], [
|
|
||||||
AC_CACHE_CHECK([whether isnan is broken],
|
|
||||||
libgfor_cv_have_broken_isnan, [
|
|
||||||
libgfor_check_for_broken_isnan_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef isnan
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
{
|
|
||||||
long double x;
|
|
||||||
x = __builtin_nanl ("");
|
|
||||||
if (!isnan(x)) return 1;
|
|
||||||
if (isnan(LDBL_MAX)) return 1;
|
|
||||||
#ifdef NAN
|
|
||||||
x = (long double) NAN;
|
|
||||||
if (!isnan(x)) return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
{
|
|
||||||
double y;
|
|
||||||
y = __builtin_nan ("");
|
|
||||||
if (!isnan(y)) return 1;
|
|
||||||
if (isnan(DBL_MAX)) return 1;
|
|
||||||
#ifdef NAN
|
|
||||||
y = (double) NAN;
|
|
||||||
if (!isnan(y)) return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}], libgfor_cv_have_broken_isnan=no, libgfor_cv_have_broken_isnan=yes, [
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_isnan=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_isnan=no ;;
|
|
||||||
esac])]
|
|
||||||
LIBS=$libgfor_check_for_broken_isnan_save_LIBS)
|
|
||||||
if test x"$libgfor_cv_have_broken_isnan" = xyes; then
|
|
||||||
AC_DEFINE(HAVE_BROKEN_ISNAN, 1, [Define if isnan is broken.])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl Check whether fpclassify is broken.
|
|
||||||
dnl The most common problem is that it does not work on long doubles.
|
|
||||||
AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY], [
|
|
||||||
AC_CACHE_CHECK([whether fpclassify is broken],
|
|
||||||
libgfor_cv_have_broken_fpclassify, [
|
|
||||||
libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef fpclassify
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
if (fpclassify(LDBL_MAX) == FP_NAN
|
|
||||||
|| fpclassify(LDBL_MAX) == FP_INFINITE) return 1;
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
if (fpclassify(DBL_MAX) == FP_NAN
|
|
||||||
|| fpclassify(DBL_MAX) == FP_INFINITE) return 1;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}], libgfor_cv_have_broken_fpclassify=no, libgfor_cv_have_broken_fpclassify=yes, [
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_fpclassify=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_fpclassify=no ;;
|
|
||||||
esac])]
|
|
||||||
LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS)
|
|
||||||
if test x"$libgfor_cv_have_broken_fpclassify" = xyes; then
|
|
||||||
AC_DEFINE(HAVE_BROKEN_FPCLASSIFY, 1, [Define if fpclassify is broken.])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl Check whether the st_ino and st_dev stat fields taken together uniquely
|
dnl Check whether the st_ino and st_dev stat fields taken together uniquely
|
||||||
dnl identify the file within the system. This is should be true for POSIX
|
dnl identify the file within the system. This is should be true for POSIX
|
||||||
dnl systems; it is known to be false on mingw32.
|
dnl systems; it is known to be false on mingw32.
|
||||||
|
|
|
@ -87,15 +87,6 @@
|
||||||
/* Define to 1 if you have the `backtrace_symbols' function. */
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
#undef HAVE_BACKTRACE_SYMBOLS
|
#undef HAVE_BACKTRACE_SYMBOLS
|
||||||
|
|
||||||
/* Define if fpclassify is broken. */
|
|
||||||
#undef HAVE_BROKEN_FPCLASSIFY
|
|
||||||
|
|
||||||
/* Define if isfinite is broken. */
|
|
||||||
#undef HAVE_BROKEN_ISFINITE
|
|
||||||
|
|
||||||
/* Define if isnan is broken. */
|
|
||||||
#undef HAVE_BROKEN_ISNAN
|
|
||||||
|
|
||||||
/* Define if powf is broken. */
|
/* Define if powf is broken. */
|
||||||
#undef HAVE_BROKEN_POWF
|
#undef HAVE_BROKEN_POWF
|
||||||
|
|
||||||
|
|
|
@ -24162,188 +24162,6 @@ $as_echo "#define HAVE_CLOG 1" >>confdefs.h
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Check for a isfinite macro that works on long doubles.
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isfinite is broken" >&5
|
|
||||||
$as_echo_n "checking whether isfinite is broken... " >&6; }
|
|
||||||
if test "${libgfor_cv_have_broken_isfinite+set}" = set; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
|
|
||||||
libgfor_check_for_broken_isfinite_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
if test "$cross_compiling" = yes; then :
|
|
||||||
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_isfinite=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_isfinite=no ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef isfinite
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
if (!isfinite(LDBL_MAX)) return 1;
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
if (!isfinite(DBL_MAX)) return 1;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
libgfor_cv_have_broken_isfinite=no
|
|
||||||
else
|
|
||||||
libgfor_cv_have_broken_isfinite=yes
|
|
||||||
fi
|
|
||||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
LIBS=$libgfor_check_for_broken_isfinite_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_broken_isfinite" >&5
|
|
||||||
$as_echo "$libgfor_cv_have_broken_isfinite" >&6; }
|
|
||||||
if test x"$libgfor_cv_have_broken_isfinite" = xyes; then
|
|
||||||
|
|
||||||
$as_echo "#define HAVE_BROKEN_ISFINITE 1" >>confdefs.h
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check for a isnan macro that works on long doubles.
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan is broken" >&5
|
|
||||||
$as_echo_n "checking whether isnan is broken... " >&6; }
|
|
||||||
if test "${libgfor_cv_have_broken_isnan+set}" = set; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
|
|
||||||
libgfor_check_for_broken_isnan_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
if test "$cross_compiling" = yes; then :
|
|
||||||
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_isnan=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_isnan=no ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef isnan
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
{
|
|
||||||
long double x;
|
|
||||||
x = __builtin_nanl ("");
|
|
||||||
if (!isnan(x)) return 1;
|
|
||||||
if (isnan(LDBL_MAX)) return 1;
|
|
||||||
#ifdef NAN
|
|
||||||
x = (long double) NAN;
|
|
||||||
if (!isnan(x)) return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
{
|
|
||||||
double y;
|
|
||||||
y = __builtin_nan ("");
|
|
||||||
if (!isnan(y)) return 1;
|
|
||||||
if (isnan(DBL_MAX)) return 1;
|
|
||||||
#ifdef NAN
|
|
||||||
y = (double) NAN;
|
|
||||||
if (!isnan(y)) return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
libgfor_cv_have_broken_isnan=no
|
|
||||||
else
|
|
||||||
libgfor_cv_have_broken_isnan=yes
|
|
||||||
fi
|
|
||||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
LIBS=$libgfor_check_for_broken_isnan_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_broken_isnan" >&5
|
|
||||||
$as_echo "$libgfor_cv_have_broken_isnan" >&6; }
|
|
||||||
if test x"$libgfor_cv_have_broken_isnan" = xyes; then
|
|
||||||
|
|
||||||
$as_echo "#define HAVE_BROKEN_ISNAN 1" >>confdefs.h
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check for a fpclassify macro that works on long doubles.
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fpclassify is broken" >&5
|
|
||||||
$as_echo_n "checking whether fpclassify is broken... " >&6; }
|
|
||||||
if test "${libgfor_cv_have_broken_fpclassify+set}" = set; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
|
|
||||||
libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lm"
|
|
||||||
if test "$cross_compiling" = yes; then :
|
|
||||||
|
|
||||||
case "${target}" in
|
|
||||||
hppa*-*-hpux*) libgfor_cv_have_broken_fpclassify=yes ;;
|
|
||||||
*) libgfor_cv_have_broken_fpclassify=no ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <float.h>
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef fpclassify
|
|
||||||
#ifdef LDBL_MAX
|
|
||||||
if (fpclassify(LDBL_MAX) == FP_NAN
|
|
||||||
|| fpclassify(LDBL_MAX) == FP_INFINITE) return 1;
|
|
||||||
#endif
|
|
||||||
#ifdef DBL_MAX
|
|
||||||
if (fpclassify(DBL_MAX) == FP_NAN
|
|
||||||
|| fpclassify(DBL_MAX) == FP_INFINITE) return 1;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
libgfor_cv_have_broken_fpclassify=no
|
|
||||||
else
|
|
||||||
libgfor_cv_have_broken_fpclassify=yes
|
|
||||||
fi
|
|
||||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_broken_fpclassify" >&5
|
|
||||||
$as_echo "$libgfor_cv_have_broken_fpclassify" >&6; }
|
|
||||||
if test x"$libgfor_cv_have_broken_fpclassify" = xyes; then
|
|
||||||
|
|
||||||
$as_echo "#define HAVE_BROKEN_FPCLASSIFY 1" >>confdefs.h
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check whether the system has a working stat()
|
# Check whether the system has a working stat()
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target stat is reliable" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target stat is reliable" >&5
|
||||||
|
|
|
@ -450,15 +450,6 @@ AC_CHECK_LIB([m],[catanl],[AC_DEFINE([HAVE_CATANL],[1],[libm includes catanl])])
|
||||||
# On AIX, clog is present in libm as __clog
|
# On AIX, clog is present in libm as __clog
|
||||||
AC_CHECK_LIB([m],[__clog],[AC_DEFINE([HAVE_CLOG],[1],[libm includes clog])])
|
AC_CHECK_LIB([m],[__clog],[AC_DEFINE([HAVE_CLOG],[1],[libm includes clog])])
|
||||||
|
|
||||||
# Check for a isfinite macro that works on long doubles.
|
|
||||||
LIBGFOR_CHECK_FOR_BROKEN_ISFINITE
|
|
||||||
|
|
||||||
# Check for a isnan macro that works on long doubles.
|
|
||||||
LIBGFOR_CHECK_FOR_BROKEN_ISNAN
|
|
||||||
|
|
||||||
# Check for a fpclassify macro that works on long doubles.
|
|
||||||
LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY
|
|
||||||
|
|
||||||
# Check whether the system has a working stat()
|
# Check whether the system has a working stat()
|
||||||
LIBGFOR_CHECK_WORKING_STAT
|
LIBGFOR_CHECK_WORKING_STAT
|
||||||
|
|
||||||
|
|
|
@ -558,7 +558,6 @@ powf (float x, float y)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note that if fpclassify is not defined, then NaN is not handled */
|
|
||||||
|
|
||||||
/* Algorithm by Steven G. Kargl. */
|
/* Algorithm by Steven G. Kargl. */
|
||||||
|
|
||||||
|
@ -1854,7 +1853,7 @@ tgamma (double x)
|
||||||
n = 0;
|
n = 0;
|
||||||
y = x;
|
y = x;
|
||||||
|
|
||||||
if (__builtin_isnan (x))
|
if (isnan (x))
|
||||||
return x;
|
return x;
|
||||||
|
|
||||||
if (y <= 0)
|
if (y <= 0)
|
||||||
|
|
|
@ -977,7 +977,7 @@ sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
|
||||||
{\
|
{\
|
||||||
GFC_REAL_ ## x tmp;\
|
GFC_REAL_ ## x tmp;\
|
||||||
tmp = * (GFC_REAL_ ## x *)source;\
|
tmp = * (GFC_REAL_ ## x *)source;\
|
||||||
sign_bit = __builtin_signbit (tmp);\
|
sign_bit = signbit (tmp);\
|
||||||
if (!isfinite (tmp))\
|
if (!isfinite (tmp))\
|
||||||
{ \
|
{ \
|
||||||
write_infnan (dtp, f, isnan (tmp), sign_bit);\
|
write_infnan (dtp, f, isnan (tmp), sign_bit);\
|
||||||
|
|
|
@ -221,42 +221,24 @@ extern int __mingw_snprintf (char *, size_t, const char *, ...)
|
||||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The isfinite macro is only available with C99, but some non-C99
|
/* The C99 classification macros isfinite, isinf, isnan, isnormal
|
||||||
systems still provide fpclassify, and there is a `finite' function
|
and signbit are broken or inconsistent on quite a few targets.
|
||||||
in BSD.
|
So, we use GCC's builtins instead.
|
||||||
|
|
||||||
Also, isfinite is broken on Cygwin.
|
Another advantage for GCC's builtins for these type-generic macros
|
||||||
|
is that it handles floating-point types that the system headers
|
||||||
|
may not support (like __float128). */
|
||||||
|
|
||||||
When isfinite is not available, try to use one of the
|
|
||||||
alternatives, or bail out. */
|
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_ISFINITE) || defined(__CYGWIN__)
|
|
||||||
#undef isfinite
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_BROKEN_ISNAN)
|
|
||||||
#undef isnan
|
#undef isnan
|
||||||
#endif
|
#define isnan(x) __builtin_isnan(x)
|
||||||
|
#undef isfinite
|
||||||
#if defined(HAVE_BROKEN_FPCLASSIFY)
|
#define isfinite(x) __builtin_isfinite(x)
|
||||||
#undef fpclassify
|
#undef isinf
|
||||||
#endif
|
#define isinf(x) __builtin_isinf(x)
|
||||||
|
#undef isnormal
|
||||||
#if !defined(isfinite)
|
#define isnormal(x) __builtin_isnormal(x)
|
||||||
#if !defined(fpclassify)
|
#undef signbit
|
||||||
#define isfinite(x) ((x) - (x) == 0)
|
#define signbit(x) __builtin_signbit(x)
|
||||||
#else
|
|
||||||
#define isfinite(x) (fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE)
|
|
||||||
#endif /* !defined(fpclassify) */
|
|
||||||
#endif /* !defined(isfinite) */
|
|
||||||
|
|
||||||
#if !defined(isnan)
|
|
||||||
#if !defined(fpclassify)
|
|
||||||
#define isnan(x) ((x) != (x))
|
|
||||||
#else
|
|
||||||
#define isnan(x) (fpclassify(x) == FP_NAN)
|
|
||||||
#endif /* !defined(fpclassify) */
|
|
||||||
#endif /* !defined(isfinite) */
|
|
||||||
|
|
||||||
/* TODO: find the C99 version of these an move into above ifdef. */
|
/* TODO: find the C99 version of these an move into above ifdef. */
|
||||||
#define REALPART(z) (__real__(z))
|
#define REALPART(z) (__real__(z))
|
||||||
|
|
Loading…
Reference in New Issue