mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-10-13 16:41:30 +08:00
Add missing bool SSE2 PacketMath comparison
This commit is contained in:
parent
6ef18340a1
commit
ea869e183b
@ -287,7 +287,7 @@ struct packet_traits<bool> : default_packet_traits {
|
||||
AlignedOnScalar = 1,
|
||||
size = 16,
|
||||
|
||||
HasCmp = 1, // note -- only pcmp_eq is defined
|
||||
HasCmp = 1,
|
||||
HasShift = 0,
|
||||
HasAbs = 0,
|
||||
HasAbs2 = 0,
|
||||
@ -883,7 +883,14 @@ template <>
|
||||
EIGEN_STRONG_INLINE Packet4ui pandnot<Packet4ui>(const Packet4ui& a, const Packet4ui& b) {
|
||||
return _mm_andnot_si128(b, a);
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet16b pandnot<Packet16b>(const Packet16b& a, const Packet16b& b) {
|
||||
return _mm_andnot_si128(b, a);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet16b pcmp_lt(const Packet16b& a, const Packet16b& b) {
|
||||
return _mm_andnot_si128(a, b);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4f pcmp_le(const Packet4f& a, const Packet4f& b) {
|
||||
return _mm_cmple_ps(a, b);
|
||||
@ -963,6 +970,10 @@ EIGEN_STRONG_INLINE Packet16b pcmp_eq(const Packet16b& a, const Packet16b& b) {
|
||||
return _mm_and_si128(_mm_cmpeq_epi8(a, b), kBoolMask);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet16b pcmp_le(const Packet16b& a, const Packet16b& b) {
|
||||
return por(pcmp_lt(a, b), pcmp_eq(a, b));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4ui pcmp_eq(const Packet4ui& a, const Packet4ui& b) {
|
||||
return _mm_cmpeq_epi32(a, b);
|
||||
}
|
||||
|
@ -296,6 +296,23 @@ void checkOptimalTraversal() {
|
||||
checkOptimalTraversal_impl<UnrollRowMajor, true>(UnrollRowMajor(Rows, Cols));
|
||||
checkOptimalTraversal_impl<DynamicColMajor, true>(DynamicColMajor(rows, cols));
|
||||
checkOptimalTraversal_impl<DynamicRowMajor, true>(DynamicRowMajor(rows, cols));
|
||||
|
||||
const Eigen::Array<bool, Eigen::Dynamic, 1> a = Eigen::Array<bool, 2, 1>{false, true};
|
||||
Eigen::Index i = -1;
|
||||
|
||||
VERIFY(!a.minCoeff(&i));
|
||||
VERIFY(i == 0);
|
||||
|
||||
VERIFY(!(!a).minCoeff(&i));
|
||||
VERIFY(i == 1);
|
||||
|
||||
Eigen::Index j = -1;
|
||||
|
||||
VERIFY(a.maxCoeff(&j));
|
||||
VERIFY(j == 1);
|
||||
|
||||
VERIFY((!a).maxCoeff(&j));
|
||||
VERIFY(j == 0);
|
||||
}
|
||||
|
||||
EIGEN_DECLARE_TEST(visitor) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user