[flac-dev] [PATCH 1/1] ensure that stack is aligned for SSE functions if using mingw32

Tristan Matthews tmatth at videolan.org
Mon Mar 9 15:41:32 PDT 2015


Unable to test on win32 at the moment, please give this a try. Feedback welcome.

Avoids crashes due to unaligned ops when built with mingw.
---
 src/libFLAC/include/private/cpu.h | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/libFLAC/include/private/cpu.h b/src/libFLAC/include/private/cpu.h
index 8927897..bd40012 100644
--- a/src/libFLAC/include/private/cpu.h
+++ b/src/libFLAC/include/private/cpu.h
@@ -72,8 +72,13 @@
     #define FLAC__FMA_SUPPORTED 1
   #endif
 #elif defined __GNUC__
+  #ifdef __MINGW32__
+    #define FLAC__STACK_ALIGN __attribute__((force_align_arg_pointer))
+  #else
+    #define FLAC__STACK_ALIGN
+  #endif /* SSE stack alignment fixups */
   #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) /* since GCC 4.9 -msse.. compiler options aren't necessary */
-    #define FLAC__SSE_TARGET(x) __attribute__ ((__target__ (x)))
+    #define FLAC__SSE_TARGET(x) __attribute__ ((__target__ (x))) FLAC__STACK_ALIGN
     #define FLAC__SSE_SUPPORTED 1
     #define FLAC__SSE2_SUPPORTED 1
     #define FLAC__SSSE3_SUPPORTED 1
@@ -82,7 +87,7 @@
     #define FLAC__AVX2_SUPPORTED 1
     #define FLAC__FMA_SUPPORTED 1
   #else /* for GCC older than 4.9 */
-    #define FLAC__SSE_TARGET(x)
+    #define FLAC__SSE_TARGET(x) FLAC__STACK_ALIGN
     #ifdef __SSE__
       #define FLAC__SSE_SUPPORTED 1
     #endif
-- 
2.1.0



More information about the flac-dev mailing list