summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-02-13 06:45:40 +0100
committerwm4 <wm4@nowhere>2017-02-13 06:45:40 +0100
commit81efe20cd74cefd805b68a99a45248cbf4914212 (patch)
tree386cf7cc6ae5acc30722bee465e7f43f15bbfaad
parent3739d1318fdb658bb6037bfe06bb6cefb3b50a09 (diff)
downloadmpv-81efe20cd74cefd805b68a99a45248cbf4914212.tar.bz2
mpv-81efe20cd74cefd805b68a99a45248cbf4914212.tar.xz
atomic: remove __atomic builtin usage
Using these was a temporary solution while some compilers implemented the underlying atomic mechanisms, but not the C11 language parts (or that's what I guess). Not really useful for us anymore. Also, there is the slight risk of having subtly incorrect semantics by using potentially changing compiler internals and such.
-rw-r--r--osdep/atomic.h37
-rw-r--r--player/main.c2
-rw-r--r--wscript12
3 files changed, 10 insertions, 41 deletions
diff --git a/osdep/atomic.h b/osdep/atomic.h
index 50f4f403da..1d3e158afa 100644
--- a/osdep/atomic.h
+++ b/osdep/atomic.h
@@ -27,15 +27,14 @@
#else
// Emulate the parts of C11 stdatomic.h needed by mpv.
-// Still relies on gcc/clang atomic builtins.
-typedef struct { volatile unsigned long v; } atomic_ulong;
-typedef struct { volatile int v; } atomic_int;
-typedef struct { volatile unsigned int v; } atomic_uint;
-typedef struct { volatile _Bool v; } atomic_bool;
-typedef struct { volatile long long v; } atomic_llong;
-typedef struct { volatile uint_least32_t v; } atomic_uint_least32_t;
-typedef struct { volatile unsigned long long v; } atomic_ullong;
+typedef struct { unsigned long v; } atomic_ulong;
+typedef struct { int v; } atomic_int;
+typedef struct { unsigned int v; } atomic_uint;
+typedef struct { _Bool v; } atomic_bool;
+typedef struct { long long v; } atomic_llong;
+typedef struct { uint_least32_t v; } atomic_uint_least32_t;
+typedef struct { unsigned long long v; } atomic_ullong;
#define ATOMIC_VAR_INIT(x) \
{.v = (x)}
@@ -45,24 +44,6 @@ typedef struct { volatile unsigned long long v; } atomic_ullong;
#define atomic_load_explicit(p, e) atomic_load(p)
-#if HAVE_ATOMIC_BUILTINS
-
-#define atomic_load(p) \
- __atomic_load_n(&(p)->v, __ATOMIC_SEQ_CST)
-#define atomic_store(p, val) \
- __atomic_store_n(&(p)->v, val, __ATOMIC_SEQ_CST)
-#define atomic_fetch_add(a, b) \
- __atomic_fetch_add(&(a)->v, b, __ATOMIC_SEQ_CST)
-#define atomic_fetch_and(a, b) \
- __atomic_fetch_and(&(a)->v, b, __ATOMIC_SEQ_CST)
-#define atomic_fetch_or(a, b) \
- __atomic_fetch_or(&(a)->v, b, __ATOMIC_SEQ_CST)
-#define atomic_compare_exchange_strong(a, b, c) \
- __atomic_compare_exchange_n(&(a)->v, b, c, 0, __ATOMIC_SEQ_CST, \
- __ATOMIC_SEQ_CST)
-
-#elif defined(__GNUC__)
-
#include <pthread.h>
extern pthread_mutex_t mp_atomic_mutex;
@@ -104,10 +85,6 @@ extern pthread_mutex_t mp_atomic_mutex;
pthread_mutex_unlock(&mp_atomic_mutex); \
res; })
-#else
-# error "this should have been a configuration error, report a bug please"
-#endif /* no atomics */
-
#endif /* else HAVE_STDATOMIC */
#endif
diff --git a/player/main.c b/player/main.c
index 87ec1ab70b..3f5e5abe59 100644
--- a/player/main.c
+++ b/player/main.c
@@ -74,7 +74,7 @@ static const char def_config[] =
#define FULLCONFIG "(missing)\n"
#endif
-#if !(HAVE_STDATOMIC || HAVE_ATOMIC_BUILTINS || HAVE_SYNC_BUILTINS)
+#if !HAVE_STDATOMIC
pthread_mutex_t mp_atomic_mutex = PTHREAD_MUTEX_INITIALIZER;
#endif
diff --git a/wscript b/wscript
index e660ff7003..aefa6dd82b 100644
--- a/wscript
+++ b/wscript
@@ -171,19 +171,11 @@ main_dependencies = [
'atomic_int_least64_t test = ATOMIC_VAR_INIT(123);'
'atomic_fetch_add(&test, 1)'))
}, {
- 'name': 'atomic-builtins',
- 'desc': 'compiler support for __atomic built-ins',
- 'func': check_libs(['atomic'],
- check_statement('stdint.h',
- 'int64_t test = 0;'
- 'test = __atomic_add_fetch(&test, 1, __ATOMIC_SEQ_CST)')),
- 'deps_neg': [ 'stdatomic' ],
- }, {
'name': 'atomics',
- 'desc': 'stdatomic.h support or emulation',
+ 'desc': 'stdatomic.h support or slow emulation',
'func': check_true,
'req': True,
- 'deps_any': ['stdatomic', 'atomic-builtins', 'gnuc'],
+ 'deps_any': ['stdatomic', 'gnuc'],
}, {
'name': 'c11-tls',
'desc': 'C11 TLS support',