add ei_predux_mul for AltiVec

This commit is contained in:
Gael Guennebaud 2009-02-10 18:26:59 +00:00
parent cbbc6d940b
commit 7954f7709a

View File

@ -298,16 +298,6 @@ inline v4f ei_preduxp(const v4f* vecs)
return sum[0];
}
inline float ei_predux(const v4f& a)
{
v4f b, sum;
b = (v4f)vec_sld(a, a, 8);
sum = vec_add(a, b);
b = (v4f)vec_sld(sum, sum, 4);
sum = vec_add(sum, b);
return ei_pfirst(sum);
}
inline v4i ei_preduxp(const v4i* vecs)
{
v4i v[4], sum[4];
@ -335,6 +325,16 @@ inline v4i ei_preduxp(const v4i* vecs)
return sum[0];
}
inline float ei_predux(const v4f& a)
{
v4f b, sum;
b = (v4f)vec_sld(a, a, 8);
sum = vec_add(a, b);
b = (v4f)vec_sld(sum, sum, 4);
sum = vec_add(sum, b);
return ei_pfirst(sum);
}
inline int ei_predux(const v4i& a)
{
USE_CONST_v0i;
@ -344,6 +344,26 @@ inline int ei_predux(const v4i& a)
return ei_pfirst(sum);
}
inline float ei_predux_mul(const v4f& a)
{
v4f b, sum;
b = (v4f)vec_sld(a, a, 8);
sum = ei_pmul(a, b);
b = (v4f)vec_sld(sum, sum, 4);
sum = ei_pmul(sum, b);
return ei_pfirst(sum);
}
inline int ei_predux_mul(const v4i& a)
{
v4i b, sum;
b = (v4i)vec_sld(a, a, 8);
sum = ei_pmul(a, b);
b = (v4i)vec_sld(sum, sum, 4);
sum = ei_pmul(sum, b);
return ei_pfirst(sum);
}
template<int Offset>
struct ei_palign_impl<Offset, v4f>
{