template<class... T>
template<typename F, int Pos = nTypes-1, int InVectorizingSize = 1, bool IsLastCheckable = (Pos==0), int NextPos = (IsLastCheckable?Pos:(Pos-1)), typename G = RemRef<decltype(get<Pos>(types{}))>, int Size = G::size, int OutVectorizingSize = InVectorizingSize*Size, bool EnoughToVectorize = canBeSizeOfSIMDVector<F>(OutVectorizingSize), bool CompIsVectorizing = G::template isVectorizable<F>, bool FallBack = (not CompIsVectorizing) or IsLastCheckable>
struct SUNphi::TensKind< T >::_firstVectorizingComp< F, Pos, InVectorizingSize, IsLastCheckable, NextPos, G, Size, OutVectorizingSize, EnoughToVectorize, CompIsVectorizing, FallBack >
Return the position of the first component needed to vectorize
Internal implementation, escaping when last checkable component is reached
- Todo:
- Add a lenghty description, this is a complicated piece of code! The scope is not immediate to get
Definition at line 186 of file TensKind.hpp.
template<class... T>
template<typename F , int Pos = nTypes-1, int InVectorizingSize = 1, bool IsLastCheckable = (Pos==0), int NextPos = (IsLastCheckable?Pos:(Pos-1)), typename G = RemRef<decltype(get<Pos>(types{}))>, int Size = G::size, int OutVectorizingSize = InVectorizingSize*Size, bool EnoughToVectorize = canBeSizeOfSIMDVector<F>(OutVectorizingSize), bool CompIsVectorizing = G::template isVectorizable<F>, bool FallBack = (not CompIsVectorizing) or IsLastCheckable>
constexpr int SUNphi::TensKind< T >::_firstVectorizingComp< F, Pos, InVectorizingSize, IsLastCheckable, NextPos, G, Size, OutVectorizingSize, EnoughToVectorize, CompIsVectorizing, FallBack >::value |
|
static |
Initial value:=
FallBack?
-1:
(EnoughToVectorize?
Pos:
std::integral_constant<int,-1>,
_firstVectorizingComp<F,NextPos,OutVectorizingSize>
Provides the result of the calculation.
Definition at line 189 of file TensKind.hpp.