15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX2_TOBOOLPACK_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX2_TOBOOLPACK_H__ 34 static IPSDK_FORCEINLINE
39 assign<eInstructionSet::eIS_Avx2>(zero, 0);
40 assign<eInstructionSet::eIS_Avx2>(one, 1);
44 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
45 cast<eInstructionSet::eIS_Avx2>(nez, out);
46 bitwiseAnd<eInstructionSet::eIS_Avx2>(out, one, out);
51 static IPSDK_FORCEINLINE
57 assign<eInstructionSet::eIS_Avx2>(zero, 0);
58 assign<eInstructionSet::eIS_Avx2>(one, 1);
60 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
61 cast<eInstructionSet::eIS_Avx2>(nez, out);
62 bitwiseAnd<eInstructionSet::eIS_Avx2>(out, one, out);
65 static IPSDK_FORCEINLINE
71 cast<eInstructionSet::eIS_Avx2>(inMask, in);
79 static IPSDK_FORCEINLINE
84 assign<eInstructionSet::eIS_Avx2>(zero, 0);
85 assign<eInstructionSet::eIS_Avx2>(one, 1);
89 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
90 cast<eInstructionSet::eIS_Avx2>(nez, packInt8);
91 bitwiseAnd<eInstructionSet::eIS_Avx2>(packInt8, one, packInt8);
93 cast<eInstructionSet::eIS_Avx2>(packInt8, out);
97 static IPSDK_FORCEINLINE
103 assign<eInstructionSet::eIS_Avx2>(zero, 0);
104 assign<eInstructionSet::eIS_Avx2>(one, 1);
107 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
108 cast<eInstructionSet::eIS_Avx2>(nez, packInt8);
109 bitwiseAnd<eInstructionSet::eIS_Avx2>(packInt8, one, packInt8);
111 cast<eInstructionSet::eIS_Avx2>(packInt8, out);
114 static IPSDK_FORCEINLINE
120 cast<eInstructionSet::eIS_Avx2>(inMask, in);
125 template <
typename T>
127 typename boost::enable_if_c<
128 boost::is_integral<T>::value && sizeof(T) != 1>::type>
130 static IPSDK_FORCEINLINE
136 assign<eInstructionSet::eIS_Avx2>(zero, 0);
137 assign<eInstructionSet::eIS_Avx2>(one, 1);
141 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
142 cast<eInstructionSet::eIS_Avx2>(nez, packT);
143 bitwiseAnd<eInstructionSet::eIS_Avx2>(packT, one, packT);
144 return cast<eInstructionSet::eIS_Avx2, ipUInt8>(packT);
147 static IPSDK_FORCEINLINE
154 assign<eInstructionSet::eIS_Avx2>(zero, 0);
155 assign<eInstructionSet::eIS_Avx2>(one, 1);
159 isNotEqual<eInstructionSet::eIS_Avx2>(in, zero, nez);
160 cast<eInstructionSet::eIS_Avx2>(nez, packT);
161 bitwiseAnd<eInstructionSet::eIS_Avx2>(packT, one, packT);
163 cast<eInstructionSet::eIS_Avx2>(packT, out);
166 static IPSDK_FORCEINLINE
172 cast<eInstructionSet::eIS_Avx2>(inMask, in);
180 static IPSDK_FORCEINLINE
185 inCvt._val[0] = _mm256_castps_si256(in._val[0]);
186 inCvt._val[1] = _mm256_castps_si256(in._val[1]);
187 inCvt._val[2] = _mm256_castps_si256(in._val[2]);
188 inCvt._val[3] = _mm256_castps_si256(in._val[3]);
193 static IPSDK_FORCEINLINE
199 inCvt._val[0] = _mm256_castps_si256(in._val[0]);
200 inCvt._val[1] = _mm256_castps_si256(in._val[1]);
201 inCvt._val[2] = _mm256_castps_si256(in._val[2]);
202 inCvt._val[3] = _mm256_castps_si256(in._val[3]);
207 static IPSDK_FORCEINLINE
213 cast<eInstructionSet::eIS_Avx2>(inMask, in);
225 #endif // __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX2_TOBOOLPACK_H__
int8_t ipInt8
Base types definition.
Definition: BaseTypes.h:48
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
structure containing set of masks for vectorized operations
Definition: BaseMaskPackDecl.h:29
Definition: BaseMaskPack.h:31
Predefined types for Avx instruction set management.
uint8_t ipUInt8
Base types definition.
Definition: BaseTypes.h:49
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Advanced Vector Extensions 2.
Definition: InstructionSetTypes.h:48
Definition: ToBoolPack.h:30
Definition of import/export macro for library.
Definition: BasePack.h:37
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
structure containing intrinsic registers used to store vectorized data
Definition: BasePackDecl.h:29