Fix bugs in Sum.h, add unit-test

This commit is contained in:
Benoit Jacob
2008-08-20 16:43:28 +00:00
parent c501c7a4ef
commit ff8e98c974
4 changed files with 91 additions and 5 deletions

View File

@@ -6,4 +6,4 @@ INSTALL(FILES
)
ADD_SUBDIRECTORY(util)
ADD_SUBDIRECTORY(arch)
ADD_SUBDIRECTORY(arch)

View File

@@ -201,12 +201,11 @@ struct ei_sum_impl<Derived, LinearVectorization, NoUnrolling>
const int alignedEnd = alignedStart + alignedSize;
Scalar res;
if(Derived::SizeAtCompileTime>=2*packetSize && alignedSize >= 2*packetSize)
if(alignedSize)
{
PacketScalar packet_res = mat.template packet<alignment>(alignedStart, alignedStart);
PacketScalar packet_res = mat.template packet<alignment>(alignedStart);
for(int index = alignedStart + packetSize; index < alignedEnd; index += packetSize)
packet_res = ei_padd(packet_res, mat.template packet<alignment>(index));
res = ei_predux(packet_res);
}
else // too small to vectorize anything.
@@ -215,7 +214,7 @@ struct ei_sum_impl<Derived, LinearVectorization, NoUnrolling>
res = Scalar(0);
}
for(int index = alignedEnd; index < size; index++)
for(int index = 0; index < alignedStart; index++)
res += mat.coeff(index);
for(int index = alignedEnd; index < size; index++)