Fix atomic ops for x86 gcc compilers that don't understand atomic intrinsics.

Per buildfarm animal locust.
This commit is contained in:
Andres Freund 2014-09-26 02:28:52 +02:00
parent b64d92f1a5
commit 88bcdf9da5

View File

@ -108,8 +108,11 @@ typedef struct pg_atomic_uint64
*/ */
#if defined(PG_USE_INLINE) || defined(ATOMICS_INCLUDE_DEFINITIONS) #if defined(PG_USE_INLINE) || defined(ATOMICS_INCLUDE_DEFINITIONS)
#if !defined(PG_HAVE_ATOMIC_TEST_SET_FLAG) && \ #ifdef PG_HAVE_ATOMIC_FLAG_SUPPORT
(defined(HAVE_GCC__SYNC_CHAR_TAS) || defined(HAVE_GCC__SYNC_INT32_TAS))
#if defined(HAVE_GCC__SYNC_CHAR_TAS) || defined(HAVE_GCC__SYNC_INT32_TAS)
#ifndef PG_HAVE_ATOMIC_TEST_SET_FLAG
#define PG_HAVE_ATOMIC_TEST_SET_FLAG #define PG_HAVE_ATOMIC_TEST_SET_FLAG
static inline bool static inline bool
pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr) pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr)
@ -118,7 +121,9 @@ pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr)
/* some platform only support a 1 here */ /* some platform only support a 1 here */
return __sync_lock_test_and_set(&ptr->value, 1) == 0; return __sync_lock_test_and_set(&ptr->value, 1) == 0;
} }
#endif /* !defined(PG_HAVE_ATOMIC_TEST_SET_FLAG) && defined(HAVE_GCC__SYNC_*_TAS) */ #endif
#endif /* defined(HAVE_GCC__SYNC_*_TAS) */
#ifndef PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG #ifndef PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG
#define PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG #define PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG
@ -153,6 +158,8 @@ pg_atomic_init_flag_impl(volatile pg_atomic_flag *ptr)
} }
#endif #endif
#endif /* defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) */
/* prefer __atomic, it has a better API */ /* prefer __atomic, it has a better API */
#if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32) && defined(HAVE_GCC__ATOMIC_INT32_CAS) #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32) && defined(HAVE_GCC__ATOMIC_INT32_CAS)
#define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32 #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32