Browse Source

linmath: use correct 32-byte alignment when compiling Eigen with AVX

rdb 9 years ago
parent
commit
94641c83a0
2 changed files with 8 additions and 1 deletions
  1. 5 0
      dtool/src/dtoolbase/dtoolbase.h
  2. 3 1
      panda/src/linmath/lsimpleMatrix.h

+ 5 - 0
dtool/src/dtoolbase/dtoolbase.h

@@ -336,21 +336,26 @@
 #define ALIGN_4BYTE
 #define ALIGN_8BYTE
 #define ALIGN_16BYTE
+#define ALIGN_32BYTE
 #define ALIGN_64BYTE
 #elif defined(_MSC_VER)
 #define ALIGN_4BYTE __declspec(align(4))
 #define ALIGN_8BYTE __declspec(align(8))
 #define ALIGN_16BYTE __declspec(align(16))
+#define ALIGN_32BYTE __declspec(align(32))
 #define ALIGN_64BYTE __declspec(align(64))
 #elif defined(__GNUC__)
 #define ALIGN_4BYTE __attribute__ ((aligned (4)))
 #define ALIGN_8BYTE __attribute__ ((aligned (8)))
 #define ALIGN_16BYTE __attribute__ ((aligned (16)))
+#define ALIGN_32BYTE __attribute__ ((aligned (32)))
 #define ALIGN_64BYTE __attribute__ ((aligned (64)))
 #else
 #define ALIGN_4BYTE
 #define ALIGN_8BYTE
 #define ALIGN_16BYTE
+#define ALIGN_32BYTE
+#define ALIGN_64BYTE
 #endif
 
 // Do we need to implement memory-alignment enforcement within the

+ 3 - 1
panda/src/linmath/lsimpleMatrix.h

@@ -61,7 +61,9 @@ private:
 #endif  // HAVE_EIGEN
 
 // This is as good a place as any to define this alignment macro.
-#ifdef LINMATH_ALIGN
+#if defined(LINMATH_ALIGN) && defined(HAVE_EIGEN) && defined(__AVX__)
+#define ALIGN_LINMATH ALIGN_32BYTE
+#elif defined(LINMATH_ALIGN)
 #define ALIGN_LINMATH ALIGN_16BYTE
 #else
 #define ALIGN_LINMATH