]> granicus.if.org Git - libatomic_ops/commitdiff
Add no-barrier double_compare_and_swap to generalization
authorIvan Maidanski <ivmai@mail.ru>
Tue, 2 Oct 2012 07:24:16 +0000 (11:24 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 2 Oct 2012 07:26:59 +0000 (11:26 +0400)
* src/atomic_ops/generalize.h (AO_double_compare_and_swap):
New function (only if AO_HAVE_compare_double_and_swap_double and
not AO_HAVE_double_compare_and_swap) completing double-CAS family;
reformat comment.
* src/atomic_ops/generalize.h (AO_HAVE_double_compare_and_swap):
Define macro (accompanying AO_double_compare_and_swap).

src/atomic_ops/generalize.h

index 6f72e220d042736a20a9391ce2a393ce4d19f1d6..550edad3c551c7953ab82b2a2d0261c6ebde0283 100644 (file)
 # endif
 #endif
 
-/* NEC LE-IT: Convenience functions for AO_double compare and swap which */
-/* types and reads easier in code                                        */
+/* Convenience functions for AO_double compare-and-swap which types and */
+/* reads easier in code.                                                */
+#if defined(AO_HAVE_compare_double_and_swap_double) \
+    && !defined(AO_HAVE_double_compare_and_swap)
+  AO_INLINE int
+  AO_double_compare_and_swap(volatile AO_double_t *addr,
+                             AO_double_t old_val, AO_double_t new_val)
+  {
+    return AO_compare_double_and_swap_double(addr,
+                                        old_val.AO_val1, old_val.AO_val2,
+                                        new_val.AO_val1, new_val.AO_val2);
+  }
+# define AO_HAVE_double_compare_and_swap
+#endif
+
 #if defined(AO_HAVE_compare_double_and_swap_double_release) \
     && !defined(AO_HAVE_double_compare_and_swap_release)
   AO_INLINE int