Blaze 3.9
HasSIMDAdd.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_TYPETRAITS_HASSIMDADD_H_
36#define _BLAZE_MATH_TYPETRAITS_HASSIMDADD_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
44#include <blaze/util/Complex.h>
45#include <blaze/util/EnableIf.h>
50
51
52namespace blaze {
53
54//=================================================================================================
55//
56// CLASS DEFINITION
57//
58//=================================================================================================
59
60//*************************************************************************************************
65template< typename T1 // Type of the left-hand side operand
66 , typename T2 // Type of the right-hand side operand
67 , typename = void > // Restricting condition
68struct HasSIMDAddHelper
69 : public FalseType
70{};
72//*************************************************************************************************
73
74
75//*************************************************************************************************
77template< typename T1, typename T2 >
78struct HasSIMDAddHelper< T1, T2, EnableIf_t< IsNumeric_v<T1> && IsIntegral_v<T1> &&
79 IsNumeric_v<T2> && IsIntegral_v<T2> &&
80 sizeof(T1) == sizeof(T2) > >
81 : public BoolConstant< ( bool( BLAZE_SSE2_MODE ) ) ||
82 ( bool( BLAZE_AVX2_MODE ) ) ||
83 ( bool( BLAZE_MIC_MODE ) && sizeof(T1) >= 4UL ) ||
84 ( bool( BLAZE_AVX512BW_MODE ) && sizeof(T1) <= 2UL ) ||
85 ( bool( BLAZE_AVX512F_MODE ) && sizeof(T1) >= 4UL ) >
86{};
87
88template< typename T >
89struct HasSIMDAddHelper< complex<T>, complex<T>, EnableIf_t< IsNumeric_v<T> && IsIntegral_v<T> > >
90 : public BoolConstant< ( bool( BLAZE_SSE2_MODE ) ) ||
91 ( bool( BLAZE_AVX2_MODE ) ) ||
92 ( bool( BLAZE_MIC_MODE ) && sizeof(T) >= 4UL ) ||
93 ( bool( BLAZE_AVX512BW_MODE ) && sizeof(T) <= 2UL ) ||
94 ( bool( BLAZE_AVX512F_MODE ) && sizeof(T) >= 4UL ) >
95{};
97//*************************************************************************************************
98
99
100//*************************************************************************************************
102template<>
103struct HasSIMDAddHelper< float, float >
104 : public BoolConstant< bool( BLAZE_SSE_MODE ) ||
105 bool( BLAZE_AVX_MODE ) ||
106 bool( BLAZE_MIC_MODE ) ||
107 bool( BLAZE_AVX512F_MODE ) >
108{};
109
110template<>
111struct HasSIMDAddHelper< complex<float>, complex<float> >
112 : public BoolConstant< bool( BLAZE_SSE_MODE ) ||
113 bool( BLAZE_AVX_MODE ) ||
114 bool( BLAZE_MIC_MODE ) ||
115 bool( BLAZE_AVX512F_MODE ) >
116{};
118//*************************************************************************************************
119
120
121//*************************************************************************************************
123template<>
124struct HasSIMDAddHelper< double, double >
125 : public BoolConstant< bool( BLAZE_SSE2_MODE ) ||
126 bool( BLAZE_AVX_MODE ) ||
127 bool( BLAZE_MIC_MODE ) ||
128 bool( BLAZE_AVX512F_MODE ) >
129{};
130
131template<>
132struct HasSIMDAddHelper< complex<double>, complex<double> >
133 : public BoolConstant< bool( BLAZE_SSE2_MODE ) ||
134 bool( BLAZE_AVX_MODE ) ||
135 bool( BLAZE_MIC_MODE ) ||
136 bool( BLAZE_AVX512F_MODE ) >
137{};
139//*************************************************************************************************
140
141
142//*************************************************************************************************
163template< typename T1 // Type of the left-hand side operand
164 , typename T2 // Type of the right-hand side operand
165 , typename = void > // Restricting condition
167 : public BoolConstant< HasSIMDAddHelper< RemoveCVRef_t<T1>, RemoveCVRef_t<T2> >::value >
168{};
169//*************************************************************************************************
170
171
172//*************************************************************************************************
185template< typename T1 // Type of the left-hand side operand
186 , typename T2 > // Type of the right-hand side operand
188//*************************************************************************************************
189
190} // namespace blaze
191
192#endif
Header file for the complex data type.
Header file for the EnableIf class template.
Header file for the IntegralConstant class template.
Header file for the IsIntegral type trait.
Header file for the IsNumeric type trait.
Header file for the RemoveCVRef type trait.
Complex data type of the Blaze library.
constexpr bool HasSIMDAdd_v
Auxiliary variable template for the HasSIMDAdd type trait.
Definition: HasSIMDAdd.h:187
#define BLAZE_AVX512F_MODE
Compilation switch for the AVX512F mode.
Definition: Vectorization.h:246
#define BLAZE_AVX512BW_MODE
Compilation switch for the AVX512BW mode.
Definition: Vectorization.h:264
#define BLAZE_AVX2_MODE
Compilation switch for the AVX2 mode.
Definition: Vectorization.h:228
#define BLAZE_MIC_MODE
Compilation switch for the MIC mode.
Definition: Vectorization.h:299
#define BLAZE_SSE2_MODE
Compilation switch for the SSE2 mode.
Definition: Vectorization.h:143
constexpr bool IsNumeric_v
Auxiliary variable template for the IsNumeric type trait.
Definition: IsNumeric.h:132
BoolConstant< false > FalseType
Type/value traits base class.
Definition: IntegralConstant.h:121
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.
Definition: IntegralConstant.h:110
Availability of a SIMD addition for the given data types.
Definition: HasSIMDAdd.h:168
Generic wrapper for a compile time constant integral value.
Definition: IntegralConstant.h:74
System settings for the SSE mode.