diff --git a/Eigen/src/Core/arch/LSX/PacketMath.h b/Eigen/src/Core/arch/LSX/PacketMath.h index 77ffdd17f..366399f69 100644 --- a/Eigen/src/Core/arch/LSX/PacketMath.h +++ b/Eigen/src/Core/arch/LSX/PacketMath.h @@ -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(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(const Packet4f& a, const Packet4f& b) { - Packet4f v = psub(a, b); - return pabs(v); -} -template <> EIGEN_STRONG_INLINE Packet4f pmin(const Packet4f& a, const Packet4f& b) { return pmin(a, b); } @@ -2733,48 +2769,23 @@ template <> EIGEN_STRONG_INLINE Packet2d pldexp(const Packet2d& a, const Packet2d& exponent) { return pldexp_generic(a, exponent); } - -template <> -EIGEN_STRONG_INLINE Packet16c pabsdiff(const Packet16c& a, const Packet16c& b) { - Packet16c v = psub(a, b); - return pabs(v); -} - -template <> -EIGEN_STRONG_INLINE Packet8s pabsdiff(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(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(const Packet16uc& a, const Packet16uc& b) { return __lsx_vdiv_bu(a, b); } template <> -EIGEN_STRONG_INLINE Packet16uc pabsdiff(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(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(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);