From 780620e796f281b81f58a7236df1435dfc6b9a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 12 Jun 2018 08:56:28 +0300 Subject: [PATCH] Only use __atomic builtins Now that the compiler for CentOS 6 was upgraded, there is no need to support the old __sync builtins. --- server/core/atomic.cc | 91 ------------------------------------------- 1 file changed, 91 deletions(-) diff --git a/server/core/atomic.cc b/server/core/atomic.cc index afb9cbc74..c7850ccf3 100644 --- a/server/core/atomic.cc +++ b/server/core/atomic.cc @@ -19,182 +19,91 @@ int atomic_add(int *variable, int value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_fetch_add(variable, value, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_add(variable, value); -#endif } uint32_t atomic_add_uint32(uint32_t *variable, int32_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_fetch_add(variable, value, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_add(variable, value); -#endif } int64_t atomic_add_int64(int64_t *variable, int64_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_fetch_add(variable, value, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_add(variable, value); -#endif } uint64_t atomic_add_uint64(uint64_t *variable, int64_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_fetch_add(variable, value, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_add(variable, value); -#endif } int atomic_load_int(const int *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((int*)variable, 0); -#endif } int32_t atomic_load_int32(const int32_t *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((int32_t*)variable, 0); -#endif } int64_t atomic_load_int64(const int64_t *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((int64_t*)variable, 0); -#endif } uint32_t atomic_load_uint32(const uint32_t *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((uint32_t*)variable, 0); -#endif } uint64_t atomic_load_uint64(const uint64_t *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((uint64_t*)variable, 0); -#endif } void* atomic_load_ptr(void * const *variable) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_load_n(variable, __ATOMIC_SEQ_CST); -#else - return __sync_fetch_and_or((void **)variable, 0); -#endif } void atomic_store_int(int *variable, int value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } void atomic_store_int32(int32_t *variable, int32_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } void atomic_store_int64(int64_t *variable, int64_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } void atomic_store_uint32(uint32_t *variable, uint32_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } void atomic_store_uint64(uint64_t *variable, uint64_t value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } void atomic_store_ptr(void **variable, void *value) { -#ifdef MXS_USE_ATOMIC_BUILTINS __atomic_store_n(variable, value, __ATOMIC_SEQ_CST); -#else - __sync_synchronize(); - *variable = value; - __sync_synchronize(); -#endif } bool atomic_cas_ptr(void **variable, void** old_value, void *new_value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_compare_exchange_n(variable, old_value, new_value, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); -#else - return __sync_bool_compare_and_swap(variable, *old_value, new_value); -#endif } int atomic_exchange_int(int *variable, int new_value) { -#ifdef MXS_USE_ATOMIC_BUILTINS return __atomic_exchange_n(variable, new_value, __ATOMIC_SEQ_CST); -#else - /* The __sync-functions have a questionable exchange-operation (__sync_lock_test_and_set) which - * doesn't always write the requested value. Using compare-and-swap instead. */ - int old_val = *variable; - while (!__sync_bool_compare_and_swap(variable, old_val, new_value)) - { - old_val = *variable; - } - return old_val; -#endif } \ No newline at end of file