All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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/Complex.h>
45 #include <blaze/util/FalseType.h>
46 #include <blaze/util/SelectType.h>
47 #include <blaze/util/TrueType.h>
52 
53 
54 namespace blaze {
55 
56 //=================================================================================================
57 //
58 // CLASS DEFINITION
59 //
60 //=================================================================================================
61 
62 //*************************************************************************************************
67 template< typename T >
68 struct IsVectorizableHelper
69 {
70  //**********************************************************************************************
71  enum { value = ( BLAZE_SSE_MODE && ( IsFloat<T>::value || IsSame<complex<float>,T>::value ) ) ||
72  ( BLAZE_SSE2_MODE && ( IsDouble<T>::value || IsSame<complex<double>,T>::value ) ) ||
73  ( BLAZE_SSE2_MODE && ( IsIntegral<T>::value && sizeof(T) >= 2UL ) ) ||
74  ( BLAZE_MIC_MODE && ( IsIntegral<T>::value && sizeof(T) >= 4UL ) ) ||
75  ( BLAZE_MIC_MODE && ( IsFloat<T>::value || IsSame<complex<float>,T>::value ) ) ||
76  ( BLAZE_MIC_MODE && ( IsDouble<T>::value || IsSame<complex<double>,T>::value ) ) };
77  typedef typename SelectType<value,TrueType,FalseType>::Type Type;
78  //**********************************************************************************************
79 };
81 //*************************************************************************************************
82 
83 
84 //*************************************************************************************************
106 template< typename T >
107 struct IsVectorizable : public IsVectorizableHelper<T>::Type
108 {
109  public:
110  //**********************************************************************************************
112  enum { value = IsVectorizableHelper<T>::value };
113  typedef typename IsVectorizableHelper<T>::Type Type;
115  //**********************************************************************************************
116 };
117 //*************************************************************************************************
118 
119 } // namespace blaze
120 
121 #endif
Compile time check for vectorizable types.Depending on the available instruction set (SSE...
Definition: IsVectorizable.h:107
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:185
Header file for the IsSame and IsStrictlySame type traits.
Header file for the IsIntegral type trait.
Header file for the IsFloat type trait.
Header file for the IsDouble type trait.
#define BLAZE_SSE_MODE
Compilation switch for the SSE mode.This compilation switch enables/disables the SSE mode...
Definition: Vectorization.h:66
Header file for the SelectType class template.
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:83
Header file for the TrueType type/value trait base class.