35 #ifndef _BLAZE_MATH_SIMD_SUBTRACTION_H_
36 #define _BLAZE_MATH_SIMD_SUBTRACTION_H_
66 template<
typename T >
68 operator-(
const SIMDi8<T>& a,
const SIMDi8<T>& b ) noexcept
71 return _mm256_sub_epi8( (~a).value, (~b).value );
75 return _mm_sub_epi8( (~a).value, (~b).value );
96 operator-(
const SIMDi8<T1>& a,
const SIMDi8<T2>& b ) noexcept
99 return _mm256_sub_epi8( (~a).value, (~b).value );
101 #elif BLAZE_SSE2_MODE
103 return _mm_sub_epi8( (~a).value, (~b).value );
121 template<
typename T >
123 operator-(
const SIMDci8<T>& a,
const SIMDci8<T>& b ) noexcept
126 return _mm256_sub_epi8( (~a).value, (~b).value );
128 #elif BLAZE_SSE2_MODE
130 return _mm_sub_epi8( (~a).value, (~b).value );
156 template<
typename T >
158 operator-(
const SIMDi16<T>& a,
const SIMDi16<T>& b ) noexcept
161 return _mm256_sub_epi16( (~a).value, (~b).value );
163 #elif BLAZE_SSE2_MODE
165 return _mm_sub_epi16( (~a).value, (~b).value );
183 template<
typename T1
186 operator-(
const SIMDi16<T1>& a,
const SIMDi16<T2>& b ) noexcept
189 return _mm256_sub_epi16( (~a).value, (~b).value );
191 #elif BLAZE_SSE2_MODE
193 return _mm_sub_epi16( (~a).value, (~b).value );
211 template<
typename T >
213 operator-(
const SIMDci16<T>& a,
const SIMDci16<T>& b ) noexcept
216 return _mm256_sub_epi16( (~a).value, (~b).value );
218 #elif BLAZE_SSE2_MODE
220 return _mm_sub_epi16( (~a).value, (~b).value );
246 template<
typename T >
248 operator-(
const SIMDi32<T>& a,
const SIMDi32<T>& b ) noexcept
251 return _mm512_sub_epi32( (~a).value, (~b).value );
253 #elif BLAZE_AVX2_MODE
255 return _mm256_sub_epi32( (~a).value, (~b).value );
257 #elif BLAZE_SSE2_MODE
259 return _mm_sub_epi32( (~a).value, (~b).value );
277 template<
typename T1
280 operator-(
const SIMDi32<T1>& a,
const SIMDi32<T2>& b ) noexcept
283 return _mm512_sub_epi32( (~a).value, (~b).value );
285 #elif BLAZE_AVX2_MODE
287 return _mm256_sub_epi32( (~a).value, (~b).value );
289 #elif BLAZE_SSE2_MODE
291 return _mm_sub_epi32( (~a).value, (~b).value );
309 template<
typename T >
311 operator-(
const SIMDci32<T>& a,
const SIMDci32<T>& b ) noexcept
314 return _mm512_sub_epi32( (~a).value, (~b).value );
316 #elif BLAZE_AVX2_MODE
318 return _mm256_sub_epi32( (~a).value, (~b).value );
320 #elif BLAZE_SSE2_MODE
322 return _mm_sub_epi32( (~a).value, (~b).value );
348 template<
typename T >
350 operator-(
const SIMDi64<T>& a,
const SIMDi64<T>& b ) noexcept
353 return _mm512_sub_epi64( (~a).value, (~b).value );
355 #elif BLAZE_AVX2_MODE
357 return _mm256_sub_epi64( (~a).value, (~b).value );
359 #elif BLAZE_SSE2_MODE
361 return _mm_sub_epi64( (~a).value, (~b).value );
379 template<
typename T1
382 operator-(
const SIMDi64<T1>& a,
const SIMDi64<T2>& b ) noexcept
385 return _mm512_sub_epi64( (~a).value, (~b).value );
387 #elif BLAZE_AVX2_MODE
389 return _mm256_sub_epi64( (~a).value, (~b).value );
391 #elif BLAZE_SSE2_MODE
393 return _mm_sub_epi64( (~a).value, (~b).value );
411 template<
typename T >
413 operator-(
const SIMDci64<T>& a,
const SIMDci64<T>& b ) noexcept
416 return _mm512_sub_epi64( (~a).value, (~b).value );
418 #elif BLAZE_AVX2_MODE
420 return _mm256_sub_epi64( (~a).value, (~b).value );
422 #elif BLAZE_SSE2_MODE
424 return _mm_sub_epi64( (~a).value, (~b).value );
450 template<
typename T1
453 operator-(
const SIMDf32<T1>& a,
const SIMDf32<T2>& b ) noexcept
456 return _mm512_sub_ps( (~a).
eval().value, (~b).
eval().value );
460 return _mm256_sub_ps( (~a).
eval().value, (~b).
eval().value );
464 return _mm_sub_ps( (~a).
eval().value, (~b).
eval().value );
483 operator-(
const SIMDcfloat& a,
const SIMDcfloat& b ) noexcept
486 return _mm512_sub_ps( a.value, b.value );
490 return _mm256_sub_ps( a.value, b.value );
494 return _mm_sub_ps( a.value, b.value );
520 template<
typename T1
523 operator-(
const SIMDf64<T1>& a,
const SIMDf64<T2>& b ) noexcept
526 return _mm512_sub_pd( (~a).
eval().value, (~b).
eval().value );
530 return _mm256_sub_pd( (~a).
eval().value, (~b).
eval().value );
532 #elif BLAZE_SSE2_MODE
534 return _mm_sub_pd( (~a).
eval().value, (~b).
eval().value );
553 operator-(
const SIMDcdouble& a,
const SIMDcdouble& b ) noexcept
556 return _mm512_sub_pd( a.value, b.value );
560 return _mm256_sub_pd( a.value, b.value );
562 #elif BLAZE_SSE2_MODE
564 return _mm_sub_pd( a.value, b.value );
const DenseIterator< Type, AF > operator-(const DenseIterator< Type, AF > &it, ptrdiff_t inc) noexcept
Subtraction between a DenseIterator and an integral value.
Definition: DenseIterator.h:731
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the basic SIMD types.
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:705
System settings for the SSE mode.
System settings for the inline keywords.