Blaze 3.9
ShiftRV.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_SIMD_SHIFTRV_H_
36#define _BLAZE_MATH_SIMD_SHIFTRV_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
44#include <blaze/system/Inline.h>
46
47
48namespace blaze {
49
50//=================================================================================================
51//
52// 16-BIT INTEGRAL SIMD TYPES
53//
54//=================================================================================================
55
56//*************************************************************************************************
66template< typename T > // Type of both operands
68 operator>>( const SIMDint16& a, const SIMDi16<T>& b ) noexcept
69#if BLAZE_AVX512BW_MODE
70{
71 return _mm512_srav_epi16( a.value, (*b).value );
72}
73#else
74= delete;
75#endif
76//*************************************************************************************************
77
78
79//*************************************************************************************************
89template< typename T > // Type of both operands
91 operator>>( const SIMDuint16& a, const SIMDi16<T>& b ) noexcept
92#if BLAZE_AVX512BW_MODE
93{
94 return _mm512_srlv_epi16( a.value, (*b).value );
95}
96#else
97= delete;
98#endif
99//*************************************************************************************************
100
101
102
103
104//=================================================================================================
105//
106// 32-BIT INTEGRAL SIMD TYPES
107//
108//=================================================================================================
109
110//*************************************************************************************************
120template< typename T > // Type of both operands
122 operator>>( const SIMDint32& a, const SIMDi32<T>& b ) noexcept
123#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
124{
125 return _mm512_srav_epi32( a.value, (*b).value );
126}
127#elif BLAZE_AVX2_MODE
128{
129 return _mm256_srav_epi32( a.value, (*b).value );
130}
131#else
132= delete;
133#endif
134//*************************************************************************************************
135
136
137//*************************************************************************************************
147template< typename T > // Type of both operands
149 operator>>( const SIMDuint32& a, const SIMDi32<T>& b ) noexcept
150#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
151{
152 return _mm512_srlv_epi32( a.value, (*b).value );
153}
154#elif BLAZE_AVX2_MODE
155{
156 return _mm256_srlv_epi32( a.value, (*b).value );
157}
158#else
159= delete;
160#endif
161//*************************************************************************************************
162
163
164
165
166//=================================================================================================
167//
168// 64-BIT INTEGRAL SIMD TYPES
169//
170//=================================================================================================
171
172//*************************************************************************************************
182template< typename T > // Type of both operands
184 operator>>( const SIMDint64& a, const SIMDi64<T>& b ) noexcept
185#if BLAZE_AVX512F_MODE
186{
187 return _mm512_srav_epi64( a.value, (*b).value );
188}
189#else
190= delete;
191#endif
192//*************************************************************************************************
193
194
195//*************************************************************************************************
205template< typename T > // Type of both operands
207 operator>>( const SIMDuint64& a, const SIMDi64<T>& b ) noexcept
208#if BLAZE_AVX512F_MODE
209{
210 return _mm512_srlv_epi64( a.value, (*b).value );
211}
212#elif BLAZE_AVX2_MODE
213{
214 return _mm256_srlv_epi64( a.value, (*b).value );
215}
216#else
217= delete;
218#endif
219//*************************************************************************************************
220
221} // namespace blaze
222
223#endif
Header file for the basic SIMD types.
SIMD type for 16-bit signed integral data values.
SIMD type for 32-bit signed integral data values.
SIMD type for 64-bit integral 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.
BLAZE_ALWAYS_INLINE const SIMDuint64 operator>>(const SIMDuint64 &a, const SIMDi64< T > &b) noexcept=delete
Elementwise right-shift of a vector of 64-bit unsigned integral 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.