This is the second patch for std::experimental::simd, adding the testsuite. As discussed with Jonathan, the simd testsuite comes via its own check-simd target. The testsuite is so large that even marking all tests as "expensive", it still increased make check -j8 (with 8 cores) by more than 4 minutes (only to determine to compile and run nothing). From: Matthias Kretz The new check-simd target creates a subdirectory, generates the necessary Makefiles, and spawns submakes to build and run the tests. libstdc++-v3/ChangeLog: * scripts/check_simd: New file. This script is called from the the check-simd target. It determines a set of compiler flags and simulator setups for calling generate_makefile.sh and passes the information back to the check-simd target, which recurses to the generated Makefiles. * scripts/create_testsuite_files: Remove files below simd/tests/ from testsuite_files and place them in testsuite_files_simd. * testsuite/Makefile.am: Add testsuite_files_simd. Add check-simd target. * testsuite/experimental/simd/driver.sh: New file. This script compiles and runs a given simd test, logging its output and status. It uses the timeout command to implement compile and test timeouts. * testsuite/experimental/simd/generate_makefile.sh: New file. This script generates a Makefile which uses driver.sh to compile and run the tests and collect the logs into a single log file. * testsuite/experimental/simd/tests/abs.cc: New file. Tests abs(simd). * testsuite/experimental/simd/tests/algorithms.cc: New file. Tests min/max(simd, simd). * testsuite/experimental/simd/tests/bits/conversions.h: New file. Contains functions to support tests involving conversions. * testsuite/experimental/simd/tests/bits/make_vec.h: New file. Support functions make_mask and make_vec. * testsuite/experimental/simd/tests/bits/mathreference.h: New file. Support functions to supply precomputed math function reference data. * testsuite/experimental/simd/tests/bits/metahelpers.h: New file. Support code for SFINAE testing. * testsuite/experimental/simd/tests/bits/simd_view.h: New file. * testsuite/experimental/simd/tests/bits/test_values.h: New file. Test functions to easily drive a test with simd objects initialized from a given list of values and a range of random values. * testsuite/experimental/simd/tests/bits/ulp.h: New file. Support code to determine the ULP distance of simd objects. * testsuite/experimental/simd/tests/bits/verify.h: New file. Test framework for COMPARE'ing simd objects and instantiating the test templates with value_type and ABI tag. * testsuite/experimental/simd/tests/broadcast.cc: New file. Test simd broadcasts. * testsuite/experimental/simd/tests/casts.cc: New file. Test simd casts. * testsuite/experimental/simd/tests/fpclassify.cc: New file. Test floating-point classification functions. * testsuite/experimental/simd/tests/frexp.cc: New file. Test frexp(simd). * testsuite/experimental/simd/tests/generator.cc: New file. Test simd generator constructor. * testsuite/experimental/simd/tests/hypot3_fma.cc: New file. Test 3-arg hypot(simd,simd,simd) and fma(simd,simd,sim). * testsuite/experimental/simd/tests/integer_operators.cc: New file. Test integer operators. * testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc: New file. Test ldexp(simd), scalbn(simd), scalbln(simd), and modf(simd). * testsuite/experimental/simd/tests/loadstore.cc: New file. Test (converting) simd loads and stores. * testsuite/experimental/simd/tests/logarithm.cc: New file. Test log*(simd). * testsuite/experimental/simd/tests/mask_broadcast.cc: New file. Test simd_mask broadcasts. * testsuite/experimental/simd/tests/mask_conversions.cc: New file. Test simd_mask conversions. * testsuite/experimental/simd/tests/mask_implicit_cvt.cc: New file. Test simd_mask implicit conversions. * testsuite/experimental/simd/tests/mask_loadstore.cc: New file. Test simd_mask loads and stores. * testsuite/experimental/simd/tests/mask_operator_cvt.cc: New file. Test simd_mask operators convert as specified. * testsuite/experimental/simd/tests/mask_operators.cc: New file. Test simd_mask compares, subscripts, and negation. * testsuite/experimental/simd/tests/mask_reductions.cc: New file. Test simd_mask reductions. * testsuite/experimental/simd/tests/math_1arg.cc: New file. Test 1-arg math functions on simd. * testsuite/experimental/simd/tests/math_2arg.cc: New file. Test 2-arg math functions on simd. * testsuite/experimental/simd/tests/operator_cvt.cc: New file. Test implicit conversions on simd binary operators behave as specified. * testsuite/experimental/simd/tests/operators.cc: New file. Test simd compares, subscripts, not, unary minus, plus, minus, multiplies, divides, increment, and decrement. * testsuite/experimental/simd/tests/reductions.cc: New file. Test reduce(simd). * testsuite/experimental/simd/tests/remqo.cc: New file. Test remqo(simd). * testsuite/experimental/simd/tests/simd.cc: New file. Basic sanity checks of simd types. * testsuite/experimental/simd/tests/sincos.cc: New file. Test sin(simd) and cos(simd). * testsuite/experimental/simd/tests/split_concat.cc: New file. Test split(simd) and concat(simd, simd). * testsuite/experimental/simd/tests/splits.cc: New file. Test split(simd_mask). * testsuite/experimental/simd/tests/trigonometric.cc: New file. Test remaining trigonometric functions on simd. * testsuite/experimental/simd/tests/trunc_ceil_floor.cc: New file. Test trunc(simd), ceil(simd), and floor(simd). * testsuite/experimental/simd/tests/where.cc: New file. Test masked operations using where. --- libstdc++-v3/scripts/check_simd | 76 ++ libstdc++-v3/scripts/create_testsuite_files | 6 +- libstdc++-v3/testsuite/Makefile.am | 17 +- .../testsuite/experimental/simd/driver.sh | 249 ++++ .../experimental/simd/generate_makefile.sh | 250 ++++ .../testsuite/experimental/simd/tests/abs.cc | 24 + .../experimental/simd/tests/algorithms.cc | 13 + .../simd/tests/bits/conversions.h | 167 +++ .../experimental/simd/tests/bits/make_vec.h | 69 ++ .../simd/tests/bits/mathreference.h | 143 +++ .../simd/tests/bits/metahelpers.h | 147 +++ .../experimental/simd/tests/bits/simd_view.h | 131 ++ .../simd/tests/bits/test_values.h | 366 ++++++ .../experimental/simd/tests/bits/ulp.h | 111 ++ .../experimental/simd/tests/bits/verify.h | 336 ++++++ .../experimental/simd/tests/broadcast.cc | 87 ++ .../experimental/simd/tests/casts.cc | 152 +++ .../experimental/simd/tests/fpclassify.cc | 89 ++ .../experimental/simd/tests/frexp.cc | 68 ++ .../experimental/simd/tests/generator.cc | 41 + .../experimental/simd/tests/hypot3_fma.cc | 134 +++ .../simd/tests/integer_operators.cc | 218 ++++ .../simd/tests/ldexp_scalbn_scalbln_modf.cc | 152 +++ .../experimental/simd/tests/loadstore.cc | 212 ++++ .../experimental/simd/tests/logarithm.cc | 66 ++ .../experimental/simd/tests/mask_broadcast.cc | 50 + .../simd/tests/mask_conversions.cc | 96 ++ .../simd/tests/mask_implicit_cvt.cc | 85 ++ .../experimental/simd/tests/mask_loadstore.cc | 144 +++ .../simd/tests/mask_operator_cvt.cc | 94 ++ .../experimental/simd/tests/mask_operators.cc | 40 + .../simd/tests/mask_reductions.cc | 209 ++++ .../experimental/simd/tests/math_1arg.cc | 90 ++ .../experimental/simd/tests/math_2arg.cc | 62 + .../experimental/simd/tests/operator_cvt.cc | 1055 +++++++++++++++++ .../experimental/simd/tests/operators.cc | 297 +++++ .../experimental/simd/tests/reductions.cc | 80 ++ .../experimental/simd/tests/remqo.cc | 53 + .../testsuite/experimental/simd/tests/simd.cc | 29 + .../experimental/simd/tests/sincos.cc | 29 + .../experimental/simd/tests/split_concat.cc | 166 +++ .../experimental/simd/tests/splits.cc | 21 + .../experimental/simd/tests/trigonometric.cc | 24 + .../simd/tests/trunc_ceil_floor.cc | 92 ++ .../experimental/simd/tests/where.cc | 119 ++ 45 files changed, 6156 insertions(+), 3 deletions(-) create mode 100755 libstdc++-v3/scripts/check_simd create mode 100755 libstdc++-v3/testsuite/experimental/simd/driver.sh create mode 100755 libstdc++-v3/testsuite/experimental/simd/ generate_makefile.sh create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/abs.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ algorithms.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ conversions.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ make_vec.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ mathreference.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ metahelpers.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ simd_view.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ test_values.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ulp.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/bits/ verify.h create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ broadcast.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/casts.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ fpclassify.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/frexp.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ generator.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ hypot3_fma.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ integer_operators.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ ldexp_scalbn_scalbln_modf.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ loadstore.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ logarithm.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_broadcast.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_conversions.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_implicit_cvt.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_loadstore.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_operator_cvt.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_operators.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ mask_reductions.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ math_1arg.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ math_2arg.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ operator_cvt.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ operators.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ reductions.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/remqo.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/simd.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/sincos.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ split_concat.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/splits.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ trigonometric.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/ trunc_ceil_floor.cc create mode 100644 libstdc++-v3/testsuite/experimental/simd/tests/where.cc -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de std::experimental::simd https://github.com/VcDevel/std-simd ──────────────────────────────────────────────────────────────────────────