fix alignment exceptions
authorRay Essick <essick@google.com>
Thu, 24 Aug 2017 12:32:42 +0000 (05:32 -0700)
committerFelicia Lim <flim@google.com>
Thu, 24 Aug 2017 12:32:42 +0000 (05:32 -0700)
some SSE optimizations were using an instruction sequence that required
128-bit alignment, even though this is not always guaranteed. The error
was in handling a 64-bit entity; made the same macro changes that had
been done previously for 32-bit entities.

Signed-off-by: Felicia Lim <flim@google.com>
celt/x86/x86cpu.h

index 04fd48a..1e2bf17 100644 (file)
@@ -82,7 +82,9 @@ int opus_select_arch(void);
  (_mm_cvtepi8_epi32(*(__m128i *)(x)))
 #endif
 
-# if !defined(__OPTIMIZE__)
+/* similar reasoning about the instruction sequence as in the 32-bit macro above,
+ */
+# if defined(__clang__) || !defined(__OPTIMIZE__)
 #  define OP_CVTEPI16_EPI32_M64(x) \
  (_mm_cvtepi16_epi32(_mm_loadl_epi64((__m128i *)(x))))
 # else