mirror of https://github.com/encounter/SDL.git
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:
parent
266816b4aa
commit
1dc9ae5c1e
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue