mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r26489] Description:
Remove the ULONG_TO_FP_BOTTOM_BIT_ACCURATE macro/define, as it was added for SGI systems and old Solaris systems, which are no longer supported. Tested on: Mac OSX/64 10.10.2 (amazon) w/serial & parallel (h5committest not required)
This commit is contained in:
parent
74dc896691
commit
cea7454bef
@ -258,18 +258,6 @@ ENDMACRO (H5MiscConversionTest)
|
||||
# Check various conversion capabilities
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Set the flag to indicate that the machine can accurately convert
|
||||
# 'unsigned (long) long' values to 'float' and 'double' values.
|
||||
# (This flag should be set for all machines, except for the SGIs) and Solaris
|
||||
# 64-bit machines, where the short program below tests if round-up is
|
||||
# correctly handled.
|
||||
#
|
||||
if (CMAKE_SYSTEM MATCHES "solaris2.*")
|
||||
H5ConversionTests (H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE "Checking IF accurately converting unsigned long long to floating-point values")
|
||||
else (CMAKE_SYSTEM MATCHES "solaris2.*")
|
||||
set (H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE 1)
|
||||
endif (CMAKE_SYSTEM MATCHES "solaris2.*")
|
||||
# ----------------------------------------------------------------------
|
||||
# Set the flag to indicate that the machine can accurately convert
|
||||
# 'float' or 'double' to 'unsigned long long' values.
|
||||
|
@ -409,69 +409,3 @@ done:
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE_TEST
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned long l1;
|
||||
unsigned long l2;
|
||||
unsigned long l3;
|
||||
unsigned long l4;
|
||||
unsigned long long ld1;
|
||||
unsigned long long ld2;
|
||||
unsigned long long ld3;
|
||||
unsigned long long ld4;
|
||||
double d1, d2, d3, d4;
|
||||
unsigned char s[8];
|
||||
int ret = 0;
|
||||
|
||||
if(sizeof(unsigned long)==8) {
|
||||
l1 = 0xf000000000000b00UL; /*Round-down case*/
|
||||
l2 = 0xf000000000000401UL; /*Round-up case*/
|
||||
l3 = 0xf000000000000400UL; /*Round-down case*/
|
||||
l4 = 0xf000000000000c00UL; /*Round-up case*/
|
||||
|
||||
d1 = (double)l1;
|
||||
d2 = (double)l2;
|
||||
d3 = (double)l3;
|
||||
d4 = (double)l4;
|
||||
} else if(sizeof(unsigned long long)==8) {
|
||||
ld1 = 0xf000000000000b00ULL; /*Round-down case*/
|
||||
ld2 = 0xf000000000000401ULL; /*Round-up case*/
|
||||
ld3 = 0xf000000000000400ULL; /*Round-down case*/
|
||||
ld4 = 0xf000000000000c00ULL; /*Round-up case*/
|
||||
|
||||
d1 = (double)ld1;
|
||||
d2 = (double)ld2;
|
||||
d3 = (double)ld3;
|
||||
d4 = (double)ld4;
|
||||
} else {
|
||||
ret = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
memcpy(s, &d1, 8);
|
||||
if(s[7]!=1)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d2, 8);
|
||||
if(s[7]!=1)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d3, 8);
|
||||
if(s[7]!=0)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d4, 8);
|
||||
if(s[7]!=2)
|
||||
ret = 1;
|
||||
|
||||
done:
|
||||
exit(ret);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -676,10 +676,6 @@
|
||||
correct precision. */
|
||||
#cmakedefine H5_ULLONG_TO_LDOUBLE_PRECISION @H5_ULLONG_TO_LDOUBLE_PRECISION@
|
||||
|
||||
/* Define if your system can accurately convert unsigned (long) long values to
|
||||
floating-point values. */
|
||||
#cmakedefine H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE @H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE@
|
||||
|
||||
/* Define using v1.6 public API symbols by default */
|
||||
#cmakedefine H5_USE_16_API_DEFAULT @H5_USE_16_API_DEFAULT@
|
||||
|
||||
|
84
configure.ac
84
configure.ac
@ -2442,90 +2442,6 @@ case "`uname`" in
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
## ----------------------------------------------------------------------
|
||||
## Set the flag to indicate that the machine can accurately convert
|
||||
## 'unsigned (long) long' values to 'float' and 'double' values.
|
||||
## (This flag should be set for all machines, except for the SGIs) and Solaris
|
||||
## 64-bit machines, where the short program below tests if round-up is
|
||||
## correctly handled.
|
||||
##
|
||||
AC_MSG_CHECKING([if accurately converting unsigned long long to floating-point values])
|
||||
|
||||
if test ${host_os_novers} = "solaris2.x"; then
|
||||
AC_CACHE_VAL([hdf5_cv_ulong_to_fp_bottom_bit_accurate],
|
||||
[AC_TRY_RUN([
|
||||
int main(void)
|
||||
{
|
||||
unsigned long l1;
|
||||
unsigned long l2;
|
||||
unsigned long l3;
|
||||
unsigned long l4;
|
||||
unsigned long long ld1;
|
||||
unsigned long long ld2;
|
||||
unsigned long long ld3;
|
||||
unsigned long long ld4;
|
||||
double d1, d2, d3, d4;
|
||||
unsigned char s[8];
|
||||
int ret = 0;
|
||||
|
||||
if(sizeof(unsigned long)==8) {
|
||||
l1 = 0xf000000000000b00UL; /*Round-down case*/
|
||||
l2 = 0xf000000000000401UL; /*Round-up case*/
|
||||
l3 = 0xf000000000000400UL; /*Round-down case*/
|
||||
l4 = 0xf000000000000c00UL; /*Round-up case*/
|
||||
|
||||
d1 = (double)l1;
|
||||
d2 = (double)l2;
|
||||
d3 = (double)l3;
|
||||
d4 = (double)l4;
|
||||
} else if(sizeof(unsigned long long)==8) {
|
||||
ld1 = 0xf000000000000b00ULL; /*Round-down case*/
|
||||
ld2 = 0xf000000000000401ULL; /*Round-up case*/
|
||||
ld3 = 0xf000000000000400ULL; /*Round-down case*/
|
||||
ld4 = 0xf000000000000c00ULL; /*Round-up case*/
|
||||
|
||||
d1 = (double)ld1;
|
||||
d2 = (double)ld2;
|
||||
d3 = (double)ld3;
|
||||
d4 = (double)ld4;
|
||||
} else {
|
||||
ret = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
memcpy(s, &d1, 8);
|
||||
if(s[7]!=1)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d2, 8);
|
||||
if(s[7]!=1)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d3, 8);
|
||||
if(s[7]!=0)
|
||||
ret = 1;
|
||||
|
||||
memcpy(s, &d4, 8);
|
||||
if(s[7]!=2)
|
||||
ret = 1;
|
||||
|
||||
done:
|
||||
exit(ret);
|
||||
}
|
||||
], [hdf5_cv_ulong_to_fp_bottom_bit_accurate=yes], [hdf5_cv_ulong_to_fp_bottom_bit_accurate=no],)])
|
||||
else
|
||||
AC_CACHE_VAL([hdf5_cv_ulong_to_fp_bottom_bit_accurate], [hdf5_cv_ulong_to_fp_bottom_bit_accurate=yes])
|
||||
fi
|
||||
|
||||
if test ${hdf5_cv_ulong_to_fp_bottom_bit_accurate} = "yes"; then
|
||||
AC_DEFINE([ULONG_TO_FP_BOTTOM_BIT_ACCURATE], [1],
|
||||
[Define if your system can accurately convert unsigned (long) long values to floating-point values.])
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
## ----------------------------------------------------------------------
|
||||
## Set the flag to indicate that the machine can accurately convert
|
||||
## 'float' or 'double' to 'unsigned long long' values.
|
||||
|
@ -1220,15 +1220,9 @@ H5T_init_interface(void)
|
||||
status |= H5T_register(H5T_PERS_HARD, "long_ldbl", native_long, native_ldouble, H5T__conv_long_ldouble, H5AC_dxpl_id, FALSE);
|
||||
|
||||
/* From unsigned long to floats */
|
||||
#if H5T_CONV_INTERNAL_ULONG_FLT
|
||||
status |= H5T_register(H5T_PERS_HARD, "ulong_flt", native_ulong, native_float, H5T__conv_ulong_float, H5AC_dxpl_id, FALSE);
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_FLT */
|
||||
#if H5T_CONV_INTERNAL_ULONG_DBL
|
||||
status |= H5T_register(H5T_PERS_HARD, "ulong_dbl", native_ulong, native_double, H5T__conv_ulong_double, H5AC_dxpl_id, FALSE);
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_DBL */
|
||||
#if H5T_CONV_INTERNAL_ULONG_LDOUBLE
|
||||
status |= H5T_register(H5T_PERS_HARD, "ulong_ldbl", native_ulong, native_ldouble, H5T__conv_ulong_ldouble, H5AC_dxpl_id, FALSE);
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_LDOUBLE */
|
||||
|
||||
/* From long long to floats */
|
||||
status |= H5T_register(H5T_PERS_HARD, "llong_flt", native_llong, native_float, H5T__conv_llong_float, H5AC_dxpl_id, FALSE);
|
||||
|
@ -7780,7 +7780,6 @@ H5T__conv_long_ldouble (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#if H5T_CONV_INTERNAL_ULONG_FLT
|
||||
herr_t
|
||||
H5T__conv_ulong_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
size_t nelmts, size_t buf_stride,
|
||||
@ -7789,7 +7788,6 @@ H5T__conv_ulong_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
{
|
||||
H5T_CONV_xF(ULONG, FLOAT, unsigned long, float, -, -);
|
||||
}
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_FLT */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -7807,7 +7805,6 @@ H5T__conv_ulong_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#if H5T_CONV_INTERNAL_ULONG_DBL
|
||||
herr_t
|
||||
H5T__conv_ulong_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
size_t nelmts, size_t buf_stride,
|
||||
@ -7816,7 +7813,6 @@ H5T__conv_ulong_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
{
|
||||
H5T_CONV_xF(ULONG, DOUBLE, unsigned long, double, -, -);
|
||||
}
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_DBL */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -7834,7 +7830,6 @@ H5T__conv_ulong_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#if H5T_CONV_INTERNAL_ULONG_LDOUBLE
|
||||
herr_t
|
||||
H5T__conv_ulong_ldouble (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
size_t nelmts, size_t buf_stride,
|
||||
@ -7843,7 +7838,6 @@ H5T__conv_ulong_ldouble (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
|
||||
{
|
||||
H5T_CONV_xF(ULONG, LDOUBLE, unsigned long, long double, -, -);
|
||||
}
|
||||
#endif /* H5T_CONV_INTERNAL_ULONG_LDOUBLE */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
28
src/H5Tpkg.h
28
src/H5Tpkg.h
@ -124,38 +124,16 @@
|
||||
#define H5T_CONV_INTERNAL_FP_LDOUBLE 1
|
||||
#endif /*H5_SIZEOF_LONG_DOUBLE && H5_CONVERT_DENORMAL_FLOAT*/
|
||||
|
||||
/* Define an internal macro for converting unsigned long to float.
|
||||
* Pathscale compiler on Sandia's Linux machine has some problem.
|
||||
* 64-bit Solaris does different rounding. */
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
|
||||
(!H5_WANT_DATA_ACCURACY)
|
||||
#define H5T_CONV_INTERNAL_ULONG_FLT 1
|
||||
#endif
|
||||
|
||||
/* Define an internal macro for converting unsigned (long) long to double.
|
||||
* 64-bit Solaris does different rounding. */
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || (!H5_WANT_DATA_ACCURACY)
|
||||
#define H5T_CONV_INTERNAL_ULONG_DBL 1
|
||||
#endif
|
||||
|
||||
/* Define an internal macro for converting unsigned long to long double. SGI compilers give some
|
||||
* incorrect conversions. 64-bit Solaris does different rounding. */
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
|
||||
(!H5_WANT_DATA_ACCURACY)
|
||||
#define H5T_CONV_INTERNAL_ULONG_LDOUBLE 1
|
||||
#endif
|
||||
|
||||
/* Define an internal macro for converting long long to long double. Mac OS 10.4 gives some
|
||||
* incorrect conversions. */
|
||||
#if (H5_WANT_DATA_ACCURACY && defined(H5_LLONG_TO_LDOUBLE_CORRECT)) || \
|
||||
(!H5_WANT_DATA_ACCURACY)
|
||||
#if (H5_WANT_DATA_ACCURACY && defined(H5_LLONG_TO_LDOUBLE_CORRECT)) || (!H5_WANT_DATA_ACCURACY)
|
||||
#define H5T_CONV_INTERNAL_LLONG_LDOUBLE 1
|
||||
#endif
|
||||
|
||||
/* Define an internal macro for converting unsigned long long to floating numbers. SGI compilers give
|
||||
* some incorect conversion. 64-bit Solaris does different rounding. Windows Visual Studio 6 does
|
||||
* not support unsigned long long. */
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE) || \
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS) || \
|
||||
(!H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS)
|
||||
#define H5T_CONV_INTERNAL_ULLONG_FP 1
|
||||
#endif
|
||||
@ -165,7 +143,7 @@
|
||||
* not support unsigned long long. For FreeBSD(sleipnir), the last 2 bytes of mantissa are lost when
|
||||
* compiler tries to do the conversion. For Cygwin, compiler doesn't do rounding correctly.
|
||||
* Mac OS 10.4 gives some incorrect result. */
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE && \
|
||||
#if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && \
|
||||
defined(H5_ULLONG_TO_LDOUBLE_PRECISION) && defined(H5_LLONG_TO_LDOUBLE_CORRECT)) || (!H5_WANT_DATA_ACCURACY && \
|
||||
H5_ULLONG_TO_FP_CAST_WORKS)
|
||||
#define H5T_CONV_INTERNAL_ULLONG_LDOUBLE 1
|
||||
|
Loading…
Reference in New Issue
Block a user