Commit 9836fd5d authored by Sergey Vojtovich's avatar Sergey Vojtovich

MDEV-5766 - my_atomic_load does memory writes

my_atomic_load() is implemented as __sync_fetch_and_or(var, 0) which
writes or-ed value back to var. Memory writes as such have worse
performance and scalability than reads.

gcc 4.7 and up offers better facility for atomic loads/stores. Use it
whenever it is available.
parent 6dda6428
...@@ -31,6 +31,12 @@ ...@@ -31,6 +31,12 @@
#define make_atomic_store_body(S) *a= v #define make_atomic_store_body(S) *a= v
#define MY_ATOMIC_MODE "gcc-builtins-up" #define MY_ATOMIC_MODE "gcc-builtins-up"
#elif defined(__ATOMIC_SEQ_CST)
#define MY_ATOMIC_MODE "gcc-builtins-smp"
#define make_atomic_load_body(S) \
ret= __atomic_load_n(a, __ATOMIC_SEQ_CST)
#define make_atomic_store_body(S) \
__atomic_store_n(a, v, __ATOMIC_SEQ_CST)
#else #else
#define MY_ATOMIC_MODE "gcc-builtins-smp" #define MY_ATOMIC_MODE "gcc-builtins-smp"
#define make_atomic_load_body(S) \ #define make_atomic_load_body(S) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment