Blaze 3.9
ShiftLV.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_SIMD_SHIFTLV_H_
36#define _BLAZE_MATH_SIMD_SHIFTLV_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_sllv_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_sllv_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_sllv_epi32( a.value, (*b).value );
126}
127#elif BLAZE_AVX2_MODE
128{
129 return _mm256_sllv_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_sllv_epi32( a.value, (*b).value );
153}
154#elif BLAZE_AVX2_MODE
155{
156 return _mm256_sllv_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_sllv_epi64( a.value, (*b).value );
188}
189#elif BLAZE_AVX2_MODE
190{
191 return _mm256_sllv_epi64( a.value, (*b).value );
192}
193#else
194= delete;
195#endif
196//*************************************************************************************************
197
198
199//*************************************************************************************************
209template< typename T > // Type of both operands
211 operator<<( const SIMDuint64& a, const SIMDi64<T>& b ) noexcept
212#if BLAZE_AVX512F_MODE
213{
214 return _mm512_sllv_epi64( a.value, (*b).value );
215}
216#elif BLAZE_AVX2_MODE
217{
218 return _mm256_sllv_epi64( a.value, (*b).value );
219}
220#else
221= delete;
222#endif
223//*************************************************************************************************
224
225} // namespace blaze
226
227#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 left-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.