瀏覽代碼

Add STARPU_BOOL/VAL_COMPARE_AND_SWAP_PTR

Samuel Thibault 4 年之前
父節點
當前提交
10dbb9a189
共有 1 個文件被更改,包括 14 次插入0 次删除
  1. 14 0
      include/starpu_util.h

+ 14 - 0
include/starpu_util.h

@@ -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))