diff options
author | Joel Holdsworth <joel@airwebreathe.org.uk> | 2020-03-19 17:24:06 +0000 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2020-03-19 17:24:06 +0000 |
commit | 232f9040821db526d28b9d93aaeb45c907dbf06b (patch) | |
tree | ef6385880742496420cb4718e11d84baeacfed5f /Eigen/src/Core/arch/AVX | |
parent | 54aa8fa186e84bc6985f70f9aa43490709f345b7 (diff) |
Add shift_left<N> and shift_right<N> coefficient-wise unary Array functions
Diffstat (limited to 'Eigen/src/Core/arch/AVX')
-rw-r--r-- | Eigen/src/Core/arch/AVX/PacketMath.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h index 11c7bcb43..b7d37f92b 100644 --- a/Eigen/src/Core/arch/AVX/PacketMath.h +++ b/Eigen/src/Core/arch/AVX/PacketMath.h @@ -415,7 +415,17 @@ template<> EIGEN_STRONG_INLINE Packet8f pselect<Packet8f>(const Packet8f& mask, template<> EIGEN_STRONG_INLINE Packet4d pselect<Packet4d>(const Packet4d& mask, const Packet4d& a, const Packet4d& b) { return _mm256_blendv_pd(b,a,mask); } -template<int N> EIGEN_STRONG_INLINE Packet8i pshiftright(Packet8i a) { +template<int N> EIGEN_STRONG_INLINE Packet8i parithmetic_shift_right(Packet8i a) { +#ifdef EIGEN_VECTORIZE_AVX2 + return _mm256_srai_epi32(a, N); +#else + __m128i lo = _mm_srai_epi32(_mm256_extractf128_si256(a, 0), N); + __m128i hi = _mm_srai_epi32(_mm256_extractf128_si256(a, 1), N); + return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1); +#endif +} + +template<int N> EIGEN_STRONG_INLINE Packet8i plogical_shift_right(Packet8i a) { #ifdef EIGEN_VECTORIZE_AVX2 return _mm256_srli_epi32(a, N); #else @@ -425,7 +435,7 @@ template<int N> EIGEN_STRONG_INLINE Packet8i pshiftright(Packet8i a) { #endif } -template<int N> EIGEN_STRONG_INLINE Packet8i pshiftleft(Packet8i a) { +template<int N> EIGEN_STRONG_INLINE Packet8i plogical_shift_left(Packet8i a) { #ifdef EIGEN_VECTORIZE_AVX2 return _mm256_slli_epi32(a, N); #else |