diff options
Diffstat (limited to 'Eigen/src/Core/Sum.h')
-rw-r--r-- | Eigen/src/Core/Sum.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/Eigen/src/Core/Sum.h b/Eigen/src/Core/Sum.h index 6c7280800..3b073b95e 100644 --- a/Eigen/src/Core/Sum.h +++ b/Eigen/src/Core/Sum.h @@ -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++) |