15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_BINARYPACKOP_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_BINARYPACKOP_H__ 31 class OpClass,
typename Scalar>
33 typename boost::enable_if_c<sizeof(T) == 1>::type>
35 static IPSDK_FORCEINLINE
41 out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
45 static IPSDK_FORCEINLINE
51 OpClass::act(in1._val[0], in2._val[0], out._val[0]);
54 static IPSDK_FORCEINLINE
59 OpClass::act(inOut1._val[0], inOut2._val[0]);
69 OpClass::act(in1._val[0], in2, out._val[0]);
73 template <
typename T,
class OpClass,
typename Scalar>
75 typename boost::enable_if_c<sizeof(T) == 2>::type>
77 static IPSDK_FORCEINLINE
83 out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
84 out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
88 static IPSDK_FORCEINLINE
94 OpClass::act(in1._val[0], in2._val[0], out._val[0]);
95 OpClass::act(in1._val[1], in2._val[1], out._val[1]);
98 static IPSDK_FORCEINLINE
103 OpClass::act(inOut1._val[0], inOut2._val[0]);
104 OpClass::act(inOut1._val[1], inOut2._val[1]);
114 OpClass::act(in1._val[0], in2, out._val[0]);
115 OpClass::act(in1._val[1], in2, out._val[1]);
119 template <
typename T,
class OpClass,
typename Scalar>
121 typename boost::enable_if_c<sizeof(T) == 4>::type>
123 static IPSDK_FORCEINLINE
129 out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
130 out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
131 out._val[2] = OpClass::act(in1._val[2], in2._val[2]);
132 out._val[3] = OpClass::act(in1._val[3], in2._val[3]);
136 static IPSDK_FORCEINLINE
142 OpClass::act(in1._val[0], in2._val[0], out._val[0]);
143 OpClass::act(in1._val[1], in2._val[1], out._val[1]);
144 OpClass::act(in1._val[2], in2._val[2], out._val[2]);
145 OpClass::act(in1._val[3], in2._val[3], out._val[3]);
148 static IPSDK_FORCEINLINE
153 OpClass::act(inOut1._val[0], inOut2._val[0]);
154 OpClass::act(inOut1._val[1], inOut2._val[1]);
155 OpClass::act(inOut1._val[2], inOut2._val[2]);
156 OpClass::act(inOut1._val[3], inOut2._val[3]);
166 OpClass::act(in1._val[0], in2, out._val[0]);
167 OpClass::act(in1._val[1], in2, out._val[1]);
168 OpClass::act(in1._val[2], in2, out._val[2]);
169 OpClass::act(in1._val[3], in2, out._val[3]);
173 template <
typename T,
class OpClass,
typename Scalar>
175 typename boost::enable_if_c<sizeof(T) == 8>::type>
177 static IPSDK_FORCEINLINE
183 out._val[0] = OpClass::act(in1._val[0], in2._val[0]);
184 out._val[1] = OpClass::act(in1._val[1], in2._val[1]);
185 out._val[2] = OpClass::act(in1._val[2], in2._val[2]);
186 out._val[3] = OpClass::act(in1._val[3], in2._val[3]);
187 out._val[4] = OpClass::act(in1._val[4], in2._val[4]);
188 out._val[5] = OpClass::act(in1._val[5], in2._val[5]);
189 out._val[6] = OpClass::act(in1._val[6], in2._val[6]);
190 out._val[7] = OpClass::act(in1._val[7], in2._val[7]);
194 static IPSDK_FORCEINLINE
200 OpClass::act(in1._val[0], in2._val[0], out._val[0]);
201 OpClass::act(in1._val[1], in2._val[1], out._val[1]);
202 OpClass::act(in1._val[2], in2._val[2], out._val[2]);
203 OpClass::act(in1._val[3], in2._val[3], out._val[3]);
204 OpClass::act(in1._val[4], in2._val[4], out._val[4]);
205 OpClass::act(in1._val[5], in2._val[5], out._val[5]);
206 OpClass::act(in1._val[6], in2._val[6], out._val[6]);
207 OpClass::act(in1._val[7], in2._val[7], out._val[7]);
210 static IPSDK_FORCEINLINE
215 OpClass::act(inOut1._val[0], inOut2._val[0]);
216 OpClass::act(inOut1._val[1], inOut2._val[1]);
217 OpClass::act(inOut1._val[2], inOut2._val[2]);
218 OpClass::act(inOut1._val[3], inOut2._val[3]);
219 OpClass::act(inOut1._val[4], inOut2._val[4]);
220 OpClass::act(inOut1._val[5], inOut2._val[5]);
221 OpClass::act(inOut1._val[6], inOut2._val[6]);
222 OpClass::act(inOut1._val[7], inOut2._val[7]);
232 OpClass::act(in1._val[0], in2, out._val[0]);
233 OpClass::act(in1._val[1], in2, out._val[1]);
234 OpClass::act(in1._val[2], in2, out._val[2]);
235 OpClass::act(in1._val[3], in2, out._val[3]);
236 OpClass::act(in1._val[4], in2, out._val[4]);
237 OpClass::act(in1._val[5], in2, out._val[5]);
238 OpClass::act(in1._val[6], in2, out._val[6]);
239 OpClass::act(in1._val[7], in2, out._val[7]);
250 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_BINARYPACKOP_H__ Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Advanced Vector Extensions 2.
Definition: InstructionSetTypes.h:48
Predefined types associated to instruction set management.
Definition of import/export macro for library.
Definition: BasePack.h:37
Definition: BinaryPackOp.h:31