diff --git a/Eigen/src/Core/arch/AVX/Complex.h b/Eigen/src/Core/arch/AVX/Complex.h index 3abb5bd45..cd90496d5 100644 --- a/Eigen/src/Core/arch/AVX/Complex.h +++ b/Eigen/src/Core/arch/AVX/Complex.h @@ -33,7 +33,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, @@ -201,7 +200,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 0, size = 2, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h index c5e1cc08b..af4742b22 100644 --- a/Eigen/src/Core/arch/AVX/PacketMath.h +++ b/Eigen/src/Core/arch/AVX/PacketMath.h @@ -66,7 +66,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, HasCmp = 1, HasDiv = 1, @@ -102,7 +101,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=4, - HasHalfPacket = 1, HasCmp = 1, HasDiv = 1, @@ -128,7 +126,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -172,7 +169,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -873,6 +869,9 @@ template<> EIGEN_STRONG_INLINE Packet4d pround(const Packet4d& a) template<> EIGEN_STRONG_INLINE Packet8f pselect(const Packet8f& mask, const Packet8f& a, const Packet8f& b) { return _mm256_blendv_ps(b,a,mask); } +template<> EIGEN_STRONG_INLINE Packet8i pselect(const Packet8i& mask, const Packet8i& a, const Packet8i& b) +{ return _mm256_castps_si256(_mm256_blendv_ps(_mm256_castsi256_ps(b), _mm256_castsi256_ps(a), _mm256_castsi256_ps(mask))); } + template<> EIGEN_STRONG_INLINE Packet4d pselect(const Packet4d& mask, const Packet4d& a, const Packet4d& b) { return _mm256_blendv_pd(b,a,mask); } diff --git a/Eigen/src/Core/arch/AVX512/Complex.h b/Eigen/src/Core/arch/AVX512/Complex.h index 6d8ee2bcd..0372e95dc 100644 --- a/Eigen/src/Core/arch/AVX512/Complex.h +++ b/Eigen/src/Core/arch/AVX512/Complex.h @@ -32,7 +32,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, @@ -185,7 +184,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 0, size = 4, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/AVX512/PacketMath.h b/Eigen/src/Core/arch/AVX512/PacketMath.h index c68c04140..129a68cf5 100644 --- a/Eigen/src/Core/arch/AVX512/PacketMath.h +++ b/Eigen/src/Core/arch/AVX512/PacketMath.h @@ -63,7 +63,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -89,7 +88,7 @@ struct packet_traits : default_packet_traits { HasCos = EIGEN_FAST_MATH, HasTanh = EIGEN_FAST_MATH, HasErf = EIGEN_FAST_MATH, - HasBlend = 0, + HasBlend = 0, HasRound = 1, HasFloor = 1, HasCeil = 1, @@ -106,13 +105,12 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 1, HasAbs = 1, - HasMin = 1, - HasMax = 1, - HasConj = 1, - HasBlend = 0, + HasMin = 1, + HasMax = 1, + HasConj = 1, + HasBlend = 1, HasSin = EIGEN_FAST_MATH, HasCos = EIGEN_FAST_MATH, HasACos = 1, @@ -146,7 +144,7 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, + HasBlend = 1, HasSqrt = 1, HasRsqrt = 1, HasLog = 1, @@ -168,6 +166,7 @@ template<> struct packet_traits : default_packet_traits enum { Vectorizable = 1, AlignedOnScalar = 1, + HasBlend = 0, HasCmp = 1, HasDiv = 1, size=16 @@ -455,11 +454,18 @@ template <> EIGEN_DEVICE_FUNC inline Packet16f pselect(const Packet16f& mask, const Packet16f& a, const Packet16f& b) { - __mmask16 mask16 = _mm512_cmp_epi32_mask( - _mm512_castps_si512(mask), _mm512_setzero_epi32(), _MM_CMPINT_EQ); + __mmask16 mask16 = _mm512_cmpeq_epi32_mask(_mm512_castps_si512(mask), _mm512_setzero_epi32()); return _mm512_mask_blend_ps(mask16, a, b); } +template <> +EIGEN_DEVICE_FUNC inline Packet16i pselect(const Packet16i& mask, + const Packet16i& a, + const Packet16i& b) { + __mmask16 mask16 = _mm512_cmpeq_epi32_mask(mask, _mm512_setzero_epi32()); + return _mm512_mask_blend_epi32(mask16, a, b); +} + template <> EIGEN_DEVICE_FUNC inline Packet8d pselect(const Packet8d& mask, const Packet8d& a, @@ -1847,11 +1853,16 @@ EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock& kernel) { } template <> -EIGEN_STRONG_INLINE Packet16f pblend(const Selector<16>& /*ifPacket*/, - const Packet16f& /*thenPacket*/, - const Packet16f& /*elsePacket*/) { - eigen_assert(false && "To be implemented"); - return Packet16f(); +EIGEN_STRONG_INLINE Packet16f pblend(const Selector<16>& ifPacket, + const Packet16f& thenPacket, + const Packet16f& elsePacket) { + __mmask16 m = (ifPacket.select[0]) | (ifPacket.select[1] << 1) | (ifPacket.select[2] << 2) | + (ifPacket.select[3] << 3) | (ifPacket.select[4] << 4) | (ifPacket.select[5] << 5) | + (ifPacket.select[6] << 6) | (ifPacket.select[7] << 7) | (ifPacket.select[8] << 8) | + (ifPacket.select[9] << 9) | (ifPacket.select[10] << 10) | (ifPacket.select[11] << 11) | + (ifPacket.select[12] << 12) | (ifPacket.select[13] << 13) | (ifPacket.select[14] << 14) | + (ifPacket.select[15] << 15); + return _mm512_mask_blend_ps(m, elsePacket, thenPacket); } template <> EIGEN_STRONG_INLINE Packet8d pblend(const Selector<8>& ifPacket, @@ -2295,7 +2306,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 1, HasBlend = 0, HasInsert = 1, HasSin = EIGEN_FAST_MATH, diff --git a/Eigen/src/Core/arch/AltiVec/Complex.h b/Eigen/src/Core/arch/AltiVec/Complex.h index e448bb657..69cc0689f 100644 --- a/Eigen/src/Core/arch/AltiVec/Complex.h +++ b/Eigen/src/Core/arch/AltiVec/Complex.h @@ -91,7 +91,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -360,7 +359,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 0, size = 1, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h index e443a63ed..d477ab721 100644 --- a/Eigen/src/Core/arch/AltiVec/PacketMath.h +++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h @@ -157,7 +157,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, @@ -206,7 +205,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -250,7 +248,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -274,7 +271,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -293,7 +289,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -312,7 +307,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -331,7 +325,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -2710,7 +2703,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=2, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/GPU/PacketMath.h b/Eigen/src/Core/arch/GPU/PacketMath.h index 17dd8fb51..a04c5634d 100644 --- a/Eigen/src/Core/arch/GPU/PacketMath.h +++ b/Eigen/src/Core/arch/GPU/PacketMath.h @@ -46,7 +46,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=4, - HasHalfPacket = 0, HasDiv = 1, HasSin = 0, @@ -82,7 +81,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=2, - HasHalfPacket = 0, HasDiv = 1, HasLog = 1, @@ -534,7 +532,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=8, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, diff --git a/Eigen/src/Core/arch/MSA/Complex.h b/Eigen/src/Core/arch/MSA/Complex.h index b11a9b402..83239c0a7 100644 --- a/Eigen/src/Core/arch/MSA/Complex.h +++ b/Eigen/src/Core/arch/MSA/Complex.h @@ -107,7 +107,6 @@ struct packet_traits > : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -422,7 +421,6 @@ struct packet_traits > : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 0, size = 1, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/MSA/PacketMath.h b/Eigen/src/Core/arch/MSA/PacketMath.h index f03dbedae..4e6bcdf41 100644 --- a/Eigen/src/Core/arch/MSA/PacketMath.h +++ b/Eigen/src/Core/arch/MSA/PacketMath.h @@ -80,7 +80,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, // Packet2f intrinsics not implemented yet // FIXME check the Has* HasDiv = 1, HasSin = EIGEN_FAST_MATH, @@ -106,7 +105,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, // Packet2i intrinsics not implemented yet // FIXME check the Has* HasDiv = 1, HasBlend = 1 @@ -850,7 +848,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, // FIXME check the Has* HasDiv = 1, HasExp = 1, diff --git a/Eigen/src/Core/arch/NEON/Complex.h b/Eigen/src/Core/arch/NEON/Complex.h index e4363607f..97f41169b 100644 --- a/Eigen/src/Core/arch/NEON/Complex.h +++ b/Eigen/src/Core/arch/NEON/Complex.h @@ -59,7 +59,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, @@ -400,7 +399,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 0, size = 1, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/NEON/PacketMath.h b/Eigen/src/Core/arch/NEON/PacketMath.h index fac021948..e52e3fb9a 100644 --- a/Eigen/src/Core/arch/NEON/PacketMath.h +++ b/Eigen/src/Core/arch/NEON/PacketMath.h @@ -187,7 +187,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -237,7 +236,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -267,7 +265,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 16, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -299,7 +296,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -329,7 +325,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -360,7 +355,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -390,7 +384,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 1, HasCmp = 1, HasAdd = 1, @@ -422,7 +415,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -452,7 +444,6 @@ struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -3410,7 +3401,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -3784,7 +3774,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasCmp = 1, HasAdd = 1, @@ -4027,7 +4016,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 8, - HasHalfPacket = 1, HasCmp = 1, HasCast = 1, diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h index 60308ce24..366daa757 100644 --- a/Eigen/src/Core/arch/SSE/Complex.h +++ b/Eigen/src/Core/arch/SSE/Complex.h @@ -35,7 +35,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -185,7 +184,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 0, size = 1, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/SSE/PacketMath.h b/Eigen/src/Core/arch/SSE/PacketMath.h index 7d608bbb4..499c16bed 100644 --- a/Eigen/src/Core/arch/SSE/PacketMath.h +++ b/Eigen/src/Core/arch/SSE/PacketMath.h @@ -132,7 +132,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasCmp = 1, HasDiv = 1, @@ -171,7 +170,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size=2, - HasHalfPacket = 0, HasCmp = 1, HasDiv = 1, @@ -212,7 +210,6 @@ template<> struct packet_traits : default_packet_traits enum { Vectorizable = 1, AlignedOnScalar = 1, - HasHalfPacket = 0, size=16, HasAdd = 1, @@ -1478,7 +1475,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, diff --git a/Eigen/src/Core/arch/SVE/PacketMath.h b/Eigen/src/Core/arch/SVE/PacketMath.h index 9c106b393..a2f292fc1 100644 --- a/Eigen/src/Core/arch/SVE/PacketMath.h +++ b/Eigen/src/Core/arch/SVE/PacketMath.h @@ -42,7 +42,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = sve_packet_size_selector::size, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -377,7 +376,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = sve_packet_size_selector::size, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/ZVector/Complex.h b/Eigen/src/Core/arch/ZVector/Complex.h index df5c8d441..7f22e5cae 100644 --- a/Eigen/src/Core/arch/ZVector/Complex.h +++ b/Eigen/src/Core/arch/ZVector/Complex.h @@ -53,7 +53,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 2, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -78,7 +77,6 @@ template<> struct packet_traits > : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 1, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, diff --git a/Eigen/src/Core/arch/ZVector/PacketMath.h b/Eigen/src/Core/arch/ZVector/PacketMath.h index 26b6f0dd7..892e3a1be 100644 --- a/Eigen/src/Core/arch/ZVector/PacketMath.h +++ b/Eigen/src/Core/arch/ZVector/PacketMath.h @@ -160,7 +160,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -178,7 +177,6 @@ struct packet_traits : default_packet_traits { Vectorizable = 1, AlignedOnScalar = 1, size = 4, - HasHalfPacket = 0, HasAdd = 1, HasSub = 1, @@ -211,7 +209,6 @@ template<> struct packet_traits : default_packet_traits Vectorizable = 1, AlignedOnScalar = 1, size=2, - HasHalfPacket = 1, HasAdd = 1, HasSub = 1, diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h b/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h index 839ff6966..5174d8ddf 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h @@ -166,7 +166,6 @@ struct PacketType : internal::default_packet_traits { Vectorizable = 0, size = 1, AlignedOnScalar = 0, - HasHalfPacket = 0 }; enum { HasAdd = 0,