Fix loongarch unsigned pabsdiff

libeigen/eigen!2071
This commit is contained in:
Charles Schlosser
2025-11-09 19:19:43 +00:00
parent 035cf68498
commit 8ae3b1aaa5

View File

@@ -1379,6 +1379,47 @@ EIGEN_STRONG_INLINE Packet2ul pabs(const Packet2ul& a) {
return a;
}
template <>
EIGEN_STRONG_INLINE Packet16c pabsdiff(const Packet16c& a, const Packet16c& b) {
return __lsx_vabsd_b(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet8s pabsdiff(const Packet8s& a, const Packet8s& b) {
return __lsx_vabsd_h(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet4i pabsdiff(const Packet4i& a, const Packet4i& b) {
return __lsx_vabsd_w(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet2l pabsdiff(const Packet2l& a, const Packet2l& b) {
return __lsx_vabsd_d(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet16uc pabsdiff(const Packet16uc& a, const Packet16uc& b) {
return __lsx_vabsd_bu(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet8us pabsdiff(const Packet8us& a, const Packet8us& b) {
return __lsx_vabsd_hu(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet4ui pabsdiff(const Packet4ui& a, const Packet4ui& b) {
return __lsx_vabsd_wu(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet2ul pabsdiff(const Packet2ul& a, const Packet2ul& b) {
return __lsx_vabsd_du(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet4f pabsdiff(const Packet4f& a, const Packet4f& b) {
return pabs(psub(a, b));
}
template <>
EIGEN_STRONG_INLINE Packet2d pabsdiff(const Packet2d& a, const Packet2d& b) {
return pabs(psub(a, b));
}
template <>
EIGEN_STRONG_INLINE Packet4f pload<Packet4f>(const float* from) {
EIGEN_DEBUG_ALIGNED_LOAD return (Packet4f)__lsx_vld(from, 0);
@@ -2667,11 +2708,6 @@ EIGEN_STRONG_INLINE Packet4f pzero(const Packet4f& /* a */) {
return v;
}
template <>
EIGEN_STRONG_INLINE Packet4f pabsdiff<Packet4f>(const Packet4f& a, const Packet4f& b) {
Packet4f v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_STRONG_INLINE Packet4f pmin<PropagateNaN, Packet4f>(const Packet4f& a, const Packet4f& b) {
return pmin<Packet4f>(a, b);
}
@@ -2733,48 +2769,23 @@ template <>
EIGEN_STRONG_INLINE Packet2d pldexp<Packet2d>(const Packet2d& a, const Packet2d& exponent) {
return pldexp_generic(a, exponent);
}
template <>
EIGEN_STRONG_INLINE Packet16c pabsdiff<Packet16c>(const Packet16c& a, const Packet16c& b) {
Packet16c v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_STRONG_INLINE Packet8s pabsdiff<Packet8s>(const Packet8s& a, const Packet8s& b) {
Packet8s v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8s pselect(const Packet8s& mask, const Packet8s& a, const Packet8s& b) {
return __lsx_vbitsel_v(b, a, mask);
}
template <>
EIGEN_STRONG_INLINE Packet4i pabsdiff<Packet4i>(const Packet4i& a, const Packet4i& b) {
Packet4i v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4i pselect(const Packet4i& mask, const Packet4i& a, const Packet4i& b) {
return __lsx_vbitsel_v(b, a, mask);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2l pselect(const Packet2l& mask, const Packet2l& a, const Packet2l& b) {
return __lsx_vbitsel_v(b, a, mask);
}
template <>
EIGEN_STRONG_INLINE Packet16uc pdiv<Packet16uc>(const Packet16uc& a, const Packet16uc& b) {
return __lsx_vdiv_bu(a, b);
}
template <>
EIGEN_STRONG_INLINE Packet16uc pabsdiff<Packet16uc>(const Packet16uc& a, const Packet16uc& b) {
Packet16uc v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16uc pselect(const Packet16uc& mask, const Packet16uc& a,
const Packet16uc& b) {
return __lsx_vbitsel_v(b, a, mask);
@@ -2791,12 +2802,6 @@ EIGEN_STRONG_INLINE Packet16uc psqrt(const Packet16uc& a) {
}
return res;
}
template <>
EIGEN_STRONG_INLINE Packet8us pabsdiff<Packet8us>(const Packet8us& a, const Packet8us& b) {
Packet8us v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8us pselect(const Packet8us& mask, const Packet8us& a, const Packet8us& b) {
return __lsx_vbitsel_v(b, a, mask);
@@ -2814,11 +2819,6 @@ EIGEN_STRONG_INLINE Packet8us psqrt(const Packet8us& a) {
return res;
}
template <>
EIGEN_STRONG_INLINE Packet4ui pabsdiff<Packet4ui>(const Packet4ui& a, const Packet4ui& b) {
Packet4ui v = psub(a, b);
return pabs(v);
}
template <>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4ui pselect(const Packet4ui& mask, const Packet4ui& a, const Packet4ui& b) {
return __lsx_vbitsel_v(b, a, mask);