Просмотр исходного кода

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.
James Legg 9 лет назад
Родитель
Сommit
1dc9ae5c1e
1 измененных файлов с 8 добавлено и 0 удалено
  1. 8 0
      src/atomic/SDL_atomic.c

+ 8 - 0
src/atomic/SDL_atomic.c

@@ -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