AC_DEFUN([gl_FUNC_ISNAN_NO_LIBM],
[
- AC_CHECK_FUNC([isnan],
- [gl_cv_func_isnan_no_libm=yes],
- [gl_cv_func_isnan_no_libm=no])
+ AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
+ [gl_cv_func_isnan_no_libm],
+ [
+ AC_TRY_LINK([#include <math.h>
+ double x;],
+ [return isnan (x);],
+ [gl_cv_func_isnan_no_libm=yes],
+ [gl_cv_func_isnan_no_libm=no])
+ ])
if test $gl_cv_func_isnan_no_libm = yes; then
AC_DEFINE([HAVE_ISNAN_IN_LIBC], 1,
- [Define if the isnan() function is available in libc.])
+ [Define if the isnan(double) function is available in libc.])
else
AC_LIBOBJ([isnan])
gl_DOUBLE_EXPONENT_LOCATION
[gl_cv_cc_double_expbit0=`cat conftest.out`],
[gl_cv_cc_double_expbit0="unknown"],
[
- dnl On ARM, integer types are stored in little-endian byte order,
- dnl but floats are stored in big-endian word order.
+ dnl On ARM, there are two 'double' floating-point formats, used by
+ dnl different sets of instructions: The older FPA instructions assume
+ dnl that they are stored in big-endian word order, while the words
+ dnl (like integer types) are stored in little-endian byte order.
+ dnl The newer VFP instructions assume little-endian order consistenly.
AC_EGREP_CPP([mixed_endianness], [
#if defined arm || defined __arm || defined __arm__
mixed_endianness
#endif
],
- [gl_cv_cc_double_expbit0="word 0 bit 20"],
+ [gl_cv_cc_double_expbit0="unknown"],
[
AC_C_BIGENDIAN(
[gl_cv_cc_double_expbit0="word 0 bit 20"],