diff options
author | Jordan Henderson <jhenderson@hdfgroup.org> | 2024-03-02 01:27:31 (GMT) |
---|---|---|
committer | Jordan Henderson <jhenderson@hdfgroup.org> | 2024-03-02 01:27:31 (GMT) |
commit | a209e23d79c41b0e3d78bb8394d1b2f704d7db77 (patch) | |
tree | 12c7a284162676bbc83015c010f2ad533aa5739c /config | |
parent | 6965049700fa367d0cfe6fba211bac0ff53263ba (diff) | |
download | hdf5-a209e23d79c41b0e3d78bb8394d1b2f704d7db77.zip hdf5-a209e23d79c41b0e3d78bb8394d1b2f704d7db77.tar.gz hdf5-a209e23d79c41b0e3d78bb8394d1b2f704d7db77.tar.bz2 |
Add test program to see if _Float16 really works
Diffstat (limited to 'config')
-rw-r--r-- | config/cmake/ConfigureChecks.cmake | 23 | ||||
-rw-r--r-- | config/cmake/HDFTests.c | 33 |
2 files changed, 53 insertions, 3 deletions
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index 14e8b75..25de5b0 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -384,10 +384,27 @@ if (${HDF_PREFIX}_SIZEOF__FLOAT16) if (h5_have_flt16_epsilon AND h5_have_flt16_min AND h5_have_flt16_max AND h5_have_flt16_min_10_exp AND h5_have_flt16_max_10_exp AND h5_have_flt16_mant_dig) - set (${HDF_PREFIX}_HAVE__FLOAT16 1) + # Finally, some compilers like OneAPI on MSVC appear to just be broken, + # as support for _Float16 and its macros can be detected properly, but + # then code is generated that uses the __truncsfhf2, __truncdfhf2, + # __extendhfsf2 functions, which end up being unresolved with MSVC. Let's + # try to compile a program that will generate these functions as a last + # resort for checking for _Float16 support. + message (VERBOSE "Compiling test program for _Float16 support") + try_compile ( + h5_compiled_float16_test + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_DIR}/HDFTests.c + COMPILE_DEFINITIONS "-DCHECK_FLOAT16" + C_STANDARD 99 + ) - # Check if we can use fabsf16 - CHECK_FUNCTION_EXISTS (fabsf16 ${HDF_PREFIX}_HAVE_FABSF16) + if (${h5_compiled_float16_test}) + set (${HDF_PREFIX}_HAVE__FLOAT16 1) + + # Check if we can use fabsf16 + CHECK_FUNCTION_EXISTS (fabsf16 ${HDF_PREFIX}_HAVE_FABSF16) + endif () else () set (${HDF_PREFIX}_HAVE__FLOAT16 0) endif () diff --git a/config/cmake/HDFTests.c b/config/cmake/HDFTests.c index 095f113..fd0beb2 100644 --- a/config/cmake/HDFTests.c +++ b/config/cmake/HDFTests.c @@ -192,3 +192,36 @@ int main () } #endif /* HAVE_IOEO */ + +#ifdef CHECK_FLOAT16 + +#define __STDC_WANT_IEC_60559_TYPES_EXT__ +#include <float.h> + +int +main(int argc, char **argv) +{ + signed char a; + _Float16 b; + double c; + + /* Convert signed char to _Float16 */ + a = 1; + b = (_Float16)a; + + /* Convert back */ + b = 3.0f16; + a = (signed char)b; + + /* Convert double to _Float16 */ + c = 5.0; + b = (_Float16)c; + + /* Convert back */ + b = 3.0f16; + c = (double)b; + + return 0; +} + +#endif /* CHECK_FLOAT16 */ |