summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik de Castro Lopo <erikd@mega-nerd.com>2017-02-12 22:38:11 +1100
committerErik de Castro Lopo <erikd@mega-nerd.com>2017-02-12 22:38:14 +1100
commit67ea8badadd3e63b8e8af5fe837d075104569330 (patch)
tree381d60a4a9a8675312bae2c8a905d66cf398843b
parentc669249e4c3b23e3a3bb41223035cc41a0e75508 (diff)
downloadflac-67ea8badadd3e63b8e8af5fe837d075104569330.tar.gz
cpu.h: Add #defines so Clang compiles AVX2
Patch-from: <lvqcl.mail@gmail.com>
-rw-r--r--src/libFLAC/include/private/cpu.h25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/libFLAC/include/private/cpu.h b/src/libFLAC/include/private/cpu.h
index 7c651807..623efc55 100644
--- a/src/libFLAC/include/private/cpu.h
+++ b/src/libFLAC/include/private/cpu.h
@@ -88,8 +88,25 @@
#define FLAC__AVX2_SUPPORTED 1
#define FLAC__FMA_SUPPORTED 1
#endif
-#elif defined __GNUC__
- #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) /* since GCC 4.9 -msse.. compiler options aren't necessary */
+#elif defined __GNUC__ || defined __clang__
+ #if defined __clang__ && __has_attribute(__target__) /* clang */
+ #define FLAC__SSE_TARGET(x) __attribute__ ((__target__ (x)))
+ #if __has_builtin(__builtin_ia32_maxps)
+ #define FLAC__SSE_SUPPORTED 1
+ #endif
+ #if __has_builtin(__builtin_ia32_pmuludq128)
+ #define FLAC__SSE2_SUPPORTED 1
+ #endif
+ #if __has_builtin(__builtin_ia32_pabsd128)
+ #define FLAC__SSSE3_SUPPORTED 1
+ #endif
+ #if __has_builtin(__builtin_ia32_pmuldq128)
+ #define FLAC__SSE4_1_SUPPORTED 1
+ #endif
+ #if __has_builtin(__builtin_ia32_pabsd256)
+ #define FLAC__AVX2_SUPPORTED 1
+ #endif
+ #elif !defined __clang__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) /* GCC 4.9+ */
#define FLAC__SSE_TARGET(x) __attribute__ ((__target__ (x)))
#define FLAC__SSE_SUPPORTED 1
#define FLAC__SSE2_SUPPORTED 1
@@ -100,7 +117,7 @@
#define FLAC__AVX2_SUPPORTED 1
#define FLAC__FMA_SUPPORTED 1
#endif
- #else /* for GCC older than 4.9 */
+ #else /* older GCC and clang */
#define FLAC__SSE_TARGET(x)
#ifdef __SSE__
#define FLAC__SSE_SUPPORTED 1
@@ -123,7 +140,7 @@
#ifdef __FMA__
#define FLAC__FMA_SUPPORTED 1
#endif
- #endif /* GCC version */
+ #endif
#endif /* compiler version */
#endif /* intrinsics support */