summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure76
-rw-r--r--configure.in47
2 files changed, 115 insertions, 8 deletions
diff --git a/configure b/configure
index d1b676a..4939826 100755
--- a/configure
+++ b/configure
@@ -33384,8 +33384,8 @@ else
echo "${ECHO_T}no" >&6
fi
-echo "$as_me:$LINENO: checking if accurately converting floating-point to unsigned long long values works" >&5
-echo $ECHO_N "checking if accurately converting floating-point to unsigned long long values works... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking if accurately roundup converting floating-point to unsigned long long values" >&5
+echo $ECHO_N "checking if accurately roundup converting floating-point to unsigned long long values... $ECHO_C" >&6
if test "${hdf5_cv_fp_to_ullong_bottom_bit_works+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -33401,7 +33401,7 @@ else
int main(void)
{
- float f = 111.60;
+ float f = 111.60;
double d = 222.55;
unsigned long long l1 = (unsigned long long)f;
unsigned long long l2 = (unsigned long long)d;
@@ -33454,6 +33454,76 @@ else
echo "${ECHO_T}no" >&6
fi
+echo "$as_me:$LINENO: checking if right maximum converting floating-point to unsigned long long values" >&5
+echo $ECHO_N "checking if right maximum converting floating-point to unsigned long long values... $ECHO_C" >&6
+
+if test "${hdf5_cv_fp_to_ullong_right_maximum+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+ int main(void)
+ {
+ float f = 9701917572145405952.00f;
+ double d = 9701917572145405952.00;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d;
+ unsigned long long l3 = 0x7fffffffffffffffLLU;
+ int ret = 0;
+
+ if(l1 <= l3 || l2 <= l3)
+ ret = 1;
+
+done:
+ exit(ret);
+ }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (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
+ hdf5_cv_fp_to_ullong_right_maximum=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+hdf5_cv_fp_to_ullong_right_maximum=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+
+
+if test ${hdf5_cv_fp_to_ullong_right_maximum} = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define FP_TO_ULLONG_RIGHT_MAXIMUM 1
+_ACEOF
+
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
echo "$as_me:$LINENO: checking if compiling unsigned long long to floating-point typecasts work" >&5
echo $ECHO_N "checking if compiling unsigned long long to floating-point typecasts work... $ECHO_C" >&6
if test "${hdf5_cv_ullong_to_fp_cast_works+set}" = set; then
diff --git a/configure.in b/configure.in
index 905f1ee..b42878d 100644
--- a/configure.in
+++ b/configure.in
@@ -2471,21 +2471,21 @@ dnl (This flag should be set for all machines, except for PGI compiler
dnl where round-up happens when the fraction of float-point value is greater
dnl than 0.5.
dnl
-AC_MSG_CHECKING([if accurately converting floating-point to unsigned long long values works])
+AC_MSG_CHECKING([if accurately roundup converting floating-point to unsigned long long values])
AC_CACHE_VAL([hdf5_cv_fp_to_ullong_bottom_bit_works],
[AC_TRY_RUN([
int main(void)
{
- float f = 111.60;
+ float f = 111.60;
double d = 222.55;
unsigned long long l1 = (unsigned long long)f;
unsigned long long l2 = (unsigned long long)d;
int ret = 0;
- if(l1 == 112)
+ if(l1 == 112)
ret = 1;
- if(l2 == 223)
+ if(l2 == 223)
ret = 1;
done:
@@ -2495,13 +2495,50 @@ done:
if test ${hdf5_cv_fp_to_ullong_bottom_bit_works} = "yes"; then
AC_DEFINE([FP_TO_ULLONG_BOTTOM_BIT_WORKS], [1],
- [Define if your system can accurately convert floating-point to unsigned long long values.])
+ [Define if your system roundup accurately convert floating-point to unsigned long long values.])
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
dnl ----------------------------------------------------------------------
+dnl Set the flag to indicate that the machine can accurately convert
+dnl 'float' or 'double' to 'unsigned (long) long' values.
+dnl (This flag should be set for all machines, except for HP-UX machines
+dnl where the maximal number for unsigned long long is 0x7fffffffffffffff
+dnl during conversion.
+dnl
+AC_MSG_CHECKING([if right maximum converting floating-point to unsigned long long values])
+
+AC_CACHE_VAL([hdf5_cv_fp_to_ullong_right_maximum],
+ [AC_TRY_RUN([
+ int main(void)
+ {
+ float f = 9701917572145405952.00f;
+ double d = 9701917572145405952.00;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d;
+ unsigned long long l3 = 0x7fffffffffffffffLLU;
+ int ret = 0;
+
+ if(l1 <= l3 || l2 <= l3)
+ ret = 1;
+
+done:
+ exit(ret);
+ }
+ ], [hdf5_cv_fp_to_ullong_right_maximum=yes], [hdf5_cv_fp_to_ullong_right_maximum=no],)])
+
+if test ${hdf5_cv_fp_to_ullong_right_maximum} = "yes"; then
+ AC_DEFINE([FP_TO_ULLONG_RIGHT_MAXIMUM], [1],
+ [Define if your system has right maximum convert floating-point to unsigned long long values.])
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+
+dnl ----------------------------------------------------------------------
dnl Set the flag to indicate that the machine can _compile_
dnl 'unsigned long long' to 'float' and 'double' typecasts.
dnl (This flag should be set for all machines, except for under Windows when