15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_MASKCASTREG_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_MASKCASTREG_H__ 24 #include <boost/mpl/and.hpp> 25 #include <boost/mpl/equal_to.hpp> 26 #include <boost/mpl/int.hpp> 27 #include <boost/mpl/not.hpp> 28 #include <boost/mpl/or.hpp> 29 #include <boost/mpl/sizeof.hpp> 30 #include <boost/type_traits/is_signed.hpp> 41 template <
typename TIn,
typename TOut>
46 typename boost::enable_if<
47 typename boost::mpl::equal_to<
48 boost::mpl::sizeof_<TIn>,
49 boost::mpl::sizeof_<TOut>
54 static IPSDK_FORCEINLINE
64 template <
typename TIn,
typename TOut>
69 typename boost::enable_if<
70 typename boost::mpl::and_<
71 typename boost::mpl::equal_to<
72 boost::mpl::sizeof_<TIn>,
75 typename boost::mpl::equal_to<
76 boost::mpl::sizeof_<TOut>,
83 static IPSDK_FORCEINLINE
90 out1 =
static_cast<RegMaskOut
>((in & 0xFFFFFFFF00000000) >> 32);
91 out0 =
static_cast<RegMaskOut
>(in & 0x00000000FFFFFFFF);
97 template <
typename TIn,
typename TOut>
102 typename boost::enable_if<
103 typename boost::mpl::and_<
104 typename boost::mpl::equal_to<
105 boost::mpl::sizeof_<TIn>,
108 typename boost::mpl::equal_to<
109 boost::mpl::sizeof_<TOut>,
116 static IPSDK_FORCEINLINE
125 out3 =
static_cast<RegMaskOut
>((in & 0xFFFF000000000000) >> 48);
126 out2 =
static_cast<RegMaskOut
>((in & 0x0000FFFF00000000) >> 32);
127 out1 =
static_cast<RegMaskOut
>((in & 0x00000000FFFF0000) >> 16);
128 out0 =
static_cast<RegMaskOut
>(in & 0x000000000000FFFF);
134 template <
typename TIn,
typename TOut>
139 typename boost::enable_if<
140 typename boost::mpl::and_<
141 typename boost::mpl::equal_to<
142 boost::mpl::sizeof_<TIn>,
145 typename boost::mpl::equal_to<
146 boost::mpl::sizeof_<TOut>,
153 static IPSDK_FORCEINLINE
166 out7 =
static_cast<RegMaskOut
>((in & 0xFF00000000000000) >> 56);
167 out6 =
static_cast<RegMaskOut
>((in & 0x00FF000000000000) >> 48);
168 out5 =
static_cast<RegMaskOut
>((in & 0x0000FF0000000000) >> 40);
169 out4 =
static_cast<RegMaskOut
>((in & 0x000000FF00000000) >> 32);
170 out3 =
static_cast<RegMaskOut
>((in & 0x00000000FF000000) >> 24);
171 out2 =
static_cast<RegMaskOut
>((in & 0x0000000000FF0000) >> 16);
172 out1 =
static_cast<RegMaskOut
>((in & 0x000000000000FF00) >> 8);
173 out0 =
static_cast<RegMaskOut
>(in & 0x00000000000000FF);
179 template <
typename TIn,
typename TOut>
184 typename boost::enable_if<
185 typename boost::mpl::and_<
186 typename boost::mpl::equal_to<
187 boost::mpl::sizeof_<TIn>,
190 typename boost::mpl::equal_to<
191 boost::mpl::sizeof_<TOut>,
198 static IPSDK_FORCEINLINE
205 out1 =
static_cast<RegMaskOut
>((in & 0xFFFF0000) >> 16);
206 out0 =
static_cast<RegMaskOut
>(in & 0x0000FFFF);
212 template <
typename TIn,
typename TOut>
217 typename boost::enable_if<
218 typename boost::mpl::and_<
219 typename boost::mpl::equal_to<
220 boost::mpl::sizeof_<TIn>,
223 typename boost::mpl::equal_to<
224 boost::mpl::sizeof_<TOut>,
231 static IPSDK_FORCEINLINE
240 out3 =
static_cast<RegMaskOut
>((in & 0xFF000000) >> 24);
241 out2 =
static_cast<RegMaskOut
>((in & 0x00FF0000) >> 16);
242 out1 =
static_cast<RegMaskOut
>((in & 0x0000FF00) >> 8);
243 out0 =
static_cast<RegMaskOut
>(in & 0x000000FF);
249 template <
typename TIn,
typename TOut>
254 typename boost::enable_if<
255 typename boost::mpl::and_<
256 typename boost::mpl::equal_to<
257 boost::mpl::sizeof_<TIn>,
260 typename boost::mpl::equal_to<
261 boost::mpl::sizeof_<TOut>,
268 static IPSDK_FORCEINLINE
275 out1 =
static_cast<RegMaskOut
>((in & 0xFF00) >> 8);
276 out0 =
static_cast<RegMaskOut
>(in & 0x00FF);
282 template <
typename TIn,
typename TOut>
287 typename boost::enable_if<
288 typename boost::mpl::and_<
289 typename boost::mpl::equal_to<
290 boost::mpl::sizeof_<TIn>,
293 typename boost::mpl::equal_to<
294 boost::mpl::sizeof_<TOut>,
301 static IPSDK_FORCEINLINE
308 out = (
static_cast<OutRegMaskType
>(in1) << 32) |
static_cast<OutRegMaskType
>(in0);
314 template <
typename TIn,
typename TOut>
319 typename boost::enable_if<
320 typename boost::mpl::and_<
321 typename boost::mpl::equal_to<
322 boost::mpl::sizeof_<TIn>,
325 typename boost::mpl::equal_to<
326 boost::mpl::sizeof_<TOut>,
333 static IPSDK_FORCEINLINE
340 out = (
static_cast<OutRegMaskType
>(in1) << 16) |
static_cast<OutRegMaskType
>(in0);
346 template <
typename TIn,
typename TOut>
351 typename boost::enable_if<
352 typename boost::mpl::and_<
353 typename boost::mpl::equal_to<
354 boost::mpl::sizeof_<TIn>,
357 typename boost::mpl::equal_to<
358 boost::mpl::sizeof_<TOut>,
365 static IPSDK_FORCEINLINE
374 out = (
static_cast<OutRegMaskType
>(in3) << 48) | (
static_cast<OutRegMaskType
>(in2) << 32) | (
static_cast<OutRegMaskType
>(in1) << 16) |
static_cast<OutRegMaskType
>(in0);
380 template <
typename TIn,
typename TOut>
385 typename boost::enable_if<
386 typename boost::mpl::and_<
387 typename boost::mpl::equal_to<
388 boost::mpl::sizeof_<TIn>,
391 typename boost::mpl::equal_to<
392 boost::mpl::sizeof_<TOut>,
399 static IPSDK_FORCEINLINE
406 out = (
static_cast<OutRegMaskType
>(in1) << 8) |
static_cast<OutRegMaskType
>(in0);
412 template <
typename TIn,
typename TOut>
417 typename boost::enable_if<
418 typename boost::mpl::and_<
419 typename boost::mpl::equal_to<
420 boost::mpl::sizeof_<TIn>,
423 typename boost::mpl::equal_to<
424 boost::mpl::sizeof_<TOut>,
431 static IPSDK_FORCEINLINE
440 out = (
static_cast<OutRegMaskType
>(in3) << 24) | (
static_cast<OutRegMaskType
>(in2) << 16) | (
static_cast<OutRegMaskType
>(in1) << 8) |
static_cast<OutRegMaskType
>(in0);
446 template <
typename TIn,
typename TOut>
451 typename boost::enable_if<
452 typename boost::mpl::and_<
453 typename boost::mpl::equal_to<
454 boost::mpl::sizeof_<TIn>,
457 typename boost::mpl::equal_to<
458 boost::mpl::sizeof_<TOut>,
465 static IPSDK_FORCEINLINE
478 out = (
static_cast<OutRegMaskType
>(in7) << 56) | (
static_cast<OutRegMaskType
>(in6) << 48) | (
static_cast<OutRegMaskType
>(in5) << 40) | (
static_cast<OutRegMaskType
>(in4) << 32) |
479 (
static_cast<OutRegMaskType
>(in3) << 24) | (
static_cast<OutRegMaskType
>(in2) << 16) | (
static_cast<OutRegMaskType
>(in1) << 8) |
static_cast<OutRegMaskType
>(in0);
490 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX512_MASKCASTREG_H__
Definition: MaskCastReg.h:30
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
(including fundation and byte and word instructions)
Definition: InstructionSetTypes.h:51
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Definition of import/export macro for library.
Definition: RegMaskType.h:29