From 8f957564ec3e3657a3ff023a444a71e8903af4f3 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 9 Apr 2008 18:04:26 +0000 Subject: [PATCH] a better bugfix in ei_matrix_operator_equals_packet_unroller --- Eigen/src/Core/OperatorEquals.h | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/Eigen/src/Core/OperatorEquals.h b/Eigen/src/Core/OperatorEquals.h index 4d0c4de3a..213c5f660 100644 --- a/Eigen/src/Core/OperatorEquals.h +++ b/Eigen/src/Core/OperatorEquals.h @@ -65,24 +65,24 @@ struct ei_matrix_operator_equals_unroller //---- -template +template struct ei_matrix_operator_equals_packet_unroller { enum { - index = UnrollCount-ei_packet_traits::size, - row = Derived1::Flags&RowMajorBit ? index / Derived1::ColsAtCompileTime : index % Derived1::RowsAtCompileTime, - col = Derived1::Flags&RowMajorBit ? index % Derived1::ColsAtCompileTime : index / Derived1::RowsAtCompileTime + row = Derived1::Flags&RowMajorBit ? Index / Derived1::ColsAtCompileTime : Index % Derived1::RowsAtCompileTime, + col = Derived1::Flags&RowMajorBit ? Index % Derived1::ColsAtCompileTime : Index / Derived1::RowsAtCompileTime }; static void run(Derived1 &dst, const Derived2 &src) { - ei_matrix_operator_equals_packet_unroller::run(dst, src); + ei_matrix_operator_equals_packet_unroller::size>::run(dst, src); dst.writePacketCoeff(row, col, src.packetCoeff(row, col)); } }; template -struct ei_matrix_operator_equals_packet_unroller::size > +struct ei_matrix_operator_equals_packet_unroller { static void run(Derived1 &dst, const Derived2 &src) { @@ -90,13 +90,6 @@ struct ei_matrix_operator_equals_packet_unroller -struct ei_matrix_operator_equals_packet_unroller -{ - static void run(Derived1 &, const Derived2 &) { ei_internal_assert(false && "ei_matrix_operator_equals_packet_unroller"); } -}; - template struct ei_matrix_operator_equals_packet_unroller { @@ -228,8 +221,9 @@ struct ei_operator_equals_impl { ei_matrix_operator_equals_packet_unroller ::run - (dst.const_cast_derived(), src.derived()); + unroll && int(Derived::SizeAtCompileTime)>=ei_packet_traits::size + ? Derived::SizeAtCompileTime-ei_packet_traits::size + : Dynamic>::run(dst.const_cast_derived(), src.derived()); } else {