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