From c95111995bc630a90687c5a4dc191332b1843403 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 18 Jul 2010 16:01:36 +0000 Subject: Add configure check for a bug with gcc soft floating-point and subnormals, to help debug issue 8265. --- configure | 41 ++++++++++++++++++++++++++++++++++++++++- configure.in | 20 ++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/configure b/configure index d48e8dc..e8a62ee 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 82090 . +# From configure.in Revision: 82746 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for python 3.2. # @@ -11641,6 +11641,45 @@ $as_echo "#define DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 1" >>confdefs.h fi +# Temporary check for a floating-point bug that appeared on ARM. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy subnormal floating-point" >&5 +$as_echo_n "checking for buggy subnormal floating-point... " >&6; } +if test "${ac_cv_buggy_subnormal+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + ac_cv_buggy_subnormal=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int main() { + double MIN = 2.2250738585072014e-308; /* 2**-1022 */ + double TINY = 4.9406564584124654e-324; /* 2**-1074 */ + double TRIPLE_TINY = 1.4821969375237396e-323; /* 3 * TINY */ + + double diff = MIN - TRIPLE_TINY; + double expected_diff = 2.2250738585071999e-308; + + return !(diff == expected_diff); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_buggy_subnormal=no +else + ac_cv_buggy_subnormal=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_subnormal" >&5 +$as_echo "$ac_cv_buggy_subnormal" >&6; } + # The short float repr introduced in Python 3.1 requires the # correctly-rounded string <-> double conversion functions from # Python/dtoa.c, which in turn require that the FPU uses 53-bit diff --git a/configure.in b/configure.in index 4a7e99a..69cd0e3 100644 --- a/configure.in +++ b/configure.in @@ -3334,6 +3334,26 @@ then in ARM mixed-endian order (byte order 45670123)]) fi +# Temporary check for a floating-point bug that appeared on ARM. +AC_MSG_CHECKING(for buggy subnormal floating-point) +AC_CACHE_VAL(ac_cv_buggy_subnormal, [ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +int main() { + double MIN = 2.2250738585072014e-308; /* 2**-1022 */ + double TINY = 4.9406564584124654e-324; /* 2**-1074 */ + double TRIPLE_TINY = 1.4821969375237396e-323; /* 3 * TINY */ + + double diff = MIN - TRIPLE_TINY; + double expected_diff = 2.2250738585071999e-308; + + return !(diff == expected_diff); +} +]])], +[ac_cv_buggy_subnormal=no], +[ac_cv_buggy_subnormal=yes], +[ac_cv_buggy_subnormal=no])]) +AC_MSG_RESULT($ac_cv_buggy_subnormal) + # The short float repr introduced in Python 3.1 requires the # correctly-rounded string <-> double conversion functions from # Python/dtoa.c, which in turn require that the FPU uses 53-bit -- cgit v0.12