15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_TOBOOLPACK_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_TOBOOLPACK_H__ 39 static IPSDK_FORCEINLINE
45 assign<eInstructionSet::eIS_Sse2>(zero, 0);
46 assign<eInstructionSet::eIS_Sse2>(one, 1);
47 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, inNez);
48 cast<eInstructionSet::eIS_Sse2>(inNez, regFromInNez);
50 bitwiseAnd<eInstructionSet::eIS_Sse2>(
57 static IPSDK_FORCEINLINE
64 assign<eInstructionSet::eIS_Sse2>(zero, 0);
65 assign<eInstructionSet::eIS_Sse2>(one, 1);
66 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, inNez);
67 cast<eInstructionSet::eIS_Sse2>(inNez, regFromInNez);
68 bitwiseAnd<eInstructionSet::eIS_Sse2>(regFromInNez, one, out);
71 static IPSDK_FORCEINLINE
77 assign<eInstructionSet::eIS_Sse2>(one, 1);
78 cast<eInstructionSet::eIS_Sse2>(in, regFromIn);
79 bitwiseAnd<eInstructionSet::eIS_Sse2>(regFromIn, one, out);
89 static IPSDK_FORCEINLINE
94 assign<eInstructionSet::eIS_Sse2>(zero, 0);
95 assign<eInstructionSet::eIS_Sse2>(one, 1);
98 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, nez);
99 cast<eInstructionSet::eIS_Sse2>(nez, out);
100 bitwiseAnd<eInstructionSet::eIS_Sse2>(out, one, out);
101 return cast<eInstructionSet::eIS_Sse2, ipUInt8>(out);
104 static IPSDK_FORCEINLINE
110 assign<eInstructionSet::eIS_Sse2>(zero, 0);
111 assign<eInstructionSet::eIS_Sse2>(one, 1);
113 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, nez);
114 cast<eInstructionSet::eIS_Sse2>(nez, packFromNez);
115 bitwiseAnd<eInstructionSet::eIS_Sse2>(packFromNez, one, packFromNez);
117 cast<eInstructionSet::eIS_Sse2>(packFromNez, out);
120 static IPSDK_FORCEINLINE
126 assign<eInstructionSet::eIS_Sse2>(one, 1);
127 cast<eInstructionSet::eIS_Sse2>(in, packFromIn);
128 bitwiseAnd<eInstructionSet::eIS_Sse2>(packFromIn, one, packFromIn);
130 cast<eInstructionSet::eIS_Sse2>(packFromIn, out);
136 template <
typename T>
138 typename boost::enable_if_c<
139 boost::is_integral<T>::value && sizeof(T) != 1>::type>
141 static IPSDK_FORCEINLINE
146 assign<eInstructionSet::eIS_Sse2>(zero, 0);
147 assign<eInstructionSet::eIS_Sse2>(one, 1);
151 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, nez);
152 cast<eInstructionSet::eIS_Sse2>(nez, packT);
153 bitwiseAnd<eInstructionSet::eIS_Sse2>(packT, one, packT);
154 return cast<eInstructionSet::eIS_Sse2, ipUInt8>(packT);
157 static IPSDK_FORCEINLINE
163 assign<eInstructionSet::eIS_Sse2>(zero, 0);
164 assign<eInstructionSet::eIS_Sse2>(one, 1);
167 isNotEqual<eInstructionSet::eIS_Sse2>(in, zero, nez);
168 cast<eInstructionSet::eIS_Sse2>(nez, packT);
169 bitwiseAnd<eInstructionSet::eIS_Sse2>(packT, one, packT);
171 cast<eInstructionSet::eIS_Sse2>(packT, out);
174 static IPSDK_FORCEINLINE
180 assign<eInstructionSet::eIS_Sse2>(one, 1);
182 cast<eInstructionSet::eIS_Sse2>(in, packT);
183 bitwiseAnd<eInstructionSet::eIS_Sse2>(packT, one, packT);
185 cast<eInstructionSet::eIS_Sse2>(packT, out);
195 static IPSDK_FORCEINLINE
200 inCvt._val[0] = _mm_castps_si128(in._val[0]);
201 inCvt._val[1] = _mm_castps_si128(in._val[1]);
202 inCvt._val[2] = _mm_castps_si128(in._val[2]);
203 inCvt._val[3] = _mm_castps_si128(in._val[3]);
208 static IPSDK_FORCEINLINE
214 inCvt._val[0] = _mm_castps_si128(in._val[0]);
215 inCvt._val[1] = _mm_castps_si128(in._val[1]);
216 inCvt._val[2] = _mm_castps_si128(in._val[2]);
217 inCvt._val[3] = _mm_castps_si128(in._val[3]);
222 static IPSDK_FORCEINLINE
228 inCvt._val[0] = _mm_castps_si128(in._val[0]);
229 inCvt._val[1] = _mm_castps_si128(in._val[1]);
230 inCvt._val[2] = _mm_castps_si128(in._val[2]);
231 inCvt._val[3] = _mm_castps_si128(in._val[3]);
244 #endif // __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_SSE2_TOBOOLPACK_H__ Definition: BasePack.h:37
int8_t ipInt8
Base types definition.
Definition: BaseTypes.h:48
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
cast function; casts a Pack<instructionSet, TIn> to a Pack<instructionSet, TOut>
structure containing set of masks for vectorized operations
Definition: BaseMaskPackDecl.h:29
uint8_t ipUInt8
Base types definition.
Definition: BaseTypes.h:49
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
function assigning a given value of type T to a given Pack<instructionSet, T>
Definition: ToBoolPack.h:30
Definition of import/export macro for library.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
Definition: BaseMaskPack.h:30
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
structure containing intrinsic registers used to store vectorized data
Definition: BasePackDecl.h:29