|
@@ -517,6 +517,7 @@ STARPU_ATOMIC_SOMETHING64(or, old | value)
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
+/* Try to replace `old' with `value' at `ptr'. Returns true iff the swap was successful. */
|
|
|
#ifdef STARPU_HAVE_SYNC_BOOL_COMPARE_AND_SWAP
|
|
|
#define STARPU_BOOL_COMPARE_AND_SWAP(ptr, old, value) (__sync_bool_compare_and_swap ((ptr), (old), (value)))
|
|
|
#define STARPU_BOOL_COMPARE_AND_SWAP32(ptr, old, value) STARPU_BOOL_COMPARE_AND_SWAP(ptr, old, value)
|
|
@@ -533,6 +534,13 @@ STARPU_ATOMIC_SOMETHING64(or, old | value)
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
+#if UINTPTR_MAX == UINT64_MAX
|
|
|
+#define STARPU_BOOL_COMPARE_AND_SWAP_PTR(ptr, old, value) STARPU_BOOL_COMPARE_AND_SWAP64(ptr, old, value)
|
|
|
+#else
|
|
|
+#define STARPU_BOOL_COMPARE_AND_SWAP_PTR(ptr, old, value) STARPU_BOOL_COMPARE_AND_SWAP32(ptr, old, value)
|
|
|
+#endif
|
|
|
+
|
|
|
+/* Try to replace `old' with `value' at `ptr'. Returns the value actually seen at `ptr'. */
|
|
|
#ifdef STARPU_HAVE_SYNC_VAL_COMPARE_AND_SWAP
|
|
|
#define STARPU_VAL_COMPARE_AND_SWAP(ptr, old, value) (__sync_val_compare_and_swap ((ptr), (old), (value)))
|
|
|
#define STARPU_VAL_COMPARE_AND_SWAP32(ptr, old, value) STARPU_VAL_COMPARE_AND_SWAP(ptr, old, value)
|
|
@@ -549,6 +557,12 @@ STARPU_ATOMIC_SOMETHING64(or, old | value)
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
+#if UINTPTR_MAX == UINT64_MAX
|
|
|
+#define STARPU_VAL_COMPARE_AND_SWAP_PTR(ptr, old, value) STARPU_VAL_COMPARE_AND_SWAP64(ptr, old, value)
|
|
|
+#else
|
|
|
+#define STARPU_VAL_COMPARE_AND_SWAP_PTR(ptr, old, value) STARPU_VAL_COMPARE_AND_SWAP32(ptr, old, value)
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef STARPU_HAVE_ATOMIC_EXCHANGE_N
|
|
|
#define STARPU_VAL_EXCHANGE(ptr, value) (__atomic_exchange_n((ptr), (value), __ATOMIC_SEQ_CST))
|
|
|
#define STARPU_VAL_EXCHANGEL(ptr, value) STARPU_VAL_EXCHANGE((ptr) (value))
|