mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Add shift_left<N> and shift_right<N> coefficient-wise unary Array functions
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
54aa8fa186
commit
232f904082
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user