From 8c00de57f6858b5cdf1cd0930198937ac41bb050 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 13 Apr 2017 13:22:23 -0400 Subject: [PATCH] atomic: let Clang always use atomic_load_n if available. (Apple's Clang reports itself as GCC 4.2.1 in preprocessor macros--the final GNU C compiler Apple shipped--as of the macOS 10.12 SDK.) --- src/atomic/SDL_atomic.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/atomic/SDL_atomic.c b/src/atomic/SDL_atomic.c index c9cb4a9192fa6..1a902834c54e0 100644 --- a/src/atomic/SDL_atomic.c +++ b/src/atomic/SDL_atomic.c @@ -35,6 +35,19 @@ #include #endif +/* The __atomic_load_n() intrinsic showed up in different times for different compilers. */ +#if defined(HAVE_GCC_ATOMICS) +# if defined(__clang__) +# if __has_builtin(__atomic_load_n) +# define HAVE_ATOMIC_LOAD_N 1 +# endif +# elif defined(__GNUC__) +# if (__GNUC__ >= 5) +# define HAVE_ATOMIC_LOAD_N 1 +# endif +# endif +#endif + /* If any of the operations are not provided then we must emulate some of them. That means we need a nice implementation of spin locks @@ -211,7 +224,7 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v) int SDL_AtomicGet(SDL_atomic_t *a) { -#if defined(HAVE_GCC_ATOMICS) && (__GNUC__ >= 5) +#ifdef HAVE_ATOMIC_LOAD_N return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST); #else int value; @@ -225,7 +238,7 @@ SDL_AtomicGet(SDL_atomic_t *a) void * SDL_AtomicGetPtr(void **a) { -#if defined(HAVE_GCC_ATOMICS) && (__GNUC__ >= 5) +#ifdef HAVE_ATOMIC_LOAD_N return __atomic_load_n(a, __ATOMIC_SEQ_CST); #else void *value;