summaryrefslogtreecommitdiffstats
path: root/osdep
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 /osdep
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.
Diffstat (limited to 'osdep')
-rw-r--r--osdep/atomic.h37
1 files changed, 7 insertions, 30 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