From f8191848ee3ad9599e5393299508b82886d2db44 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Mon, 4 Aug 2025 13:07:56 -0700 Subject: [PATCH 1/3] Fix pcmp_* for HVX to to comply with the new definition of true = Scalar(1). --- Eigen/src/Core/arch/HVX/PacketMath.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Eigen/src/Core/arch/HVX/PacketMath.h b/Eigen/src/Core/arch/HVX/PacketMath.h index ccba96efd..b9080d988 100644 --- a/Eigen/src/Core/arch/HVX/PacketMath.h +++ b/Eigen/src/Core/arch/HVX/PacketMath.h @@ -401,7 +401,7 @@ EIGEN_STRONG_INLINE Packet8f pnegate(const Packet8f& a) { template EIGEN_STRONG_INLINE HVXPacket pcmp_le_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); + HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(a.Get(), b.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, Q6_V_vzero(), v_true)); } @@ -420,7 +420,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_le(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_eq_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); + HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); HVX_VectorPred pred = Q6_Q_vcmp_eq_VwVw(a.Get(), b.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } @@ -439,7 +439,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_eq(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_lt_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); + HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(b.Get(), a.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } @@ -458,7 +458,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_lt(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_lt_or_nan_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); + HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(b.Get(), a.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } -- GitLab From 7cc169d9476e45760ad72a051ad1c0615d417418 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Mon, 4 Aug 2025 13:41:46 -0700 Subject: [PATCH 2/3] Revert "Fix pcmp_* for HVX to to comply with the new definition of true = Scalar(1)." This reverts commit f8191848ee3ad9599e5393299508b82886d2db44. --- Eigen/src/Core/arch/HVX/PacketMath.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Eigen/src/Core/arch/HVX/PacketMath.h b/Eigen/src/Core/arch/HVX/PacketMath.h index b9080d988..ccba96efd 100644 --- a/Eigen/src/Core/arch/HVX/PacketMath.h +++ b/Eigen/src/Core/arch/HVX/PacketMath.h @@ -401,7 +401,7 @@ EIGEN_STRONG_INLINE Packet8f pnegate(const Packet8f& a) { template EIGEN_STRONG_INLINE HVXPacket pcmp_le_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); + HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(a.Get(), b.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, Q6_V_vzero(), v_true)); } @@ -420,7 +420,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_le(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_eq_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); + HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); HVX_VectorPred pred = Q6_Q_vcmp_eq_VwVw(a.Get(), b.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } @@ -439,7 +439,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_eq(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_lt_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); + HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(b.Get(), a.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } @@ -458,7 +458,7 @@ EIGEN_STRONG_INLINE Packet8f pcmp_lt(const Packet8f& a, const Packet8f& b) { template EIGEN_STRONG_INLINE HVXPacket pcmp_lt_or_nan_hvx(const HVXPacket& a, const HVXPacket& b) { - HVX_Vector v_true = Q6_V_vsplat_R(0x3f800000); + HVX_Vector v_true = Q6_Vb_vsplat_R(0xff); HVX_VectorPred pred = Q6_Q_vcmp_gt_VsfVsf(b.Get(), a.Get()); return HVXPacket::Create(Q6_V_vmux_QVV(pred, v_true, Q6_V_vzero())); } -- GitLab From 1a3c3a29772ce532797968cf2f95b12f3fd79609 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Thu, 20 Nov 2025 16:17:19 -0800 Subject: [PATCH 3/3] Fix bug in riscv mr. --- Eigen/src/Core/util/ConfigureVectorization.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Eigen/src/Core/util/ConfigureVectorization.h b/Eigen/src/Core/util/ConfigureVectorization.h index 80ad82ef1..d41d05db1 100644 --- a/Eigen/src/Core/util/ConfigureVectorization.h +++ b/Eigen/src/Core/util/ConfigureVectorization.h @@ -428,7 +428,7 @@ extern "C" { #error "Eigen requires a fixed SVE lector length but EIGEN_ARM64_SVE_VL is not set." #endif -#elif defined(EIGEN_ARCH_RISCV) +#elif EIGEN_ARCH_RISCV #if defined(__riscv_zfh) #define EIGEN_HAS_BUILTIN_FLOAT16 -- GitLab