Use GCC's atomic loads in SDL_AtomicGet and SDL_AtomicGetPtr

This fixes errors reported by address sanitizer, and generates simpler
code on x86 architectures.
This commit is contained in:
James Legg 2017-03-29 15:48:22 +01:00
parent 266816b4aa
commit 1dc9ae5c1e
1 changed files with 8 additions and 0 deletions

View File

@ -211,21 +211,29 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v)
int
SDL_AtomicGet(SDL_atomic_t *a)
{
#ifdef HAVE_GCC_ATOMICS
return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST);
#else
int value;
do {
value = a->value;
} while (!SDL_AtomicCAS(a, value, value));
return value;
#endif
}
void *
SDL_AtomicGetPtr(void **a)
{
#ifdef HAVE_GCC_ATOMICS
return __atomic_load_n(a, __ATOMIC_SEQ_CST);
#else
void *value;
do {
value = *a;
} while (!SDL_AtomicCASPtr(a, value, value));
return value;
#endif
}
void