15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_ASSIGNREGIMPL_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_ASSIGNREGIMPL_H__ 30 typename AvxType<T>::Type
32 typename boost::enable_if_c<sizeof(T) == 1>::type>::act(
const T& value)
34 return _mm256_set1_epi8(value);
41 typename boost::enable_if_c<sizeof(T) == 1>::type>::act(
typename AvxType<T>::Type& reg,
const T& value)
43 reg = _mm256_set1_epi8(value);
48 typename AvxType<T>::Type
50 typename boost::enable_if_c<sizeof(T) == 2>::type>::act(
const T& value)
52 return _mm256_set1_epi16(value);
59 typename boost::enable_if_c<sizeof(T) == 2>::type>::act(
typename AvxType<T>::Type& reg,
const T& value)
61 reg = _mm256_set1_epi16(value);
66 typename AvxType<T>::Type
68 typename boost::enable_if_c<boost::is_integral<T>::value
69 &&
sizeof(T) == 4>::type>::act(
const T& value)
71 return _mm256_set1_epi32(value);
78 typename boost::enable_if_c<boost::is_integral<T>::value
79 &&
sizeof(T) == 4>::type>::act(
typename AvxType<T>::Type& reg,
const T& value)
81 reg = _mm256_set1_epi32(value);
86 typename AvxType<T>::Type
88 typename boost::enable_if_c<boost::is_integral<T>::value
89 &&
sizeof(T) == 8>::type>::act(
const T& value)
94 values[0] = values[1] = values[2] = values[3] = value;
95 return _mm256_loadu_si256(
96 reinterpret_cast<const typename AvxType<T>::Type*
>(values));
103 typename boost::enable_if_c<boost::is_integral<T>::value
104 &&
sizeof(T) == 8>::type>::act(
typename AvxType<T>::Type& reg,
const T& value)
109 values[0] = values[1] = values[2] = values[3] = value;
110 reg = _mm256_loadu_si256(
111 reinterpret_cast<const typename AvxType<T>::Type*
>(values));
116 AvxType<ipReal32>::Type
117 AssignReg<eInstructionSet::eIS_Avx2, ipReal32>::act(
const ipReal32& value)
119 return AssignReg<eInstructionSet::eIS_Avx, ipReal32>::act(value);
124 AssignReg<eInstructionSet::eIS_Avx2, ipReal32>::act(AvxType<ipReal32>::Type& reg,
const ipReal32& value)
126 AssignReg<eInstructionSet::eIS_Avx, ipReal32>::act(reg, value);
131 AvxType<ipReal64>::Type
132 AssignReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
const ipReal64& value)
134 return AssignReg<eInstructionSet::eIS_Avx, ipReal64>::act(value);
139 AssignReg<eInstructionSet::eIS_Avx2, ipReal64>::act(AvxType<ipReal64>::Type& reg,
const ipReal64& value)
141 AssignReg<eInstructionSet::eIS_Avx, ipReal64>::act(reg, value);
153 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_ASSIGNREGIMPL_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
Advanced Vector Extensions 2.
Definition: InstructionSetTypes.h:48
float ipReal32
Base types definition.
Definition: BaseTypes.h:56