diff options
author | wm4 <wm4@nowhere> | 2017-01-27 09:15:32 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2017-01-27 09:15:32 +0100 |
commit | c3205d294e519f994829d9355eb133670729aab4 (patch) | |
tree | 4d45fd4707338c836e9c6c74768e1b8e0234d562 | |
parent | 70411f2709ed792df2fc66cd428e8253abfdc390 (diff) | |
download | mpv-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.h | 19 | ||||
-rw-r--r-- | wscript | 10 |
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> @@ -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', |