From 5f6fbaa0e72d85a3904c7796490ada89d8acd4e4 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 19 Dec 2008 15:38:39 +0000 Subject: * fix a vectorization issue in Product * use _mm_malloc/_mm_free on other platforms than linux of MSVC (eg., cygwin, OSX) * replace a lot of inline keywords by EIGEN_STRONG_INLINE to compensate for poor MSVC inlining --- Eigen/src/Core/CwiseNullaryOp.h | 67 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 34 deletions(-) (limited to 'Eigen/src/Core/CwiseNullaryOp.h') diff --git a/Eigen/src/Core/CwiseNullaryOp.h b/Eigen/src/Core/CwiseNullaryOp.h index 32cc12d4e..a92e3bb48 100644 --- a/Eigen/src/Core/CwiseNullaryOp.h +++ b/Eigen/src/Core/CwiseNullaryOp.h @@ -75,21 +75,21 @@ class CwiseNullaryOp : ei_no_assignment_operator, && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); } - int rows() const { return m_rows.value(); } - int cols() const { return m_cols.value(); } + EIGEN_STRONG_INLINE int rows() const { return m_rows.value(); } + EIGEN_STRONG_INLINE int cols() const { return m_cols.value(); } - const Scalar coeff(int rows, int cols) const + EIGEN_STRONG_INLINE const Scalar coeff(int rows, int cols) const { return m_functor(rows, cols); } template - PacketScalar packet(int, int) const + EIGEN_STRONG_INLINE PacketScalar packet(int, int) const { return m_functor.packetOp(); } - const Scalar coeff(int index) const + EIGEN_STRONG_INLINE const Scalar coeff(int index) const { if(RowsAtCompileTime == 1) return m_functor(0, index); @@ -98,7 +98,7 @@ class CwiseNullaryOp : ei_no_assignment_operator, } template - PacketScalar packet(int) const + EIGEN_STRONG_INLINE PacketScalar packet(int) const { return m_functor.packetOp(); } @@ -125,7 +125,7 @@ class CwiseNullaryOp : ei_no_assignment_operator, */ template template -const CwiseNullaryOp +EIGEN_STRONG_INLINE const CwiseNullaryOp MatrixBase::NullaryExpr(int rows, int cols, const CustomNullaryOp& func) { return CwiseNullaryOp(rows, cols, func); @@ -148,7 +148,7 @@ MatrixBase::NullaryExpr(int rows, int cols, const CustomNullaryOp& func */ template template -const CwiseNullaryOp +EIGEN_STRONG_INLINE const CwiseNullaryOp MatrixBase::NullaryExpr(int size, const CustomNullaryOp& func) { ei_assert(IsVectorAtCompileTime); @@ -167,7 +167,7 @@ MatrixBase::NullaryExpr(int size, const CustomNullaryOp& func) */ template template -const CwiseNullaryOp +EIGEN_STRONG_INLINE const CwiseNullaryOp MatrixBase::NullaryExpr(const CustomNullaryOp& func) { return CwiseNullaryOp(RowsAtCompileTime, ColsAtCompileTime, func); @@ -187,7 +187,7 @@ MatrixBase::NullaryExpr(const CustomNullaryOp& func) * \sa class CwiseNullaryOp */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Constant(int rows, int cols, const Scalar& value) { return NullaryExpr(rows, cols, ei_scalar_constant_op(value)); @@ -209,7 +209,7 @@ MatrixBase::Constant(int rows, int cols, const Scalar& value) * \sa class CwiseNullaryOp */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Constant(int size, const Scalar& value) { return NullaryExpr(size, ei_scalar_constant_op(value)); @@ -225,7 +225,7 @@ MatrixBase::Constant(int size, const Scalar& value) * \sa class CwiseNullaryOp */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Constant(const Scalar& value) { EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) @@ -248,7 +248,7 @@ bool MatrixBase::isApproxToConstant * \sa class CwiseNullaryOp, Zero(), Ones() */ template -Derived& MatrixBase::setConstant(const Scalar& value) +EIGEN_STRONG_INLINE Derived& MatrixBase::setConstant(const Scalar& value) { return derived() = Constant(rows(), cols(), value); } @@ -272,7 +272,7 @@ Derived& MatrixBase::setConstant(const Scalar& value) * \sa Zero(), Zero(int) */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Zero(int rows, int cols) { return Constant(rows, cols, Scalar(0)); @@ -295,7 +295,7 @@ MatrixBase::Zero(int rows, int cols) * \sa Zero(), Zero(int,int) */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Zero(int size) { return Constant(size, Scalar(0)); @@ -312,7 +312,7 @@ MatrixBase::Zero(int size) * \sa Zero(int), Zero(int,int) */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Zero() { return Constant(Scalar(0)); @@ -327,8 +327,7 @@ MatrixBase::Zero() * \sa class CwiseNullaryOp, Zero() */ template -bool MatrixBase::isZero -(RealScalar prec) const +bool MatrixBase::isZero(RealScalar prec) const { for(int j = 0; j < cols(); ++j) for(int i = 0; i < rows(); ++i) @@ -345,7 +344,7 @@ bool MatrixBase::isZero * \sa class CwiseNullaryOp, Zero() */ template -Derived& MatrixBase::setZero() +EIGEN_STRONG_INLINE Derived& MatrixBase::setZero() { return setConstant(Scalar(0)); } @@ -369,7 +368,7 @@ Derived& MatrixBase::setZero() * \sa Ones(), Ones(int), isOnes(), class Ones */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Ones(int rows, int cols) { return Constant(rows, cols, Scalar(1)); @@ -392,7 +391,7 @@ MatrixBase::Ones(int rows, int cols) * \sa Ones(), Ones(int,int), isOnes(), class Ones */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Ones(int size) { return Constant(size, Scalar(1)); @@ -409,7 +408,7 @@ MatrixBase::Ones(int size) * \sa Ones(int), Ones(int,int), isOnes(), class Ones */ template -const typename MatrixBase::ConstantReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::ConstantReturnType MatrixBase::Ones() { return Constant(Scalar(1)); @@ -438,7 +437,7 @@ bool MatrixBase::isOnes * \sa class CwiseNullaryOp, Ones() */ template -Derived& MatrixBase::setOnes() +EIGEN_STRONG_INLINE Derived& MatrixBase::setOnes() { return setConstant(Scalar(1)); } @@ -462,7 +461,7 @@ Derived& MatrixBase::setOnes() * \sa Identity(), setIdentity(), isIdentity() */ template -inline const typename MatrixBase::IdentityReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType MatrixBase::Identity(int rows, int cols) { return NullaryExpr(rows, cols, ei_scalar_identity_op()); @@ -479,7 +478,7 @@ MatrixBase::Identity(int rows, int cols) * \sa Identity(int,int), setIdentity(), isIdentity() */ template -inline const typename MatrixBase::IdentityReturnType +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType MatrixBase::Identity() { EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) @@ -521,7 +520,7 @@ bool MatrixBase::isIdentity template=16)> struct ei_setIdentity_impl { - static inline Derived& run(Derived& m) + static EIGEN_STRONG_INLINE Derived& run(Derived& m) { return m = Derived::Identity(m.rows(), m.cols()); } @@ -530,7 +529,7 @@ struct ei_setIdentity_impl template struct ei_setIdentity_impl { - static inline Derived& run(Derived& m) + static EIGEN_STRONG_INLINE Derived& run(Derived& m) { m.setZero(); const int size = std::min(m.rows(), m.cols()); @@ -547,7 +546,7 @@ struct ei_setIdentity_impl * \sa class CwiseNullaryOp, Identity(), Identity(int,int), isIdentity() */ template -inline Derived& MatrixBase::setIdentity() +EIGEN_STRONG_INLINE Derived& MatrixBase::setIdentity() { return ei_setIdentity_impl::run(derived()); } @@ -559,7 +558,7 @@ inline Derived& MatrixBase::setIdentity() * \sa MatrixBase::Unit(int), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::Unit(int size, int i) +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(int size, int i) { EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) return BasisReturnType(SquareMatrixType::Identity(size,size), i); @@ -574,7 +573,7 @@ const typename MatrixBase::BasisReturnType MatrixBase::Unit(in * \sa MatrixBase::Unit(int,int), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::Unit(int i) +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(int i) { EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) return BasisReturnType(SquareMatrixType::Identity(),i); @@ -587,7 +586,7 @@ const typename MatrixBase::BasisReturnType MatrixBase::Unit(in * \sa MatrixBase::Unit(int,int), MatrixBase::Unit(int), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::UnitX() +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitX() { return Derived::Unit(0); } /** \returns an expression of the Y axis unit vector (0,1{,0}^*) @@ -597,7 +596,7 @@ const typename MatrixBase::BasisReturnType MatrixBase::UnitX() * \sa MatrixBase::Unit(int,int), MatrixBase::Unit(int), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::UnitY() +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitY() { return Derived::Unit(1); } /** \returns an expression of the Z axis unit vector (0,0,1{,0}^*) @@ -607,7 +606,7 @@ const typename MatrixBase::BasisReturnType MatrixBase::UnitY() * \sa MatrixBase::Unit(int,int), MatrixBase::Unit(int), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::UnitZ() +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitZ() { return Derived::Unit(2); } /** \returns an expression of the W axis unit vector (0,0,0,1) @@ -617,7 +616,7 @@ const typename MatrixBase::BasisReturnType MatrixBase::UnitZ() * \sa MatrixBase::Unit(int,int), MatrixBase::Unit(int), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() */ template -const typename MatrixBase::BasisReturnType MatrixBase::UnitW() +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitW() { return Derived::Unit(3); } #endif // EIGEN_CWISE_NULLARY_OP_H -- cgit v1.2.3