HasSIMDAbs.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TYPETRAITS_HASSIMDABS_H_
36 #define _BLAZE_MATH_TYPETRAITS_HASSIMDABS_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
44 #include <blaze/util/Complex.h>
45 #include <blaze/util/EnableIf.h>
47 #include <blaze/util/mpl/And.h>
55 
56 
57 namespace blaze {
58 
59 //=================================================================================================
60 //
61 // CLASS DEFINITION
62 //
63 //=================================================================================================
64 
65 //*************************************************************************************************
67 template< typename T // Type of the operand
68  , typename = void > // Restricting condition
69 struct HasSIMDAbsHelper
70 {
71  enum : bool { value = false };
72 };
74 //*************************************************************************************************
75 
76 
77 //*************************************************************************************************
79 template< typename T >
80 struct HasSIMDAbsHelper< T, EnableIf_< And< IsNumeric<T>, IsIntegral<T>, IsSigned<T> > > >
81 {
82  enum : bool { value = ( bool( BLAZE_SSSE3_MODE ) && sizeof(T) <= 4UL ) ||
83  ( bool( BLAZE_AVX2_MODE ) && sizeof(T) <= 4UL ) ||
84  ( bool( BLAZE_MIC_MODE ) && sizeof(T) >= 4UL ) ||
85  ( bool( BLAZE_AVX512BW_MODE ) && sizeof(T) <= 2UL ) ||
86  ( bool( BLAZE_AVX512F_MODE ) && sizeof(T) >= 4UL ) };
87 };
88 
89 template< typename T >
90 struct HasSIMDAbsHelper< T, EnableIf_< Or< IsFloat<T>, IsDouble<T> > > >
91 {
92  enum : bool { value = bool( BLAZE_MIC_MODE ) || bool( BLAZE_AVX512F_MODE ) };
93 };
95 //*************************************************************************************************
96 
97 
98 //*************************************************************************************************
119 template< typename T > // Type of the operand
121  : public BoolConstant< HasSIMDAbsHelper< Decay_<T> >::value >
122 {};
123 //*************************************************************************************************
124 
125 } // namespace blaze
126 
127 #endif
#define BLAZE_AVX512F_MODE
Compilation switch for the AVX512F mode.This compilation switch enables/disables the AVX512F mode...
Definition: Vectorization.h:246
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
#define BLAZE_MIC_MODE
Compilation switch for the MIC mode.This compilation switch enables/disables the MIC mode...
Definition: Vectorization.h:299
#define BLAZE_AVX512BW_MODE
Compilation switch for the AVX512BW mode.This compilation switch enables/disables the AVX512BW mode...
Definition: Vectorization.h:264
Header file for the IsIntegral type trait.
Header file for the And class template.
#define BLAZE_AVX2_MODE
Compilation switch for the AVX2 mode.This compilation switch enables/disables the AVX2 mode...
Definition: Vectorization.h:228
Header file for the IsFloat type trait.
Header file for the Decay type trait.
#define BLAZE_SSSE3_MODE
Compilation switch for the SSSE3 mode.This compilation switch enables/disables the SSSE3 mode...
Definition: Vectorization.h:177
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the IsDouble type trait.
Availability of a SIMD absolute value operation for the given data type.Depending on the available in...
Definition: HasSIMDAbs.h:120
Header file for the EnableIf class template.
Header file for the IsNumeric type trait.
Header file for the IsSigned type trait.
Header file for the IsUnsigned type trait.
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:224
Header file for the IntegralConstant class template.
System settings for the SSE mode.
Header file for the complex data type.