All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Subtraction.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_INTRINSICS_SUBTRACTION_H_
36 #define _BLAZE_MATH_INTRINSICS_SUBTRACTION_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
44 #include <blaze/system/Inline.h>
46 
47 
48 namespace blaze {
49 
50 //=================================================================================================
51 //
52 // INTRINSIC SUBTRACTION OPERATORS
53 //
54 //=================================================================================================
55 
56 //*************************************************************************************************
65 #if BLAZE_AVX2_MODE
66 BLAZE_ALWAYS_INLINE sse_int8_t operator-( const sse_int8_t& a, const sse_int8_t& b )
67 {
68  return _mm256_sub_epi8( a.value, b.value );
69 }
70 #elif BLAZE_SSE2_MODE
71 BLAZE_ALWAYS_INLINE sse_int8_t operator-( const sse_int8_t& a, const sse_int8_t& b )
72 {
73  return _mm_sub_epi8( a.value, b.value );
74 }
75 #endif
76 //*************************************************************************************************
77 
78 
79 //*************************************************************************************************
88 #if BLAZE_AVX2_MODE
89 BLAZE_ALWAYS_INLINE sse_int16_t operator-( const sse_int16_t& a, const sse_int16_t& b )
90 {
91  return _mm256_sub_epi16( a.value, b.value );
92 }
93 #elif BLAZE_SSE2_MODE
94 BLAZE_ALWAYS_INLINE sse_int16_t operator-( const sse_int16_t& a, const sse_int16_t& b )
95 {
96  return _mm_sub_epi16( a.value, b.value );
97 }
98 #endif
99 //*************************************************************************************************
100 
101 
102 //*************************************************************************************************
111 #if BLAZE_MIC_MODE
112 BLAZE_ALWAYS_INLINE sse_int64_t operator-( const sse_int32_t& a, const sse_int32_t& b )
113 {
114  return _mm512_sub_epi32( a.value, b.value );
115 }
116 #elif BLAZE_AVX2_MODE
117 BLAZE_ALWAYS_INLINE sse_int32_t operator-( const sse_int32_t& a, const sse_int32_t& b )
118 {
119  return _mm256_sub_epi32( a.value, b.value );
120 }
121 #elif BLAZE_SSE2_MODE
122 BLAZE_ALWAYS_INLINE sse_int32_t operator-( const sse_int32_t& a, const sse_int32_t& b )
123 {
124  return _mm_sub_epi32( a.value, b.value );
125 }
126 #endif
127 //*************************************************************************************************
128 
129 
130 //*************************************************************************************************
139 #if BLAZE_AVX2_MODE
140 BLAZE_ALWAYS_INLINE sse_int64_t operator-( const sse_int64_t& a, const sse_int64_t& b )
141 {
142  return _mm256_sub_epi64( a.value, b.value );
143 }
144 #elif BLAZE_SSE2_MODE
145 BLAZE_ALWAYS_INLINE sse_int64_t operator-( const sse_int64_t& a, const sse_int64_t& b )
146 {
147  return _mm_sub_epi64( a.value, b.value );
148 }
149 #endif
150 //*************************************************************************************************
151 
152 
153 //*************************************************************************************************
162 #if BLAZE_MIC_MODE
163 BLAZE_ALWAYS_INLINE sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
164 {
165  return _mm512_sub_ps( a.value, b.value );
166 }
167 #elif BLAZE_AVX_MODE
168 BLAZE_ALWAYS_INLINE sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
169 {
170  return _mm256_sub_ps( a.value, b.value );
171 }
172 #elif BLAZE_SSE_MODE
173 BLAZE_ALWAYS_INLINE sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
174 {
175  return _mm_sub_ps( a.value, b.value );
176 }
177 #endif
178 //*************************************************************************************************
179 
180 
181 //*************************************************************************************************
190 #if BLAZE_MIC_MODE
191 BLAZE_ALWAYS_INLINE sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
192 {
193  return _mm512_sub_pd( a.value, b.value );
194 }
195 #elif BLAZE_AVX_MODE
196 BLAZE_ALWAYS_INLINE sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
197 {
198  return _mm256_sub_pd( a.value, b.value );
199 }
200 #elif BLAZE_SSE2_MODE
201 BLAZE_ALWAYS_INLINE sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
202 {
203  return _mm_sub_pd( a.value, b.value );
204 }
205 #endif
206 //*************************************************************************************************
207 
208 
209 //*************************************************************************************************
218 #if BLAZE_MIC_MODE
219 BLAZE_ALWAYS_INLINE sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
220 {
221  return _mm512_sub_ps( a.value, b.value );
222 }
223 #elif BLAZE_AVX_MODE
224 BLAZE_ALWAYS_INLINE sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
225 {
226  return _mm256_sub_ps( a.value, b.value );
227 }
228 #elif BLAZE_SSE_MODE
229 BLAZE_ALWAYS_INLINE sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
230 {
231  return _mm_sub_ps( a.value, b.value );
232 }
233 #endif
234 //*************************************************************************************************
235 
236 
237 //*************************************************************************************************
246 #if BLAZE_MIC_MODE
247 BLAZE_ALWAYS_INLINE sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
248 {
249  return _mm512_sub_pd( a.value, b.value );
250 }
251 #elif BLAZE_AVX_MODE
252 BLAZE_ALWAYS_INLINE sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
253 {
254  return _mm256_sub_pd( a.value, b.value );
255 }
256 #elif BLAZE_SSE2_MODE
257 BLAZE_ALWAYS_INLINE sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
258 {
259  return _mm_sub_pd( a.value, b.value );
260 }
261 #endif
262 //*************************************************************************************************
263 
264 } // namespace blaze
265 
266 #endif
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the basic intrinsic types.
const DenseIterator< Type > operator-(const DenseIterator< Type > &it, ptrdiff_t inc)
Subtraction between a DenseIterator and an integral value.
Definition: DenseIterator.h:585
System settings for the SSE mode.
System settings for the inline keywords.