Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
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.)
- Loading branch information
Showing
with
15 additions
and
2 deletions.
-
+15
−2
src/atomic/SDL_atomic.c
|
@@ -35,6 +35,19 @@ |
|
|
#include <atomic.h> |
|
|
#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; |
|
|