1403c667bSTim Shen //===----------------------------------------------------------------------===// 2403c667bSTim Shen // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6403c667bSTim Shen // 7403c667bSTim Shen //===----------------------------------------------------------------------===// 8403c667bSTim Shen 938cd7de5STim Shen // UNSUPPORTED: c++98, c++03, c++11, c++14 10403c667bSTim Shen 11403c667bSTim Shen // <experimental/simd> 12403c667bSTim Shen // 13403c667bSTim Shen // [simd.traits] 1438cd7de5STim Shen // template <class T> struct ex::is_simd; 1538cd7de5STim Shen // template <class T> inline constexpr bool ex::is_simd_v = 1638cd7de5STim Shen // ex::is_simd<T>::value; 17403c667bSTim Shen 18403c667bSTim Shen #include <cstdint> 19403c667bSTim Shen #include <experimental/simd> 20403c667bSTim Shen #include "test_macros.h" 21403c667bSTim Shen 2238cd7de5STim Shen namespace ex = std::experimental::parallelism_v2; 23403c667bSTim Shen 24403c667bSTim Shen struct UserType {}; 25403c667bSTim Shen 2638cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int8_t>>::value, ""); 2738cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int16_t>>::value, ""); 2838cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int32_t>>::value, ""); 2938cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int64_t>>::value, ""); 3038cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint8_t>>::value, ""); 3138cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint16_t>>::value, ""); 3238cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint32_t>>::value, ""); 3338cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint64_t>>::value, ""); 3438cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<float>>::value, ""); 3538cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<double>>::value, ""); 36403c667bSTim Shen 3738cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 1>>::value, ""); 3838cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 1>>::value, ""); 3938cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 1>>::value, ""); 4038cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 1>>::value, ""); 4138cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 1>>::value, ""); 4238cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 1>>::value, ""); 4338cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 1>>::value, ""); 4438cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 1>>::value, ""); 4538cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 1>>::value, ""); 4638cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 1>>::value, ""); 47403c667bSTim Shen 4838cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 3>>::value, ""); 4938cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 3>>::value, ""); 5038cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 3>>::value, ""); 5138cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 3>>::value, ""); 5238cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 3>>::value, ""); 5338cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 3>>::value, ""); 5438cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 3>>::value, ""); 5538cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 3>>::value, ""); 5638cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 3>>::value, ""); 5738cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 3>>::value, ""); 58403c667bSTim Shen 5938cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 32>>::value, ""); 6038cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 32>>::value, ""); 6138cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 32>>::value, ""); 6238cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 32>>::value, ""); 6338cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 32>>::value, ""); 6438cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 32>>::value, ""); 6538cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 32>>::value, ""); 6638cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 32>>::value, ""); 6738cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 32>>::value, ""); 6838cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 32>>::value, ""); 69403c667bSTim Shen 7038cd7de5STim Shen static_assert(!ex::is_simd<void>::value, ""); 7138cd7de5STim Shen static_assert(!ex::is_simd<int>::value, ""); 7238cd7de5STim Shen static_assert(!ex::is_simd<float>::value, ""); 7338cd7de5STim Shen static_assert(!ex::is_simd<ex::simd_mask<int>>::value, ""); 7438cd7de5STim Shen static_assert(!ex::is_simd<ex::simd_mask<float>>::value, ""); 7538cd7de5STim Shen static_assert(!ex::is_simd<UserType>::value, ""); 76403c667bSTim Shen 7738cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int8_t>>, ""); 7838cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int16_t>>, ""); 7938cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int32_t>>, ""); 8038cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int64_t>>, ""); 8138cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint8_t>>, ""); 8238cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint16_t>>, ""); 8338cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint32_t>>, ""); 8438cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint64_t>>, ""); 8538cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<float>>, ""); 8638cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<double>>, ""); 87403c667bSTim Shen 8838cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 1>>, ""); 8938cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 1>>, ""); 9038cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 1>>, ""); 9138cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 1>>, ""); 9238cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 1>>, ""); 9338cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 1>>, ""); 9438cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 1>>, ""); 9538cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 1>>, ""); 9638cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 1>>, ""); 9738cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 1>>, ""); 98403c667bSTim Shen 9938cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 3>>, ""); 10038cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 3>>, ""); 10138cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 3>>, ""); 10238cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 3>>, ""); 10338cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 3>>, ""); 10438cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 3>>, ""); 10538cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 3>>, ""); 10638cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 3>>, ""); 10738cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 3>>, ""); 10838cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 3>>, ""); 109403c667bSTim Shen 11038cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 32>>, ""); 11138cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 32>>, ""); 11238cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 32>>, ""); 11338cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 32>>, ""); 11438cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 32>>, ""); 11538cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 32>>, ""); 11638cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 32>>, ""); 11738cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 32>>, ""); 11838cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 32>>, ""); 11938cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 32>>, ""); 120403c667bSTim Shen 12138cd7de5STim Shen static_assert(!ex::is_simd_v<void>, ""); 12238cd7de5STim Shen static_assert(!ex::is_simd_v<int>, ""); 12338cd7de5STim Shen static_assert(!ex::is_simd_v<float>, ""); 12438cd7de5STim Shen static_assert(!ex::is_simd_v<ex::simd_mask<int>>, ""); 12538cd7de5STim Shen static_assert(!ex::is_simd_v<ex::simd_mask<float>>, ""); 12638cd7de5STim Shen static_assert(!ex::is_simd_v<UserType>, ""); 127403c667bSTim Shen 128*2df59c50SJF Bastien int main(int, char**) { 129*2df59c50SJF Bastien return 0; 130*2df59c50SJF Bastien } 131