diff options
author | 2009-02-12 21:58:44 +0000 | |
---|---|---|
committer | 2009-02-12 21:58:44 +0000 | |
commit | ad2bf14dbb734439dfb15bd77b7e673f965a68fb (patch) | |
tree | 3517ae971d541c9be144565e868a7fe31812de2d /Eigen/src/Core/arch/AltiVec/PacketMath.h | |
parent | 3b12f48aa3b67d6c7465e0cd21a85677cf543e4d (diff) |
modified ei_predux_min/max to actually use altivec instructions
Diffstat (limited to 'Eigen/src/Core/arch/AltiVec/PacketMath.h')
-rw-r--r-- | Eigen/src/Core/arch/AltiVec/PacketMath.h | 40 |
1 files 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_min(a, vec_sld(a, a, 4)); + c = vec_min(a, vec_sld(b, b, 4)); + res = vec_min(a, vec_sld(c, c, 4)); + return ei_pfirst(res); } inline int ei_predux_min(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_min(a, vec_sld(a, a, 4)); + c = vec_min(a, vec_sld(b, b, 4)); + res = vec_min(a, vec_sld(c, c, 4)); + return ei_pfirst(res); } inline float ei_predux_max(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); } |