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 
45 
46 
47 namespace blaze {
48 
49 //=================================================================================================
50 //
51 // INTRINSIC SUBTRACTION OPERATORS
52 //
53 //=================================================================================================
54 
55 //*************************************************************************************************
64 #if BLAZE_AVX2_MODE
65 inline sse_int8_t operator-( const sse_int8_t& a, const sse_int8_t& b )
66 {
67  return _mm256_sub_epi8( a.value, b.value );
68 }
69 #elif BLAZE_SSE2_MODE
70 inline sse_int8_t operator-( const sse_int8_t& a, const sse_int8_t& b )
71 {
72  return _mm_sub_epi8( a.value, b.value );
73 }
74 #endif
75 //*************************************************************************************************
76 
77 
78 //*************************************************************************************************
87 #if BLAZE_AVX2_MODE
88 inline sse_int16_t operator-( const sse_int16_t& a, const sse_int16_t& b )
89 {
90  return _mm256_sub_epi16( a.value, b.value );
91 }
92 #elif BLAZE_SSE2_MODE
93 inline sse_int16_t operator-( const sse_int16_t& a, const sse_int16_t& b )
94 {
95  return _mm_sub_epi16( a.value, b.value );
96 }
97 #endif
98 //*************************************************************************************************
99 
100 
101 //*************************************************************************************************
110 #if BLAZE_MIC_MODE
111 inline sse_int64_t operator-( const sse_int32_t& a, const sse_int32_t& b )
112 {
113  return _mm512_sub_epi32( a.value, b.value );
114 }
115 #elif BLAZE_AVX2_MODE
116 inline sse_int32_t operator-( const sse_int32_t& a, const sse_int32_t& b )
117 {
118  return _mm256_sub_epi32( a.value, b.value );
119 }
120 #elif BLAZE_SSE2_MODE
121 inline sse_int32_t operator-( const sse_int32_t& a, const sse_int32_t& b )
122 {
123  return _mm_sub_epi32( a.value, b.value );
124 }
125 #endif
126 //*************************************************************************************************
127 
128 
129 //*************************************************************************************************
138 #if BLAZE_AVX2_MODE
139 inline sse_int64_t operator-( const sse_int64_t& a, const sse_int64_t& b )
140 {
141  return _mm256_sub_epi64( a.value, b.value );
142 }
143 #elif BLAZE_SSE2_MODE
144 inline sse_int64_t operator-( const sse_int64_t& a, const sse_int64_t& b )
145 {
146  return _mm_sub_epi64( a.value, b.value );
147 }
148 #endif
149 //*************************************************************************************************
150 
151 
152 //*************************************************************************************************
161 #if BLAZE_MIC_MODE
162 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
163 {
164  return _mm512_sub_ps( a.value, b.value );
165 }
166 #elif BLAZE_AVX_MODE
167 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
168 {
169  return _mm256_sub_ps( a.value, b.value );
170 }
171 #elif BLAZE_SSE_MODE
172 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
173 {
174  return _mm_sub_ps( a.value, b.value );
175 }
176 #endif
177 //*************************************************************************************************
178 
179 
180 //*************************************************************************************************
189 #if BLAZE_MIC_MODE
190 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
191 {
192  return _mm512_sub_pd( a.value, b.value );
193 }
194 #elif BLAZE_AVX_MODE
195 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
196 {
197  return _mm256_sub_pd( a.value, b.value );
198 }
199 #elif BLAZE_SSE2_MODE
200 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
201 {
202  return _mm_sub_pd( a.value, b.value );
203 }
204 #endif
205 //*************************************************************************************************
206 
207 
208 //*************************************************************************************************
217 #if BLAZE_MIC_MODE
218 inline sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
219 {
220  return _mm512_sub_ps( a.value, b.value );
221 }
222 #elif BLAZE_AVX_MODE
223 inline sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
224 {
225  return _mm256_sub_ps( a.value, b.value );
226 }
227 #elif BLAZE_SSE_MODE
228 inline sse_cfloat_t operator-( const sse_cfloat_t& a, const sse_cfloat_t& b )
229 {
230  return _mm_sub_ps( a.value, b.value );
231 }
232 #endif
233 //*************************************************************************************************
234 
235 
236 //*************************************************************************************************
245 #if BLAZE_MIC_MODE
246 inline sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
247 {
248  return _mm512_sub_pd( a.value, b.value );
249 }
250 #elif BLAZE_AVX_MODE
251 inline sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
252 {
253  return _mm256_sub_pd( a.value, b.value );
254 }
255 #elif BLAZE_SSE2_MODE
256 inline sse_cdouble_t operator-( const sse_cdouble_t& a, const sse_cdouble_t& b )
257 {
258  return _mm_sub_pd( a.value, b.value );
259 }
260 #endif
261 //*************************************************************************************************
262 
263 } // namespace blaze
264 
265 #endif
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.