35 #ifndef _BLAZE_MATH_INTRINSICS_INTRINSICTRAIT_H_
36 #define _BLAZE_MATH_INTRINSICS_INTRINSICTRAIT_H_
68 struct IntrinsicTraitHelper;
80 struct IntrinsicTraitHelper<1UL>
82 typedef sse_int8_t Type;
92 struct IntrinsicTraitHelper<1UL>
94 typedef sse_int8_t Type;
114 struct IntrinsicTraitHelper<2UL>
116 typedef sse_int16_t Type;
126 struct IntrinsicTraitHelper<2UL>
128 typedef sse_int16_t Type;
148 struct IntrinsicTraitHelper<4UL>
150 typedef sse_int32_t Type;
158 #elif BLAZE_AVX2_MODE
160 struct IntrinsicTraitHelper<4UL>
162 typedef sse_int32_t Type;
172 struct IntrinsicTraitHelper<4UL>
174 typedef sse_int32_t Type;
194 struct IntrinsicTraitHelper<8UL>
196 typedef sse_int64_t Type;
204 #elif BLAZE_AVX2_MODE
206 struct IntrinsicTraitHelper<8UL>
208 typedef sse_int64_t Type;
218 struct IntrinsicTraitHelper<8UL>
220 typedef sse_int64_t Type;
246 template<
typename T >
247 struct IntrinsicTraitBase
251 alignment = AlignmentTrait<T>::value,
268 struct IntrinsicTraitBase<char>
271 typedef IntrinsicTraitHelper<sizeof(char)> Helper;
274 typedef Helper::Type Type;
275 enum { size = Helper::size,
276 alignment = AlignmentTrait<char>::value,
277 addition = Helper::addition,
278 subtraction = Helper::subtraction,
279 multiplication = Helper::multiplication,
280 division = Helper::division,
281 absoluteValue = Helper::absoluteValue };
293 struct IntrinsicTraitBase<signed char>
296 typedef IntrinsicTraitHelper<sizeof(signed char)> Helper;
299 typedef Helper::Type Type;
300 enum { size = Helper::size,
301 alignment = AlignmentTrait<signed char>::value,
302 addition = Helper::addition,
303 subtraction = Helper::subtraction,
304 multiplication = Helper::multiplication,
305 division = Helper::division,
306 absoluteValue = Helper::absoluteValue };
318 struct IntrinsicTraitBase<unsigned char>
321 typedef IntrinsicTraitHelper<sizeof(unsigned char)> Helper;
324 typedef Helper::Type Type;
325 enum { size = Helper::size,
326 alignment = AlignmentTrait<unsigned char>::value,
327 addition = Helper::addition,
328 subtraction = Helper::subtraction,
329 multiplication = Helper::multiplication,
330 division = Helper::division,
331 absoluteValue = Helper::absoluteValue };
343 struct IntrinsicTraitBase<wchar_t>
346 typedef IntrinsicTraitHelper<sizeof(wchar_t)> Helper;
349 typedef Helper::Type Type;
350 enum { size = Helper::size,
351 alignment = AlignmentTrait<wchar_t>::value,
352 addition = Helper::addition,
353 subtraction = Helper::subtraction,
354 multiplication = Helper::multiplication,
355 division = Helper::division,
356 absoluteValue = Helper::absoluteValue };
368 struct IntrinsicTraitBase<short>
371 typedef IntrinsicTraitHelper<sizeof(short)> Helper;
374 typedef Helper::Type Type;
375 enum { size = Helper::size,
376 alignment = AlignmentTrait<short>::value,
377 addition = Helper::addition,
378 subtraction = Helper::subtraction,
379 multiplication = Helper::multiplication,
380 division = Helper::division,
381 absoluteValue = Helper::absoluteValue };
393 struct IntrinsicTraitBase<unsigned short>
396 typedef IntrinsicTraitHelper<sizeof(unsigned short)> Helper;
399 typedef Helper::Type Type;
400 enum { size = Helper::size,
401 alignment = AlignmentTrait<unsigned short>::value,
402 addition = Helper::addition,
403 subtraction = Helper::subtraction,
404 multiplication = Helper::multiplication,
405 division = Helper::division,
406 absoluteValue = Helper::absoluteValue };
418 struct IntrinsicTraitBase<int>
421 typedef IntrinsicTraitHelper<sizeof(int)> Helper;
424 typedef Helper::Type Type;
425 enum { size = Helper::size,
426 alignment = AlignmentTrait<int>::value,
427 addition = Helper::addition,
428 subtraction = Helper::subtraction,
429 multiplication = Helper::multiplication,
430 division = Helper::division,
431 absoluteValue = Helper::absoluteValue };
443 struct IntrinsicTraitBase<unsigned int>
446 typedef IntrinsicTraitHelper<sizeof(unsigned int)> Helper;
449 typedef Helper::Type Type;
450 enum { size = Helper::size,
451 alignment = AlignmentTrait<unsigned int>::value,
452 addition = Helper::addition,
453 subtraction = Helper::subtraction,
454 multiplication = Helper::multiplication,
455 division = Helper::division,
456 absoluteValue = Helper::absoluteValue };
468 struct IntrinsicTraitBase<long>
471 typedef IntrinsicTraitHelper<sizeof(long)> Helper;
474 typedef Helper::Type Type;
475 enum { size = Helper::size,
476 alignment = AlignmentTrait<long>::value,
477 addition = Helper::addition,
478 subtraction = Helper::subtraction,
479 multiplication = Helper::multiplication,
480 division = Helper::division,
481 absoluteValue = Helper::absoluteValue };
493 struct IntrinsicTraitBase<unsigned long>
496 typedef IntrinsicTraitHelper<sizeof(unsigned long)> Helper;
499 typedef Helper::Type Type;
500 enum { size = Helper::size,
501 alignment = AlignmentTrait<unsigned long>::value,
502 addition = Helper::addition,
503 subtraction = Helper::subtraction,
504 multiplication = Helper::multiplication,
505 division = Helper::division,
506 absoluteValue = Helper::absoluteValue };
518 struct IntrinsicTraitBase<float>
520 typedef sse_float_t Type;
521 enum { size = ( 64UL /
sizeof(float) ),
522 alignment = AlignmentTrait<float>::value,
531 struct IntrinsicTraitBase<float>
533 typedef sse_float_t Type;
534 enum { size = ( 32UL /
sizeof(float) ),
535 alignment = AlignmentTrait<float>::value,
544 struct IntrinsicTraitBase<float>
546 typedef sse_float_t Type;
548 alignment = AlignmentTrait<float>::value,
567 struct IntrinsicTraitBase<double>
569 typedef sse_double_t Type;
570 enum { size = ( 64UL /
sizeof(double) ),
571 alignment = AlignmentTrait<double>::value,
580 struct IntrinsicTraitBase<double>
582 typedef sse_double_t Type;
583 enum { size = ( 32UL /
sizeof(double) ),
584 alignment = AlignmentTrait<double>::value,
593 struct IntrinsicTraitBase<double>
595 typedef sse_double_t Type;
597 alignment = AlignmentTrait<double>::value,
616 struct IntrinsicTraitBase< complex<float> >
618 typedef sse_cfloat_t Type;
619 enum { size = ( 64UL /
sizeof(complex<float>) ),
620 alignment = AlignmentTrait< complex<float> >::value,
631 struct IntrinsicTraitBase< complex<float> >
633 typedef sse_cfloat_t Type;
634 enum { size = ( 32UL /
sizeof(complex<float>) ),
635 alignment = AlignmentTrait< complex<float> >::value,
646 struct IntrinsicTraitBase< complex<float> >
648 typedef sse_cfloat_t Type;
649 enum { size = (
BLAZE_SSE_MODE )?( 16UL /
sizeof(complex<float>) ):( 1 ),
650 alignment = AlignmentTrait< complex<float> >::value,
671 struct IntrinsicTraitBase< complex<double> >
673 typedef sse_cdouble_t Type;
674 enum { size = ( 64UL /
sizeof(complex<double>) ),
675 alignment = AlignmentTrait< complex<double> >::value,
686 struct IntrinsicTraitBase< complex<double> >
688 typedef sse_cdouble_t Type;
689 enum { size = ( 32UL /
sizeof(complex<double>) ),
690 alignment = AlignmentTrait< complex<double> >::value,
701 struct IntrinsicTraitBase< complex<double> >
703 typedef sse_cdouble_t Type;
704 enum { size = (
BLAZE_SSE_MODE )?( 16UL /
sizeof(complex<double>) ):( 1 ),
705 alignment = AlignmentTrait< complex<double> >::value,
747 template<
typename T >
#define BLAZE_SSE3_MODE
Compilation switch for the SSE3 mode.This compilation switch enables/disables the SSE3 mode...
Definition: Vectorization.h:101
#define BLAZE_SSSE3_MODE
Compilation switch for the SSSE3 mode.This compilation switch enables/disables the SSSE3 mode...
Definition: Vectorization.h:118
#define BLAZE_SSE_MODE
Compilation switch for the SSE mode.This compilation switch enables/disables the SSE mode...
Definition: Vectorization.h:67
Header file for the basic intrinsic types.
Header file for all type traits.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:748
#define BLAZE_SSE4_MODE
Compilation switch for the SSE4 mode.This compilation switch enables/disables the SSE4 mode...
Definition: Vectorization.h:135
Header file for the alignment trait.
System settings for the SSE mode.
Header file for the complex data type.
#define BLAZE_SSE2_MODE
Compilation switch for the SSE2 mode.This compilation switch enables/disables the SSE2 mode...
Definition: Vectorization.h:84
#define BLAZE_STATIC_ASSERT(expr)
Compile time assertion macro.In case of an invalid compile time expression, a compilation error is cr...
Definition: StaticAssert.h:143