summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-01-27 09:15:32 +0100
committerwm4 <wm4@nowhere>2017-01-27 09:15:32 +0100
commitc3205d294e519f994829d9355eb133670729aab4 (patch)
tree4d45fd4707338c836e9c6c74768e1b8e0234d562
parent70411f2709ed792df2fc66cd428e8253abfdc390 (diff)
downloadmpv-c3205d294e519f994829d9355eb133670729aab4.tar.bz2
mpv-c3205d294e519f994829d9355eb133670729aab4.tar.xz
atomic: drop __sync builtins
The correctness of the stdatomic.h emulation via the __sync builtins is questionable, and we've been relying on exact stdatomic semantics for a while, so just get rid of it. Compilers which support __sync but not stdatomic.h will use to the slow mutex fallback. Not sure about the __atomic builtins. It doesn't seem to harm either, so leave it for now.
-rw-r--r--osdep/atomic.h19
-rw-r--r--wscript10
2 files changed, 1 insertions, 28 deletions
diff --git a/osdep/atomic.h b/osdep/atomic.h
index 9028a504eb..50f4f403da 100644
--- a/osdep/atomic.h
+++ b/osdep/atomic.h
@@ -61,25 +61,6 @@ typedef struct { volatile unsigned long long v; } atomic_ullong;
__atomic_compare_exchange_n(&(a)->v, b, c, 0, __ATOMIC_SEQ_CST, \
__ATOMIC_SEQ_CST)
-#elif HAVE_SYNC_BUILTINS
-
-#define atomic_load(p) \
- __sync_fetch_and_add(&(p)->v, 0)
-#define atomic_store(p, val) \
- (__sync_synchronize(), (p)->v = (val), __sync_synchronize())
-#define atomic_fetch_add(a, b) \
- __sync_fetch_and_add(&(a)->v, b)
-#define atomic_fetch_and(a, b) \
- __sync_fetch_and_and(&(a)->v, b)
-#define atomic_fetch_or(a, b) \
- __sync_fetch_and_or(&(a)->v, b)
-// Assumes __sync_val_compare_and_swap is "strong" (using the C11 meaning).
-#define atomic_compare_exchange_strong(p, old, new) \
- ({ __typeof__((p)->v) val_ = __sync_val_compare_and_swap(&(p)->v, *(old), new); \
- bool ok_ = val_ == *(old); \
- if (!ok_) *(old) = val_; \
- ok_; })
-
#elif defined(__GNUC__)
#include <pthread.h>
diff --git a/wscript b/wscript
index a7ec0a9c3d..6ebc3f9fd0 100644
--- a/wscript
+++ b/wscript
@@ -179,19 +179,11 @@ main_dependencies = [
'test = __atomic_add_fetch(&test, 1, __ATOMIC_SEQ_CST)')),
'deps_neg': [ 'stdatomic' ],
}, {
- 'name': 'sync-builtins',
- 'desc': 'compiler support for __sync built-ins',
- 'func': check_statement('stdint.h',
- 'int64_t test = 0;'
- '__typeof__(test) x = ({int a = 1; a;});'
- 'test = __sync_add_and_fetch(&test, 1)'),
- 'deps_neg': [ 'stdatomic', 'atomic-builtins' ],
- }, {
'name': 'atomics',
'desc': 'stdatomic.h support or emulation',
'func': check_true,
'req': True,
- 'deps_any': ['stdatomic', 'atomic-builtins', 'sync-builtins', 'gnuc'],
+ 'deps_any': ['stdatomic', 'atomic-builtins', 'gnuc'],
}, {
'name': 'c11-tls',
'desc': 'C11 TLS support',