* add typedefs for matrices/vectors with LargeBit

* add -pedantic to CXXFLAGS
* cleanup intricated expressions with && and ||
  which gave warnings because of "missing" parentheses
* fix compile error in NumTraits, apparently discovered
  by -pedantic
This commit is contained in:
Benoit Jacob 2008-04-10 10:33:50 +00:00
parent ca448d2537
commit 613c49b475
6 changed files with 51 additions and 17 deletions

View File

@ -7,7 +7,7 @@ SET(CMAKE_INCLUDE_CURRENT_DIR ON)
IF(CMAKE_COMPILER_IS_GNUCXX) IF(CMAKE_COMPILER_IS_GNUCXX)
IF(CMAKE_SYSTEM_NAME MATCHES Linux) IF(CMAKE_SYSTEM_NAME MATCHES Linux)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -fno-exceptions -fno-check-new -fno-common -fstrict-aliasing") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -fno-exceptions -fno-check-new -fno-common -fstrict-aliasing")
ENDIF(CMAKE_SYSTEM_NAME MATCHES Linux) ENDIF(CMAKE_SYSTEM_NAME MATCHES Linux)
ENDIF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(CMAKE_COMPILER_IS_GNUCXX)

View File

@ -4,7 +4,6 @@
#ifdef __SSE2__ #ifdef __SSE2__
#define EIGEN_VECTORIZE #define EIGEN_VECTORIZE
#define EIGEN_VECTORIZE_SSE #define EIGEN_VECTORIZE_SSE
#warning "enabling vectorization"
#include <emmintrin.h> #include <emmintrin.h>
#include <xmmintrin.h> #include <xmmintrin.h>
#endif #endif

View File

@ -80,15 +80,23 @@ struct ei_traits<Matrix<_Scalar, _Rows, _Cols, _Flags, _MaxRows, _MaxCols> >
MaxRowsAtCompileTime = _MaxRows, MaxRowsAtCompileTime = _MaxRows,
MaxColsAtCompileTime = _MaxCols, MaxColsAtCompileTime = _MaxCols,
Flags = (_Flags & ~VectorizableBit) Flags = (_Flags & ~VectorizableBit)
| (( (ei_packet_traits<Scalar>::size>1) && (_Rows!=Dynamic) && (_Cols!=Dynamic) | (
&& ((_Flags&RowMajorBit) && ((_Cols%ei_packet_traits<Scalar>::size)==0) (
|| ((_Rows%ei_packet_traits<Scalar>::size)==0) ) ) ? VectorizableBit : 0), ei_packet_traits<Scalar>::size>1
&& _Rows!=Dynamic
&& _Cols!=Dynamic
&& (
(_Flags&RowMajorBit && _Cols%ei_packet_traits<Scalar>::size==0)
|| (_Rows%ei_packet_traits<Scalar>::size==0)
)
) ? VectorizableBit : 0
),
CoeffReadCost = NumTraits<Scalar>::ReadCost CoeffReadCost = NumTraits<Scalar>::ReadCost
}; };
}; };
template<typename _Scalar, int _Rows, int _Cols, template<typename _Scalar, int _Rows, int _Cols,
unsigned int _Flags = EIGEN_DEFAULT_MATRIX_STORAGE_ORDER, unsigned int _Flags = EIGEN_DEFAULT_MATRIX_FLAGS,
int _MaxRows = _Rows, int _MaxCols = _Cols> int _MaxRows = _Rows, int _MaxCols = _Cols>
class Matrix : public MatrixBase<Matrix<_Scalar, _Rows, _Cols, class Matrix : public MatrixBase<Matrix<_Scalar, _Rows, _Cols,
_Flags, _MaxRows, _MaxCols> > _Flags, _MaxRows, _MaxCols> >
@ -328,6 +336,19 @@ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
#undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES #undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES
#undef EIGEN_MAKE_TYPEDEFS #undef EIGEN_MAKE_TYPEDEFS
#define EIGEN_MAKE_TYPEDEFS_LARGE(Type, TypeSuffix) \
typedef Matrix<Type, Dynamic, Dynamic, EIGEN_DEFAULT_MATRIX_FLAGS | LargeBit> MatrixXL##TypeSuffix; \
typedef Matrix<Type, Dynamic, 1, EIGEN_DEFAULT_MATRIX_FLAGS | LargeBit> VectorXL##TypeSuffix; \
typedef Matrix<Type, 1, Dynamic, EIGEN_DEFAULT_MATRIX_FLAGS | LargeBit> RowVectorXL##TypeSuffix;
EIGEN_MAKE_TYPEDEFS_LARGE(int, i)
EIGEN_MAKE_TYPEDEFS_LARGE(float, f)
EIGEN_MAKE_TYPEDEFS_LARGE(double, d)
EIGEN_MAKE_TYPEDEFS_LARGE(std::complex<float>, cf)
EIGEN_MAKE_TYPEDEFS_LARGE(std::complex<double>, cd)
#undef EIGEN_MAKE_TYPEDEFS_LARGE
#define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ #define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \
using Eigen::Matrix##SizeSuffix##TypeSuffix; \ using Eigen::Matrix##SizeSuffix##TypeSuffix; \
using Eigen::Vector##SizeSuffix##TypeSuffix; \ using Eigen::Vector##SizeSuffix##TypeSuffix; \

View File

@ -56,7 +56,7 @@ template<> struct NumTraits<int>
HasFloatingPoint = 0, HasFloatingPoint = 0,
ReadCost = 1, ReadCost = 1,
AddCost = 1, AddCost = 1,
MulCost = 1, MulCost = 1
}; };
}; };
@ -69,7 +69,7 @@ template<> struct NumTraits<float>
HasFloatingPoint = 1, HasFloatingPoint = 1,
ReadCost = 1, ReadCost = 1,
AddCost = 1, AddCost = 1,
MulCost = 1, MulCost = 1
}; };
}; };
@ -82,7 +82,7 @@ template<> struct NumTraits<double>
HasFloatingPoint = 1, HasFloatingPoint = 1,
ReadCost = 1, ReadCost = 1,
AddCost = 1, AddCost = 1,
MulCost = 1, MulCost = 1
}; };
}; };
@ -95,7 +95,7 @@ template<typename _Real> struct NumTraits<std::complex<_Real> >
HasFloatingPoint = NumTraits<Real>::HasFloatingPoint, HasFloatingPoint = NumTraits<Real>::HasFloatingPoint,
ReadCost = 2, ReadCost = 2,
AddCost = 2 * NumTraits<Real>::AddCost, AddCost = 2 * NumTraits<Real>::AddCost,
MulCost = 4 * NumTraits<Real>::MulCost + 2 * NumTraits<Real>::AddCost, MulCost = 4 * NumTraits<Real>::MulCost + 2 * NumTraits<Real>::AddCost
}; };
}; };
@ -108,7 +108,7 @@ template<> struct NumTraits<long long int>
HasFloatingPoint = 0, HasFloatingPoint = 0,
ReadCost = 1, ReadCost = 1,
AddCost = 1, AddCost = 1,
MulCost = 1, MulCost = 1
}; };
}; };
@ -121,7 +121,7 @@ template<> struct NumTraits<long double>
HasFloatingPoint = 1, HasFloatingPoint = 1,
ReadCost = 1, ReadCost = 1,
AddCost = 2, AddCost = 2,
MulCost = 2, MulCost = 2
}; };
}; };
@ -134,7 +134,7 @@ template<> struct NumTraits<bool>
HasFloatingPoint = 0, HasFloatingPoint = 0,
ReadCost = 1, ReadCost = 1,
AddCost = 1, AddCost = 1,
MulCost = 1, MulCost = 1
}; };
}; };

View File

@ -134,10 +134,22 @@ struct ei_traits<Product<Lhs, Rhs, EvalMode> >
: (unsigned int)(LhsFlags | RhsFlags) & ~LargeBit ) : (unsigned int)(LhsFlags | RhsFlags) & ~LargeBit )
| EvalBeforeAssigningBit | EvalBeforeAssigningBit
| (ei_product_eval_mode<Lhs, Rhs>::value == (int)CacheOptimalProduct ? EvalBeforeNestingBit : 0)) | (ei_product_eval_mode<Lhs, Rhs>::value == (int)CacheOptimalProduct ? EvalBeforeNestingBit : 0))
& (~(RowMajorBit | VectorizableBit)) & (
| (((!(Lhs::Flags & RowMajorBit)) && (Lhs::Flags & VectorizableBit)) ? VectorizableBit ~(RowMajorBit | VectorizableBit)
: ((Rhs::Flags & RowMajorBit && (Rhs::Flags & VectorizableBit)) ? (RowMajorBit | VectorizableBit) | (
: EIGEN_DEFAULT_MATRIX_STORAGE_ORDER)), (
!(Lhs::Flags & RowMajorBit) && (Lhs::Flags & VectorizableBit)
)
? VectorizableBit
: (
(
(Rhs::Flags & RowMajorBit) && (Rhs::Flags & VectorizableBit)
)
? RowMajorBit | VectorizableBit
: 0
)
)
),
CoeffReadCost CoeffReadCost
= Lhs::ColsAtCompileTime == Dynamic = Lhs::ColsAtCompileTime == Dynamic
? Dynamic ? Dynamic

View File

@ -43,6 +43,8 @@
#define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER 0 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER 0
#endif #endif
#define EIGEN_DEFAULT_MATRIX_FLAGS EIGEN_DEFAULT_MATRIX_STORAGE_ORDER
#define USING_PART_OF_NAMESPACE_EIGEN \ #define USING_PART_OF_NAMESPACE_EIGEN \
EIGEN_USING_MATRIX_TYPEDEFS \ EIGEN_USING_MATRIX_TYPEDEFS \
using Eigen::Matrix; \ using Eigen::Matrix; \