mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-13 20:26:03 +08:00
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.
This commit is contained in:
parent
e9868f438b
commit
56818d907e
@ -65,7 +65,7 @@ struct plain_array
|
|||||||
template <typename T, int Size, int MatrixOrArrayOptions>
|
template <typename T, int Size, int MatrixOrArrayOptions>
|
||||||
struct plain_array<T, Size, MatrixOrArrayOptions, 16>
|
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() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf) }
|
||||||
plain_array(constructor_without_unaligned_array_assert) {}
|
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>
|
template <typename T, int MatrixOrArrayOptions, int Alignment>
|
||||||
struct plain_array<T, 0, MatrixOrArrayOptions, Alignment>
|
struct plain_array<T, 0, MatrixOrArrayOptions, Alignment>
|
||||||
{
|
{
|
||||||
EIGEN_ALIGN16 T array[1];
|
EIGEN_USER_ALIGN16 T array[1];
|
||||||
plain_array() {}
|
plain_array() {}
|
||||||
plain_array(constructor_without_unaligned_array_assert) {}
|
plain_array(constructor_without_unaligned_array_assert) {}
|
||||||
};
|
};
|
||||||
|
@ -261,9 +261,7 @@
|
|||||||
* If we made alignment depend on whether or not EIGEN_VECTORIZE is defined, it would be impossible to link
|
* If we made alignment depend on whether or not EIGEN_VECTORIZE is defined, it would be impossible to link
|
||||||
* vectorized and non-vectorized code.
|
* vectorized and non-vectorized code.
|
||||||
*/
|
*/
|
||||||
#if !EIGEN_ALIGN_STATICALLY
|
#if (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__)
|
||||||
#define EIGEN_ALIGN_TO_BOUNDARY(n)
|
|
||||||
#elif (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__)
|
|
||||||
#define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n)))
|
#define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n)))
|
||||||
#elif (defined _MSC_VER)
|
#elif (defined _MSC_VER)
|
||||||
#define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n))
|
#define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n))
|
||||||
@ -276,6 +274,14 @@
|
|||||||
|
|
||||||
#define EIGEN_ALIGN16 EIGEN_ALIGN_TO_BOUNDARY(16)
|
#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
|
#ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD
|
||||||
#define EIGEN_RESTRICT
|
#define EIGEN_RESTRICT
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user