aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/arch/AltiVec/PacketMath.h
diff options
context:
space:
mode:
authorGravatar Konstantinos A. Margaritis <markos@codex.gr>2009-02-12 21:58:44 +0000
committerGravatar Konstantinos A. Margaritis <markos@codex.gr>2009-02-12 21:58:44 +0000
commitad2bf14dbb734439dfb15bd77b7e673f965a68fb (patch)
tree3517ae971d541c9be144565e868a7fe31812de2d /Eigen/src/Core/arch/AltiVec/PacketMath.h
parent3b12f48aa3b67d6c7465e0cd21a85677cf543e4d (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.h40
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);
}