IsVectorizable.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_UTIL_TYPETRAITS_ISVECTORIZABLE_H_
36 #define _BLAZE_UTIL_TYPETRAITS_ISVECTORIZABLE_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
44 #include <blaze/util/FalseType.h>
45 #include <blaze/util/SelectType.h>
46 #include <blaze/util/TrueType.h>
50 
51 
52 namespace blaze {
53 
54 //=================================================================================================
55 //
56 // CLASS DEFINITION
57 //
58 //=================================================================================================
59 
60 //*************************************************************************************************
65 template< typename T >
66 struct IsVectorizableHelper
67 {
68  private:
69  //**struct Builtin******************************************************************************
70  template< typename BT >
71  struct Builtin { typedef BT Type; };
72  //**********************************************************************************************
73 
74  //**struct Complex******************************************************************************
75  template< typename CT >
76  struct Complex { typedef typename CT::value_type Type; };
77  //**********************************************************************************************
78 
79  //**********************************************************************************************
80  typedef typename SelectType< IsComplex<T>::value, Complex<T>, Builtin<T> >::Type::Type T2;
81  //**********************************************************************************************
82 
83  public:
84  //**********************************************************************************************
85  enum { value = ( BLAZE_SSE_MODE && ( IsFloat<T2>::value ) ) ||
86  ( BLAZE_SSE2_MODE && ( IsNumeric<T2>::value ) ) ||
87  ( BLAZE_MIC_MODE && ( IsNumeric<T2>::value && sizeof(T2) >= 4UL ) ) };
88  typedef typename SelectType<value,TrueType,FalseType>::Type Type;
89  //**********************************************************************************************
90 };
92 //*************************************************************************************************
93 
94 
95 //*************************************************************************************************
117 template< typename T >
118 struct IsVectorizable : public IsVectorizableHelper<T>::Type
119 {
120  public:
121  //**********************************************************************************************
123  enum { value = IsVectorizableHelper<T>::value };
124  typedef typename IsVectorizableHelper<T>::Type Type;
126  //**********************************************************************************************
127 };
128 //*************************************************************************************************
129 
130 } // namespace blaze
131 
132 #endif
Compile time check for vectorizable types.Depending on the available instruction set (SSE...
Definition: IsVectorizable.h:118
Header file for the FalseType type/value trait base class.
#define BLAZE_MIC_MODE
Compilation switch for the MIC mode.This compilation switch enables/disables the MIC mode...
Definition: Vectorization.h:248
Header file for the IsFloat type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_SSE_MODE
Compilation switch for the SSE mode.This compilation switch enables/disables the SSE mode...
Definition: Vectorization.h:129
Header file for the SelectType class template.
Header file for the IsNumeric type trait.
Header file for the IsComplex type trait.
System settings for the SSE mode.
#define BLAZE_SSE2_MODE
Compilation switch for the SSE2 mode.This compilation switch enables/disables the SSE2 mode...
Definition: Vectorization.h:146
Header file for the TrueType type/value trait base class.