35#ifndef _BLAZE_MATH_SIMD_SUB_H_
36#define _BLAZE_MATH_SIMD_SUB_H_
68 operator-(
const SIMDi8<T>& a,
const SIMDi8<T>& b )
noexcept
69#if BLAZE_AVX512BW_MODE
71 return _mm512_sub_epi8( (*a).value, (*b).value );
75 return _mm256_sub_epi8( (*a).value, (*b).value );
79 return _mm_sub_epi8( (*a).value, (*b).value );
100 operator-(
const SIMDi8<T1>& a,
const SIMDi8<T2>& b )
noexcept
101#if BLAZE_AVX512BW_MODE
103 return _mm512_sub_epi8( (*a).value, (*b).value );
107 return _mm256_sub_epi8( (*a).value, (*b).value );
111 return _mm_sub_epi8( (*a).value, (*b).value );
129template<
typename T >
131 operator-(
const SIMDci8<T>& a,
const SIMDci8<T>& b )
noexcept
132#if BLAZE_AVX512BW_MODE
134 return _mm512_sub_epi8( (*a).value, (*b).value );
138 return _mm256_sub_epi8( (*a).value, (*b).value );
142 return _mm_sub_epi8( (*a).value, (*b).value );
168template<
typename T >
170 operator-(
const SIMDi16<T>& a,
const SIMDi16<T>& b )
noexcept
171#if BLAZE_AVX512BW_MODE
173 return _mm512_sub_epi16( (*a).value, (*b).value );
177 return _mm256_sub_epi16( (*a).value, (*b).value );
181 return _mm_sub_epi16( (*a).value, (*b).value );
202 operator-(
const SIMDi16<T1>& a,
const SIMDi16<T2>& b )
noexcept
203#if BLAZE_AVX512BW_MODE
205 return _mm512_sub_epi16( (*a).value, (*b).value );
209 return _mm256_sub_epi16( (*a).value, (*b).value );
213 return _mm_sub_epi16( (*a).value, (*b).value );
231template<
typename T >
233 operator-(
const SIMDci16<T>& a,
const SIMDci16<T>& b )
noexcept
234#if BLAZE_AVX512BW_MODE
236 return _mm512_sub_epi16( (*a).value, (*b).value );
240 return _mm256_sub_epi16( (*a).value, (*b).value );
244 return _mm_sub_epi16( (*a).value, (*b).value );
270template<
typename T >
272 operator-(
const SIMDi32<T>& a,
const SIMDi32<T>& b )
noexcept
273#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
275 return _mm512_sub_epi32( (*a).value, (*b).value );
279 return _mm256_sub_epi32( (*a).value, (*b).value );
283 return _mm_sub_epi32( (*a).value, (*b).value );
304 operator-(
const SIMDi32<T1>& a,
const SIMDi32<T2>& b )
noexcept
305#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
307 return _mm512_sub_epi32( (*a).value, (*b).value );
311 return _mm256_sub_epi32( (*a).value, (*b).value );
315 return _mm_sub_epi32( (*a).value, (*b).value );
333template<
typename T >
335 operator-(
const SIMDci32<T>& a,
const SIMDci32<T>& b )
noexcept
336#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
338 return _mm512_sub_epi32( (*a).value, (*b).value );
342 return _mm256_sub_epi32( (*a).value, (*b).value );
346 return _mm_sub_epi32( (*a).value, (*b).value );
372template<
typename T >
374 operator-(
const SIMDi64<T>& a,
const SIMDi64<T>& b )
noexcept
375#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
377 return _mm512_sub_epi64( (*a).value, (*b).value );
381 return _mm256_sub_epi64( (*a).value, (*b).value );
385 return _mm_sub_epi64( (*a).value, (*b).value );
406 operator-(
const SIMDi64<T1>& a,
const SIMDi64<T2>& b )
noexcept
407#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
409 return _mm512_sub_epi64( (*a).value, (*b).value );
413 return _mm256_sub_epi64( (*a).value, (*b).value );
417 return _mm_sub_epi64( (*a).value, (*b).value );
435template<
typename T >
437 operator-(
const SIMDci64<T>& a,
const SIMDci64<T>& b )
noexcept
438#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
440 return _mm512_sub_epi64( (*a).value, (*b).value );
444 return _mm256_sub_epi64( (*a).value, (*b).value );
448 return _mm_sub_epi64( (*a).value, (*b).value );
477 operator-(
const SIMDf32<T1>& a,
const SIMDf32<T2>& b )
noexcept
478#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
480 return _mm512_sub_ps( (*a).eval().value, (*b).eval().value );
484 return _mm256_sub_ps( (*a).eval().value, (*b).eval().value );
488 return _mm_sub_ps( (*a).eval().value, (*b).eval().value );
508#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
510 return _mm512_sub_ps( a.value, b.value );
514 return _mm256_sub_ps( a.value, b.value );
518 return _mm_sub_ps( a.value, b.value );
547 operator-(
const SIMDf64<T1>& a,
const SIMDf64<T2>& b )
noexcept
548#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
550 return _mm512_sub_pd( (*a).eval().value, (*b).eval().value );
554 return _mm256_sub_pd( (*a).eval().value, (*b).eval().value );
558 return _mm_sub_pd( (*a).eval().value, (*b).eval().value );
578#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
580 return _mm512_sub_pd( a.value, b.value );
584 return _mm256_sub_pd( a.value, b.value );
588 return _mm_sub_pd( a.value, b.value );
Header file for the basic SIMD types.
SIMD type for 64-bit double precision complex values.
SIMD type for 32-bit single precision complex values.
SIMD type for 64-bit double precision floating point data values.
SIMD type for 32-bit single precision floating point data values.
SIMD type for 16-bit unsigned integral data values.
SIMD type for 32-bit unsigned integral data values.
SIMD type for 64-bit unsigned integral data values.
SIMD type for 8-bit unsigned integral data values.
BLAZE_ALWAYS_INLINE const SIMDcdouble operator-(const SIMDcdouble &a, const SIMDcdouble &b) noexcept=delete
Subtraction of two vectors of double precision complex SIMD values.
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
System settings for the inline keywords.
System settings for the SSE mode.