All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Subtraction.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_MATH_INTRINSICS_SUBTRACTION_H_
23 #define _BLAZE_MATH_INTRINSICS_SUBTRACTION_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
31 #include <blaze/system/SSE.h>
32 
33 
34 namespace blaze {
35 
36 //=================================================================================================
37 //
38 // INTRINSIC SUBTRACTION OPERATORS
39 //
40 //=================================================================================================
41 
42 //*************************************************************************************************
51 #if BLAZE_SSE2_MODE
52 inline sse_int8_t operator-( const sse_int8_t& a, const sse_int8_t& b )
53 {
54  return _mm_sub_epi8( a.value, b.value );
55 }
56 #endif
57 //*************************************************************************************************
58 
59 
60 //*************************************************************************************************
69 #if BLAZE_SSE2_MODE
70 inline sse_int16_t operator-( const sse_int16_t& a, const sse_int16_t& b )
71 {
72  return _mm_sub_epi16( a.value, b.value );
73 }
74 #endif
75 //*************************************************************************************************
76 
77 
78 //*************************************************************************************************
87 #if BLAZE_MIC_MODE
88 inline sse_int64_t operator-( const sse_int32_t& a, const sse_int32_t& b )
89 {
90  return _mm512_sub_epi32( a.value, b.value );
91 }
92 #elif BLAZE_SSE2_MODE
93 inline sse_int32_t operator-( const sse_int32_t& a, const sse_int32_t& b )
94 {
95  return _mm_sub_epi32( a.value, b.value );
96 }
97 #endif
98 //*************************************************************************************************
99 
100 
101 //*************************************************************************************************
110 #if BLAZE_SSE2_MODE
111 inline sse_int64_t operator-( const sse_int64_t& a, const sse_int64_t& b )
112 {
113  return _mm_sub_epi64( a.value, b.value );
114 }
115 #endif
116 //*************************************************************************************************
117 
118 
119 //*************************************************************************************************
128 #if BLAZE_MIC_MODE
129 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
130 {
131  return _mm512_sub_ps( a.value, b.value );
132 }
133 #elif BLAZE_AVX_MODE
134 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
135 {
136  return _mm256_sub_ps( a.value, b.value );
137 }
138 #elif BLAZE_SSE_MODE
139 inline sse_float_t operator-( const sse_float_t& a, const sse_float_t& b )
140 {
141  return _mm_sub_ps( a.value, b.value );
142 }
143 #endif
144 //*************************************************************************************************
145 
146 
147 //*************************************************************************************************
156 #if BLAZE_MIC_MODE
157 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
158 {
159  return _mm512_sub_pd( a.value, b.value );
160 }
161 #elif BLAZE_AVX_MODE
162 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
163 {
164  return _mm256_sub_pd( a.value, b.value );
165 }
166 #elif BLAZE_SSE2_MODE
167 inline sse_double_t operator-( const sse_double_t& a, const sse_double_t& b )
168 {
169  return _mm_sub_pd( a.value, b.value );
170 }
171 #endif
172 //*************************************************************************************************
173 
174 } // namespace blaze
175 
176 #endif