mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-02-05 17:50:26 +08:00
modified ei_predux_min/max to actually use altivec instructions
This commit is contained in:
parent
3b12f48aa3
commit
ad2bf14dbb
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user