From ad2bf14dbb734439dfb15bd77b7e673f965a68fb Mon Sep 17 00:00:00 2001 From: "Konstantinos A. Margaritis" Date: Thu, 12 Feb 2009 21:58:44 +0000 Subject: [PATCH] modified ei_predux_min/max to actually use altivec instructions --- Eigen/src/Core/arch/AltiVec/PacketMath.h | 40 ++++++++++++------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h index b90a6fae1..25d961f73 100644 --- a/Eigen/src/Core/arch/AltiVec/PacketMath.h +++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h @@ -363,38 +363,38 @@ inline int ei_predux_mul(const v4i& a) inline float ei_predux_min(const v4f& a) { - EIGEN_ALIGN_128 float aux[4]; - ei_pstore(aux, a); - register float aux0 = aux[0]aux[1] ? aux[0] : aux[1]; - register float aux2 = aux[2]>aux[3] ? aux[2] : aux[3]; - return aux0>aux2 ? aux0 : aux2; + v4f b, c, res; + b = vec_max(a, vec_sld(a, a, 4)); + c = vec_max(a, vec_sld(b, b, 4)); + res = vec_max(a, vec_sld(c, c, 4)); + return ei_pfirst(res); } inline int ei_predux_max(const v4i& a) { - EIGEN_ALIGN_128 int aux[4]; - ei_pstore(aux, a); - register int aux0 = aux[0]>aux[1] ? aux[0] : aux[1]; - register int aux2 = aux[2]>aux[3] ? aux[2] : aux[3]; - return aux0>aux2 ? aux0 : aux2; + v4i b, c, res; + b = vec_max(a, vec_sld(a, a, 4)); + c = vec_max(a, vec_sld(b, b, 4)); + res = vec_max(a, vec_sld(c, c, 4)); + return ei_pfirst(res); }