28 #ifndef VC_COMMON_VECTORABI_H_
29 #define VC_COMMON_VECTORABI_H_
31 namespace Vc_VERSIONED_NAMESPACE
40 using Avx1Abi =
typename std::conditional<std::is_integral<T>::value, VectorAbi::Sse,
41 VectorAbi::Avx>::type;
43 using Best =
typename std::conditional<
45 typename std::conditional<
47 typename std::conditional<
48 CurrentImplementation::is(
AVXImpl), Avx1Abi<T>,
49 typename std::conditional<
50 CurrentImplementation::is(
AVX2Impl), Avx,
51 typename std::conditional<CurrentImplementation::is(
MICImpl), Mic,
52 void>::type>::type>::type>::type>::type;
54 static_assert(std::is_same<Best<float>, Avx>::value,
"");
55 static_assert(std::is_same<Best<int>, Avx>::value,
"");
56 #elif defined Vc_IMPL_AVX
57 static_assert(std::is_same<Best<float>, Avx>::value,
"");
58 static_assert(std::is_same<Best<int>, Sse>::value,
"");
59 #elif defined Vc_IMPL_SSE
61 static_assert(std::is_same<Best<float>, Sse>::value,
"");
62 static_assert(std::is_same<Best<int>, Sse>::value,
"");
63 #elif defined Vc_IMPL_MIC
64 static_assert(std::is_same<Best<float>, Mic>::value,
"");
65 static_assert(std::is_same<Best<int>, Mic>::value,
"");
66 #elif defined Vc_IMPL_Scalar
67 static_assert(std::is_same<Best<float>, Scalar>::value,
"");
68 static_assert(std::is_same<Best<int>, Scalar>::value,
"");
73 #endif // VC_COMMON_VECTORABI_H_
x86 SSE + SSE2 + SSE3 + SSSE3 + SSE4.1 + SSE4.2
uses only fundamental types