Define AO_int_and/or/xor primitives in ao_t_is_int header
authorIvan Maidanski <ivmai@mail.ru>
Sun, 13 Jan 2013 20:27:16 +0000 (00:27 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Sun, 13 Jan 2013 20:27:16 +0000 (00:27 +0400)
* src/atomic_ops/sysdeps/ao_t_is_int.template: Update comment; remove
TODO item.
* src/atomic_ops/sysdeps/ao_t_is_int.template (AO_int_and_XBAR,
AO_int_or_XBAR, AO_int_xor_XBAR): Define template primitive (and
define the corresponding AO_HAVE_int_X macro).
* src/atomic_ops/sysdeps/ao_t_is_int.h: Regenerate.

src/atomic_ops/sysdeps/ao_t_is_int.h
src/atomic_ops/sysdeps/ao_t_is_int.template

index 68c5520..295998e 100644 (file)
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load) && !defined(AO_HAVE_int_load)
 # define AO_int_load(addr) \
 # define AO_HAVE_int_fetch_and_sub1
 #endif
 
+#if defined(AO_HAVE_and) && !defined(AO_HAVE_int_and)
+# define AO_int_and(addr, val) \
+                AO_and((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and
+#endif
+
+#if defined(AO_HAVE_or) && !defined(AO_HAVE_int_or)
+# define AO_int_or(addr, val) \
+                AO_or((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or
+#endif
+
+#if defined(AO_HAVE_xor) && !defined(AO_HAVE_int_xor)
+# define AO_int_xor(addr, val) \
+                AO_xor((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap)
 # define AO_int_fetch_compare_and_swap(addr, old, new_val) \
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_full) && !defined(AO_HAVE_int_load_full)
 # define AO_int_load_full(addr) \
 # define AO_HAVE_int_fetch_and_sub1_full
 #endif
 
+#if defined(AO_HAVE_and_full) && !defined(AO_HAVE_int_and_full)
+# define AO_int_and_full(addr, val) \
+                AO_and_full((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_full
+#endif
+
+#if defined(AO_HAVE_or_full) && !defined(AO_HAVE_int_or_full)
+# define AO_int_or_full(addr, val) \
+                AO_or_full((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_full
+#endif
+
+#if defined(AO_HAVE_xor_full) && !defined(AO_HAVE_int_xor_full)
+# define AO_int_xor_full(addr, val) \
+                AO_xor_full((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_full
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_full) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_full)
 # define AO_int_fetch_compare_and_swap_full(addr, old, new_val) \
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_acquire) && !defined(AO_HAVE_int_load_acquire)
 # define AO_int_load_acquire(addr) \
 # define AO_HAVE_int_fetch_and_sub1_acquire
 #endif
 
+#if defined(AO_HAVE_and_acquire) && !defined(AO_HAVE_int_and_acquire)
+# define AO_int_and_acquire(addr, val) \
+                AO_and_acquire((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_acquire
+#endif
+
+#if defined(AO_HAVE_or_acquire) && !defined(AO_HAVE_int_or_acquire)
+# define AO_int_or_acquire(addr, val) \
+                AO_or_acquire((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_acquire
+#endif
+
+#if defined(AO_HAVE_xor_acquire) && !defined(AO_HAVE_int_xor_acquire)
+# define AO_int_xor_acquire(addr, val) \
+                AO_xor_acquire((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_acquire
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_acquire) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_acquire)
 # define AO_int_fetch_compare_and_swap_acquire(addr, old, new_val) \
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_release) && !defined(AO_HAVE_int_load_release)
 # define AO_int_load_release(addr) \
 # define AO_HAVE_int_fetch_and_sub1_release
 #endif
 
+#if defined(AO_HAVE_and_release) && !defined(AO_HAVE_int_and_release)
+# define AO_int_and_release(addr, val) \
+                AO_and_release((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_release
+#endif
+
+#if defined(AO_HAVE_or_release) && !defined(AO_HAVE_int_or_release)
+# define AO_int_or_release(addr, val) \
+                AO_or_release((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_release
+#endif
+
+#if defined(AO_HAVE_xor_release) && !defined(AO_HAVE_int_xor_release)
+# define AO_int_xor_release(addr, val) \
+                AO_xor_release((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_release
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_release) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_release)
 # define AO_int_fetch_compare_and_swap_release(addr, old, new_val) \
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_write) && !defined(AO_HAVE_int_load_write)
 # define AO_int_load_write(addr) \
 # define AO_HAVE_int_fetch_and_sub1_write
 #endif
 
+#if defined(AO_HAVE_and_write) && !defined(AO_HAVE_int_and_write)
+# define AO_int_and_write(addr, val) \
+                AO_and_write((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_write
+#endif
+
+#if defined(AO_HAVE_or_write) && !defined(AO_HAVE_int_or_write)
+# define AO_int_or_write(addr, val) \
+                AO_or_write((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_write
+#endif
+
+#if defined(AO_HAVE_xor_write) && !defined(AO_HAVE_int_xor_write)
+# define AO_int_xor_write(addr, val) \
+                AO_xor_write((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_write
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_write) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_write)
 # define AO_int_fetch_compare_and_swap_write(addr, old, new_val) \
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_read) && !defined(AO_HAVE_int_load_read)
 # define AO_int_load_read(addr) \
 # define AO_HAVE_int_fetch_and_sub1_read
 #endif
 
+#if defined(AO_HAVE_and_read) && !defined(AO_HAVE_int_and_read)
+# define AO_int_and_read(addr, val) \
+                AO_and_read((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_read
+#endif
+
+#if defined(AO_HAVE_or_read) && !defined(AO_HAVE_int_or_read)
+# define AO_int_or_read(addr, val) \
+                AO_or_read((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_read
+#endif
+
+#if defined(AO_HAVE_xor_read) && !defined(AO_HAVE_int_xor_read)
+# define AO_int_xor_read(addr, val) \
+                AO_xor_read((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_read
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_read) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_read)
 # define AO_int_fetch_compare_and_swap_read(addr, old, new_val) \
index bba8518..620faea 100644 (file)
  * SOFTWARE.
  */
 
-/*
- * Inclusion of this file signifies that AO_t is in fact int.  Hence
- * any AO_... operations can also serve as AO_int_... operations.
- * We currently define only the more important ones here, and allow for
- * the normal generalization process to define the others.
- * TODO: Probably add others in the future.
- */
+/* Inclusion of this file signifies that AO_t is in fact int.           */
+/* Hence any AO_... operation can also serve as AO_int_... operation.   */
 
 #if defined(AO_HAVE_load_XBAR) && !defined(AO_HAVE_int_load_XBAR)
 # define AO_int_load_XBAR(addr) \
 # define AO_HAVE_int_fetch_and_sub1_XBAR
 #endif
 
+#if defined(AO_HAVE_and_XBAR) && !defined(AO_HAVE_int_and_XBAR)
+# define AO_int_and_XBAR(addr, val) \
+                AO_and_XBAR((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_and_XBAR
+#endif
+
+#if defined(AO_HAVE_or_XBAR) && !defined(AO_HAVE_int_or_XBAR)
+# define AO_int_or_XBAR(addr, val) \
+                AO_or_XBAR((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_or_XBAR
+#endif
+
+#if defined(AO_HAVE_xor_XBAR) && !defined(AO_HAVE_int_xor_XBAR)
+# define AO_int_xor_XBAR(addr, val) \
+                AO_xor_XBAR((volatile AO_t *)(addr), (AO_t)(val))
+# define AO_HAVE_int_xor_XBAR
+#endif
+
 #if defined(AO_HAVE_fetch_compare_and_swap_XBAR) \
     && !defined(AO_HAVE_int_fetch_compare_and_swap_XBAR)
 # define AO_int_fetch_compare_and_swap_XBAR(addr, old, new_val) \