1*403c667bSTim Shen //===----------------------------------------------------------------------===// 2*403c667bSTim Shen // 3*403c667bSTim Shen // The LLVM Compiler Infrastructure 4*403c667bSTim Shen // 5*403c667bSTim Shen // This file is dual licensed under the MIT and the University of Illinois Open 6*403c667bSTim Shen // Source Licenses. See LICENSE.TXT for details. 7*403c667bSTim Shen // 8*403c667bSTim Shen //===----------------------------------------------------------------------===// 9*403c667bSTim Shen 10*403c667bSTim Shen // UNSUPPORTED: c++98, c++03 11*403c667bSTim Shen 12*403c667bSTim Shen // <experimental/simd> 13*403c667bSTim Shen // 14*403c667bSTim Shen // [simd.traits] 15*403c667bSTim Shen // template <class T> struct is_simd; 16*403c667bSTim Shen // template <class T> inline constexpr bool is_simd_v = is_simd<T>::value; 17*403c667bSTim Shen 18*403c667bSTim Shen #include <cstdint> 19*403c667bSTim Shen #include <experimental/simd> 20*403c667bSTim Shen #include "test_macros.h" 21*403c667bSTim Shen 22*403c667bSTim Shen using namespace std::experimental::parallelism_v2; 23*403c667bSTim Shen 24*403c667bSTim Shen struct UserType {}; 25*403c667bSTim Shen 26*403c667bSTim Shen static_assert( is_simd<native_simd<int8_t>>::value, ""); 27*403c667bSTim Shen static_assert( is_simd<native_simd<int16_t>>::value, ""); 28*403c667bSTim Shen static_assert( is_simd<native_simd<int32_t>>::value, ""); 29*403c667bSTim Shen static_assert( is_simd<native_simd<int64_t>>::value, ""); 30*403c667bSTim Shen static_assert( is_simd<native_simd<uint8_t>>::value, ""); 31*403c667bSTim Shen static_assert( is_simd<native_simd<uint16_t>>::value, ""); 32*403c667bSTim Shen static_assert( is_simd<native_simd<uint32_t>>::value, ""); 33*403c667bSTim Shen static_assert( is_simd<native_simd<uint64_t>>::value, ""); 34*403c667bSTim Shen static_assert( is_simd<native_simd<float>>::value, ""); 35*403c667bSTim Shen static_assert( is_simd<native_simd<double>>::value, ""); 36*403c667bSTim Shen 37*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int8_t, 1>>::value, ""); 38*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int16_t, 1>>::value, ""); 39*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int32_t, 1>>::value, ""); 40*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int64_t, 1>>::value, ""); 41*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint8_t, 1>>::value, ""); 42*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint16_t, 1>>::value, ""); 43*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint32_t, 1>>::value, ""); 44*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint64_t, 1>>::value, ""); 45*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<float, 1>>::value, ""); 46*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<double, 1>>::value, ""); 47*403c667bSTim Shen 48*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int8_t, 3>>::value, ""); 49*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int16_t, 3>>::value, ""); 50*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int32_t, 3>>::value, ""); 51*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int64_t, 3>>::value, ""); 52*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint8_t, 3>>::value, ""); 53*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint16_t, 3>>::value, ""); 54*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint32_t, 3>>::value, ""); 55*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint64_t, 3>>::value, ""); 56*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<float, 3>>::value, ""); 57*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<double, 3>>::value, ""); 58*403c667bSTim Shen 59*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int8_t, 32>>::value, ""); 60*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int16_t, 32>>::value, ""); 61*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int32_t, 32>>::value, ""); 62*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<int64_t, 32>>::value, ""); 63*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint8_t, 32>>::value, ""); 64*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint16_t, 32>>::value, ""); 65*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint32_t, 32>>::value, ""); 66*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<uint64_t, 32>>::value, ""); 67*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<float, 32>>::value, ""); 68*403c667bSTim Shen static_assert( is_simd<fixed_size_simd<double, 32>>::value, ""); 69*403c667bSTim Shen 70*403c667bSTim Shen static_assert(!is_simd<void>::value, ""); 71*403c667bSTim Shen static_assert(!is_simd<int>::value, ""); 72*403c667bSTim Shen static_assert(!is_simd<float>::value, ""); 73*403c667bSTim Shen static_assert(!is_simd<simd_mask<int>>::value, ""); 74*403c667bSTim Shen static_assert(!is_simd<simd_mask<float>>::value, ""); 75*403c667bSTim Shen static_assert(!is_simd<UserType>::value, ""); 76*403c667bSTim Shen 77*403c667bSTim Shen #if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) && \ 78*403c667bSTim Shen !defined(_LIBCPP_HAS_NO_INLINE_VARIABLES) 79*403c667bSTim Shen 80*403c667bSTim Shen static_assert( is_simd_v<native_simd<int8_t>>, ""); 81*403c667bSTim Shen static_assert( is_simd_v<native_simd<int16_t>>, ""); 82*403c667bSTim Shen static_assert( is_simd_v<native_simd<int32_t>>, ""); 83*403c667bSTim Shen static_assert( is_simd_v<native_simd<int64_t>>, ""); 84*403c667bSTim Shen static_assert( is_simd_v<native_simd<uint8_t>>, ""); 85*403c667bSTim Shen static_assert( is_simd_v<native_simd<uint16_t>>, ""); 86*403c667bSTim Shen static_assert( is_simd_v<native_simd<uint32_t>>, ""); 87*403c667bSTim Shen static_assert( is_simd_v<native_simd<uint64_t>>, ""); 88*403c667bSTim Shen static_assert( is_simd_v<native_simd<float>>, ""); 89*403c667bSTim Shen static_assert( is_simd_v<native_simd<double>>, ""); 90*403c667bSTim Shen 91*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int8_t, 1>>, ""); 92*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int16_t, 1>>, ""); 93*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int32_t, 1>>, ""); 94*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int64_t, 1>>, ""); 95*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint8_t, 1>>, ""); 96*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint16_t, 1>>, ""); 97*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint32_t, 1>>, ""); 98*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint64_t, 1>>, ""); 99*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<float, 1>>, ""); 100*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<double, 1>>, ""); 101*403c667bSTim Shen 102*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int8_t, 3>>, ""); 103*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int16_t, 3>>, ""); 104*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int32_t, 3>>, ""); 105*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int64_t, 3>>, ""); 106*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint8_t, 3>>, ""); 107*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint16_t, 3>>, ""); 108*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint32_t, 3>>, ""); 109*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint64_t, 3>>, ""); 110*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<float, 3>>, ""); 111*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<double, 3>>, ""); 112*403c667bSTim Shen 113*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int8_t, 32>>, ""); 114*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int16_t, 32>>, ""); 115*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int32_t, 32>>, ""); 116*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<int64_t, 32>>, ""); 117*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint8_t, 32>>, ""); 118*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint16_t, 32>>, ""); 119*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint32_t, 32>>, ""); 120*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<uint64_t, 32>>, ""); 121*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<float, 32>>, ""); 122*403c667bSTim Shen static_assert( is_simd_v<fixed_size_simd<double, 32>>, ""); 123*403c667bSTim Shen 124*403c667bSTim Shen static_assert(!is_simd_v<void>, ""); 125*403c667bSTim Shen static_assert(!is_simd_v<int>, ""); 126*403c667bSTim Shen static_assert(!is_simd_v<float>, ""); 127*403c667bSTim Shen static_assert(!is_simd_v<simd_mask<int>>, ""); 128*403c667bSTim Shen static_assert(!is_simd_v<simd_mask<float>>, ""); 129*403c667bSTim Shen static_assert(!is_simd_v<UserType>, ""); 130*403c667bSTim Shen 131*403c667bSTim Shen #endif 132*403c667bSTim Shen 133*403c667bSTim Shen int main() {} 134