diff options
author | 2011-03-04 09:57:49 -0500 | |
---|---|---|
committer | 2011-03-04 09:57:49 -0500 | |
commit | 56818d907ed08bcc831da1e990dbc105fb681866 (patch) | |
tree | ba8bcbf7fe09427ad44d52077c80cd678e52609b /Eigen | |
parent | e9868f438ba47f225802cf4722a988cf9a3ca756 (diff) |
Make EIGEN_ALIGN16 always align to fix crashes with EIGEN_DONT_ALIGN_STATICALLY. New macro EIGEN_USER_ALIGN16 had the old behavior i.e. honors user preference.
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/DenseStorage.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/util/Macros.h | 12 |
2 files changed, 11 insertions, 5 deletions
diff --git a/Eigen/src/Core/DenseStorage.h b/Eigen/src/Core/DenseStorage.h index 39507ff37..1bcaf4c56 100644 --- a/Eigen/src/Core/DenseStorage.h +++ b/Eigen/src/Core/DenseStorage.h @@ -65,7 +65,7 @@ struct plain_array template <typename T, int Size, int MatrixOrArrayOptions> struct plain_array<T, Size, MatrixOrArrayOptions, 16> { - EIGEN_ALIGN16 T array[Size]; + EIGEN_USER_ALIGN16 T array[Size]; plain_array() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf) } plain_array(constructor_without_unaligned_array_assert) {} }; @@ -73,7 +73,7 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 16> template <typename T, int MatrixOrArrayOptions, int Alignment> struct plain_array<T, 0, MatrixOrArrayOptions, Alignment> { - EIGEN_ALIGN16 T array[1]; + EIGEN_USER_ALIGN16 T array[1]; plain_array() {} plain_array(constructor_without_unaligned_array_assert) {} }; diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h index 9fce08b00..d2fa3230b 100644 --- a/Eigen/src/Core/util/Macros.h +++ b/Eigen/src/Core/util/Macros.h @@ -261,9 +261,7 @@ * If we made alignment depend on whether or not EIGEN_VECTORIZE is defined, it would be impossible to link * vectorized and non-vectorized code. */ -#if !EIGEN_ALIGN_STATICALLY - #define EIGEN_ALIGN_TO_BOUNDARY(n) -#elif (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__) +#if (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__) #define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n))) #elif (defined _MSC_VER) #define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n)) @@ -276,6 +274,14 @@ #define EIGEN_ALIGN16 EIGEN_ALIGN_TO_BOUNDARY(16) +#if EIGEN_ALIGN_STATICALLY +#define EIGEN_USER_ALIGN_TO_BOUNDARY(n) EIGEN_ALIGN_TO_BOUNDARY(n) +#define EIGEN_USER_ALIGN16 EIGEN_ALIGN16 +#else +#define EIGEN_USER_ALIGN_TO_BOUNDARY(n) +#define EIGEN_USER_ALIGN16 +#endif + #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD #define EIGEN_RESTRICT #endif |