aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-07-15 14:20:45 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-07-15 14:20:45 +0200
commit1578421ed14c23fa5c7ab3c818a069f1c1cefb8a (patch)
tree565cfe8bfd2e85872b95684e364aa9a9ef3ae7eb /Eigen/src/Core
parent7a9519a9be524a879b44a1912ae694cfe4ee4ef7 (diff)
fix issue #25 : the problem was that we assumed Dynamic was a multiple of a packet size
(also disable the test of blueNorm)
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r--Eigen/src/Core/Product.h4
-rw-r--r--Eigen/src/Core/util/XprHelper.h6
2 files changed, 6 insertions, 4 deletions
diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h
index c2317e425..05a8221ee 100644
--- a/Eigen/src/Core/Product.h
+++ b/Eigen/src/Core/Product.h
@@ -138,10 +138,10 @@ struct ei_traits<Product<LhsNested, RhsNested, ProductMode> >
RhsRowMajor = RhsFlags & RowMajorBit,
CanVectorizeRhs = RhsRowMajor && (RhsFlags & PacketAccessBit)
- && (ColsAtCompileTime % ei_packet_traits<Scalar>::size == 0),
+ && (ColsAtCompileTime == Dynamic || (ColsAtCompileTime % ei_packet_traits<Scalar>::size) == 0),
CanVectorizeLhs = (!LhsRowMajor) && (LhsFlags & PacketAccessBit)
- && (RowsAtCompileTime % ei_packet_traits<Scalar>::size == 0),
+ && (RowsAtCompileTime == Dynamic || (RowsAtCompileTime % ei_packet_traits<Scalar>::size) == 0),
EvalToRowMajor = RhsRowMajor && (ProductMode==(int)CacheFriendlyProduct ? LhsRowMajor : (!CanVectorizeLhs)),
diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h
index d8bbe11d5..4ebf33e8a 100644
--- a/Eigen/src/Core/util/XprHelper.h
+++ b/Eigen/src/Core/util/XprHelper.h
@@ -86,9 +86,11 @@ class ei_compute_matrix_flags
{
enum {
row_major_bit = Options&RowMajor ? RowMajorBit : 0,
- inner_max_size = row_major_bit ? MaxCols : MaxRows,
+ inner_max_size = MaxCols==1 ? MaxRows
+ : MaxRows==1 ? MaxCols
+ : row_major_bit ? MaxCols : MaxRows,
is_big = inner_max_size == Dynamic,
- is_packet_size_multiple = (Cols*Rows) % ei_packet_traits<Scalar>::size == 0,
+ is_packet_size_multiple = Rows==Dynamic || Cols==Dynamic || ((Cols*Rows) % ei_packet_traits<Scalar>::size) == 0,
aligned_bit = (((Options&DontAlign)==0) && (is_big || is_packet_size_multiple)) ? AlignedBit : 0,
packet_access_bit = ei_packet_traits<Scalar>::size > 1 && aligned_bit ? PacketAccessBit : 0
};