public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/morello)] Factor sync-builtins.def definitions
@ 2022-05-06 14:43 Matthew Malcomson
  0 siblings, 0 replies; only message in thread
From: Matthew Malcomson @ 2022-05-06 14:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:5b8f0f1afac7ffecb6a7daeaf975ebe0d54e8b1c

commit 5b8f0f1afac7ffecb6a7daeaf975ebe0d54e8b1c
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu Apr 21 19:00:49 2022 +0100

    Factor sync-builtins.def definitions
    
    Adding _c support to the sync builtins in their current form
    would have meant an awful lot of cut-&-paste.  I wasn't confident
    I could do that without introducing inconsistencies, so this patch
    first refactors sync-builtins.def so that each group of functions
    has one top-level definition.
    
    This doesn't come for free.  The indirection means that it's
    harder at a glance to tell what the signature of each group of
    functions actually is.  On the other hand, it does become easier
    to see at a glance what the groups are.
    
    I think on balance the patch should help to make the code more
    maintainable.

Diff:
---
 gcc/sync-builtins.def | 883 +++++++++++++++-----------------------------------
 1 file changed, 258 insertions(+), 625 deletions(-)

diff --git a/gcc/sync-builtins.def b/gcc/sync-builtins.def
index 240e505be08..3c2dba3389a 100644
--- a/gcc/sync-builtins.def
+++ b/gcc/sync-builtins.def
@@ -22,282 +22,207 @@ along with GCC; see the file COPYING3.  If not see
 
      DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
 
-   See builtins.def for details.  */
+   See builtins.def for details.
+
+   In the comments below, DSIZE is one of the following scalar sizes,
+   where the numbers count bytes:
+
+   - I1
+   - I2
+   - I4
+   - I8
+   - I16
+   - ICAP (associated with intcap_t, so includes a tag bit).  */
+
+/* Generate DSIZE-specific functions for ENUM and NAME by invoking:
+
+     DEF (ENUM', NAME', DSIZE)
+
+   for each available non-capability DSIZE.  The order of these definitions is
+   important, since some code adds to or subtracts from the enum value.  */
+#define FOR_NONCAP_SYNC_N(ENUM, NAME, DEF) \
+  DEF (ENUM##_1, NAME "_1", I1) \
+  DEF (ENUM##_2, NAME "_2", I2) \
+  DEF (ENUM##_4, NAME "_4", I4) \
+  DEF (ENUM##_8, NAME "_8", I8) \
+  DEF (ENUM##_16, NAME "_16", I16)
+
+/* As above, but include ICAP.  */
+#define FOR_ALL_SYNC_N(ENUM, NAME, DEF) \
+  FOR_NONCAP_SYNC_N (ENUM, NAME, DEF) \
+  DEF (ENUM##_CAPABILITY, NAME "_capability", ICAP)
+
+/* The macros below operate in pairs.  The first macro defines functions
+   for a particular DSIZE and the second macro defines the following:
+
+   - an overloaded _N function that handles all relevant DSIZEs
+   - a list of DSIZE-specific functions
+
+   The second macro typically gives a sequence of enums like:
+
+   - BUILT_IN_SYNC_FETCH_AND_ADD_N
+   - BUILT_IN_SYNC_FETCH_AND_ADD_1
+   - BUILT_IN_SYNC_FETCH_AND_ADD_2
+   - BUILT_IN_SYNC_FETCH_AND_ADD_4
+   - BUILT_IN_SYNC_FETCH_AND_ADD_8
+   - BUILT_IN_SYNC_FETCH_AND_ADD_16
+   - BUILT_IN_SYNC_FETCH_AND_ADD_CAPABILITY
+
+   although not all functions have a CAPABILITY form.
+
+   The _N function is only used as a function by the front ends, which resolve
+   it to one of the DSIZE-specific functions.  However, the enum for the _N
+   function is also a convenient way of referring to the group as a whole,
+   and code outside the front ends uses it for that purpose.
+
+   Various bits of code rely on the relationship between the enum values.
+   For example, adding log2(nbytes) + 1 to an _N function gives (and must
+   give) the associated DSIZE function.
+
+   For historical reasons, the functions are inconsistent in whether
+   the _N function has an "_n" suffix or has no suffix.  For example,
+   BUILT_IN_ATOMIC_LOAD_N is __atomic_load_n, but BUILT_IN_ATOMIC_ADD_FETCH_N
+   is __atomic_add_fetch (rather than __atomic_add_fetch_n).  The second
+   macro has a SUFFIX argument if the "_n" is (or might be) present.  */
+
+/* DSIZE NAME (volatile void *ptr, DSIZE val).  */
+
+#define DEF_SYNC_BUILTIN_RMW_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_##DSIZE##_VPTR_##DSIZE, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_RMW_ALL_N(ENUM, NAME) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_RMW_N)
+
+/* DSIZE NAME (volatile void *ptr, DSIZE val, int memorder).  */
+
+#define DEF_SYNC_BUILTIN_RMW_ORDER_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_##DSIZE##_VPTR_##DSIZE##_INT, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N(ENUM, NAME, SUFFIX) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME SUFFIX, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_RMW_ORDER_N)
+
+/* DSIZE NAME (const volatile void *ptr, int memorder).  */
+
+#define DEF_SYNC_BUILTIN_LOAD_ORDER_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_##DSIZE##_CONST_VPTR_INT, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_LOAD_ORDER_ALL_N(ENUM, NAME, SUFFIX) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME SUFFIX, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_LOAD_ORDER_N)
+
+/* void NAME (volatile void *ptr, DSIZE val, int memorder).  */
+
+#define DEF_SYNC_BUILTIN_STORE_ORDER_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_VOID_VPTR_##DSIZE##_INT, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_STORE_ORDER_ALL_N(ENUM, NAME, SUFFIX) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME SUFFIX, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_STORE_ORDER_N)
+
+/* void NAME (volatile void *ptr).  */
+
+#define DEF_SYNC_BUILTIN_RELEASE_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_RELEASE_NONCAP_N(ENUM, NAME) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_NONCAP_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_RELEASE_N)
+
+/* bool NAME (volatile void *ptr, DSIZE oldval, DSIZE newval).  */
+
+#define DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_BOOL_VPTR_##DSIZE##_##DSIZE, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_ALL_N(ENUM, NAME) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_N)
+
+/* DSIZE NAME (volatile void *ptr, DSIZE oldval, DSIZE newval).  */
+
+#define DEF_SYNC_BUILTIN_VAL_CMP_SWAP_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_##DSIZE##_VPTR_##DSIZE##_##DSIZE, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_VAL_CMP_SWAP_ALL_N(ENUM, NAME) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_VAL_CMP_SWAP_N)
+
+/* bool NAME (volatile void *ptr, void *expected, DSIZE desired, bool weak,
+	      int success_memorder, int failure_memorder).  */
+
+#define DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_N(ENUM, NAME, DSIZE) \
+  DEF_SYNC_BUILTIN (ENUM, NAME, BT_FN_BOOL_VPTR_PTR_##DSIZE##_BOOL_INT_INT, \
+		    ATTR_NOTHROWCALL_LEAF_LIST)
+
+#define DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_ALL_N(ENUM, NAME, SUFFIX) \
+  DEF_SYNC_BUILTIN (ENUM##_N, NAME SUFFIX, BT_FN_VOID_VAR, \
+		    ATTR_NOTHROWCALL_LEAF_LIST) \
+  FOR_ALL_SYNC_N (ENUM, NAME, DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_N)
 
 /* Synchronization Primitives.  The "_N" version is the one that the user
    is supposed to be using.  It's overloaded, and is resolved to one of the
    "_1" through "_16" versions, plus some extra casts.  */
 
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_N, "__sync_fetch_and_add",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_CAPABILITY,
-		  "__sync_fetch_and_add_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_CAPABILITY,
-		  "__sync_fetch_and_sub_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_N, "__sync_fetch_and_or",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_CAPABILITY,
-		  "__sync_fetch_and_or_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_N, "__sync_fetch_and_and",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_CAPABILITY,
-		  "__sync_fetch_and_and_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_CAPABILITY,
-		  "__sync_fetch_and_xor_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_CAPABILITY,
-		  "__sync_fetch_and_nand_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_N, "__sync_add_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_CAPABILITY,
-		  "__sync_add_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_CAPABILITY,
-		  "__sync_sub_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_N, "__sync_or_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_CAPABILITY,
-		  "__sync_or_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_N, "__sync_and_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_CAPABILITY,
-		  "__sync_and_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_CAPABILITY,
-		  "__sync_xor_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_CAPABILITY,
-		  "__sync_nand_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N,
-		  "__sync_bool_compare_and_swap",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1,
-		  "__sync_bool_compare_and_swap_1",
-		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2,
-		  "__sync_bool_compare_and_swap_2",
-		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4,
-		  "__sync_bool_compare_and_swap_4",
-		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8,
-		  "__sync_bool_compare_and_swap_8",
-		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16,
-		  "__sync_bool_compare_and_swap_16",
-		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_CAPABILITY,
-		  "__sync_bool_compare_and_swap_capability",
-		  BT_FN_BOOL_VPTR_ICAP_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N,
-		  "__sync_val_compare_and_swap",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1,
-		  "__sync_val_compare_and_swap_1",
-		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2,
-		  "__sync_val_compare_and_swap_2",
-		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4,
-		  "__sync_val_compare_and_swap_4",
-		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8,
-		  "__sync_val_compare_and_swap_8",
-		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16,
-		  "__sync_val_compare_and_swap_16",
-		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_CAPABILITY,
-		  "__sync_val_compare_and_swap_capability",
-		  BT_FN_ICAP_VPTR_ICAP_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_N,
-		  "__sync_lock_test_and_set",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_1,
-		  "__sync_lock_test_and_set_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_2,
-		  "__sync_lock_test_and_set_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4,
-		  "__sync_lock_test_and_set_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8,
-		  "__sync_lock_test_and_set_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_16,
-		  "__sync_lock_test_and_set_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_CAPABILITY,
-		  "__sync_lock_test_and_set_capability",
-		  BT_FN_ICAP_VPTR_ICAP, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_N, "__sync_lock_release",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_1, "__sync_lock_release_1",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_2, "__sync_lock_release_2",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_4, "__sync_lock_release_4",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_8, "__sync_lock_release_8",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_16, "__sync_lock_release_16",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_ADD,
+			    "__sync_fetch_and_add")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_SUB,
+			    "__sync_fetch_and_sub")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_OR,
+			    "__sync_fetch_and_or")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_AND,
+			    "__sync_fetch_and_and")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_XOR,
+			    "__sync_fetch_and_xor")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_FETCH_AND_NAND,
+			    "__sync_fetch_and_nand")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_ADD_AND_FETCH,
+			    "__sync_add_and_fetch")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_SUB_AND_FETCH,
+			    "__sync_sub_and_fetch")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_OR_AND_FETCH, "__sync_or_and_fetch")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_AND_AND_FETCH,
+			    "__sync_and_and_fetch")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_XOR_AND_FETCH,
+			    "__sync_xor_and_fetch")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_NAND_AND_FETCH,
+			    "__sync_nand_and_fetch")
+
+DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_ALL_N (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP,
+				      "__sync_bool_compare_and_swap")
+
+DEF_SYNC_BUILTIN_VAL_CMP_SWAP_ALL_N (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP,
+				     "__sync_val_compare_and_swap")
+
+DEF_SYNC_BUILTIN_RMW_ALL_N (BUILT_IN_SYNC_LOCK_TEST_AND_SET,
+			    "__sync_lock_test_and_set")
+
+DEF_SYNC_BUILTIN_RELEASE_NONCAP_N (BUILT_IN_SYNC_LOCK_RELEASE,
+				   "__sync_lock_release")
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SYNCHRONIZE, "__sync_synchronize",
 		  BT_FN_VOID, ATTR_NOTHROWCALL_LEAF_LIST)
@@ -313,374 +238,63 @@ DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_CLEAR, "__atomic_clear", BT_FN_VOID_VPTR_INT,
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE,
 		  "__atomic_exchange",
 		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_N,
-		  "__atomic_exchange_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_1,
-		  "__atomic_exchange_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_2,
-		  "__atomic_exchange_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_4,
-		  "__atomic_exchange_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_8,
-		  "__atomic_exchange_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_16,
-		  "__atomic_exchange_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_CAPABILITY,
-		  "__atomic_exchange_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_EXCHANGE,
+				  "__atomic_exchange", "_n")
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD,
 		  "__atomic_load",
 		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT,
 		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_N,
-		  "__atomic_load_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_1,
-		  "__atomic_load_1",
-		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_2,
-		  "__atomic_load_2",
-		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_4,
-		  "__atomic_load_4",
-		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_8,
-		  "__atomic_load_8",
-		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_16,
-		  "__atomic_load_16",
-		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_CAPABILITY,
-		  "__atomic_load_capability",
-		  BT_FN_ICAP_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN_LOAD_ORDER_ALL_N (BUILT_IN_ATOMIC_LOAD, "__atomic_load", "_n")
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
 		  "__atomic_compare_exchange",
 		  BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT,
 		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N,
-		  "__atomic_compare_exchange_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1,
-		  "__atomic_compare_exchange_1",
-		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2,
-		  "__atomic_compare_exchange_2",
-		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4,
-		  "__atomic_compare_exchange_4",
-		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8,
-		  "__atomic_compare_exchange_8",
-		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16,
-		  "__atomic_compare_exchange_16",
-		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_CAPABILITY,
-		  "__atomic_compare_exchange_capability",
-		  BT_FN_BOOL_VPTR_PTR_ICAP_BOOL_INT_INT,
-		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_ALL_N (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
+				       "__atomic_compare_exchange", "_n")
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE,
 		  "__atomic_store",
 		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_N,
-		  "__atomic_store_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_1,
-		  "__atomic_store_1",
-		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_2,
-		  "__atomic_store_2",
-		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_4,
-		  "__atomic_store_4",
-		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_8,
-		  "__atomic_store_8",
-		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_16,
-		  "__atomic_store_16",
-		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_CAPABILITY,
-		  "__atomic_store_capability",
-		  BT_FN_VOID_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_N,
-		  "__atomic_add_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_1,
-		  "__atomic_add_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_2,
-		  "__atomic_add_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_4,
-		  "__atomic_add_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_8,
-		  "__atomic_add_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_16,
-		  "__atomic_add_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_CAPABILITY,
-		  "__atomic_add_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_N,
-		  "__atomic_sub_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_1,
-		  "__atomic_sub_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_2,
-		  "__atomic_sub_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_4,
-		  "__atomic_sub_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_8,
-		  "__atomic_sub_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_16,
-		  "__atomic_sub_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_CAPABILITY,
-		  "__atomic_sub_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_N,
-		  "__atomic_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_1,
-		  "__atomic_and_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_2,
-		  "__atomic_and_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_4,
-		  "__atomic_and_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_8,
-		  "__atomic_and_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_16,
-		  "__atomic_and_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_CAPABILITY,
-		  "__atomic_and_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_N,
-		  "__atomic_nand_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_1,
-		  "__atomic_nand_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_2,
-		  "__atomic_nand_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_4,
-		  "__atomic_nand_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_8,
-		  "__atomic_nand_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_16,
-		  "__atomic_nand_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_CAPABILITY,
-		  "__atomic_nand_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_N,
-		  "__atomic_xor_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_1,
-		  "__atomic_xor_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_2,
-		  "__atomic_xor_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_4,
-		  "__atomic_xor_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_8,
-		  "__atomic_xor_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_16,
-		  "__atomic_xor_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_CAPABILITY,
-		  "__atomic_xor_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_N,
-		  "__atomic_or_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_1,
-		  "__atomic_or_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_2,
-		  "__atomic_or_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_4,
-		  "__atomic_or_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_8,
-		  "__atomic_or_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_16,
-		  "__atomic_or_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_CAPABILITY,
-		  "__atomic_or_fetch_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_N,
-		  "__atomic_fetch_add",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_1,
-		  "__atomic_fetch_add_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_2,
-		  "__atomic_fetch_add_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_4,
-		  "__atomic_fetch_add_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_8,
-		  "__atomic_fetch_add_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_16,
-		  "__atomic_fetch_add_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_CAPABILITY,
-		  "__atomic_fetch_add_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_N,
-		  "__atomic_fetch_sub",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_1,
-		  "__atomic_fetch_sub_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_2,
-		  "__atomic_fetch_sub_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_4,
-		  "__atomic_fetch_sub_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_8,
-		  "__atomic_fetch_sub_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_16,
-		  "__atomic_fetch_sub_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_CAPABILITY,
-		  "__atomic_fetch_sub_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_N,
-		  "__atomic_fetch_and",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_1,
-		  "__atomic_fetch_and_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_2,
-		  "__atomic_fetch_and_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_4,
-		  "__atomic_fetch_and_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_8,
-		  "__atomic_fetch_and_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_16,
-		  "__atomic_fetch_and_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_CAPABILITY,
-		  "__atomic_fetch_and_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_N,
-		  "__atomic_fetch_nand",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_1,
-		  "__atomic_fetch_nand_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_2,
-		  "__atomic_fetch_nand_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_4,
-		  "__atomic_fetch_nand_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_8,
-		  "__atomic_fetch_nand_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_16,
-		  "__atomic_fetch_nand_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_CAPABILITY,
-		  "__atomic_fetch_nand_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_N,
-		  "__atomic_fetch_xor",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_1,
-		  "__atomic_fetch_xor_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_2,
-		  "__atomic_fetch_xor_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_4,
-		  "__atomic_fetch_xor_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_8,
-		  "__atomic_fetch_xor_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_16,
-		  "__atomic_fetch_xor_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_CAPABILITY,
-		  "__atomic_fetch_xor_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_N,
-		  "__atomic_fetch_or",
-		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_1,
-		  "__atomic_fetch_or_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_2,
-		  "__atomic_fetch_or_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_4,
-		  "__atomic_fetch_or_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_8,
-		  "__atomic_fetch_or_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_16,
-		  "__atomic_fetch_or_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_CAPABILITY,
-		  "__atomic_fetch_or_capability",
-		  BT_FN_ICAP_VPTR_ICAP_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN_STORE_ORDER_ALL_N (BUILT_IN_ATOMIC_STORE,
+				    "__atomic_store", "_n")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_ADD_FETCH,
+				  "__atomic_add_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_SUB_FETCH,
+				  "__atomic_sub_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_AND_FETCH,
+				  "__atomic_and_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_NAND_FETCH,
+				  "__atomic_nand_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_XOR_FETCH,
+				  "__atomic_xor_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_OR_FETCH,
+				  "__atomic_or_fetch", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_ADD,
+				  "__atomic_fetch_add", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_SUB,
+				  "__atomic_fetch_sub", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_AND,
+				  "__atomic_fetch_and", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_NAND,
+				  "__atomic_fetch_nand", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_XOR,
+				  "__atomic_fetch_xor", "")
+
+DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N (BUILT_IN_ATOMIC_FETCH_OR,
+				  "__atomic_fetch_or", "")
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE,
 		  "__atomic_always_lock_free",
@@ -705,3 +319,22 @@ DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SIGNAL_FENCE,
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FERAISEEXCEPT,
 		  "__atomic_feraiseexcept",
 		  BT_FN_VOID_INT, ATTR_LEAF_LIST)
+
+#undef DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_ALL_N
+#undef DEF_SYNC_BUILTIN_CMP_XCHG_ORDER_N
+#undef DEF_SYNC_BUILTIN_VAL_CMP_SWAP_ALL_N
+#undef DEF_SYNC_BUILTIN_VAL_CMP_SWAP_N
+#undef DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_ALL_N
+#undef DEF_SYNC_BUILTIN_BOOL_CMP_SWAP_N
+#undef DEF_SYNC_BUILTIN_RELEASE_NONCAP_N
+#undef DEF_SYNC_BUILTIN_RELEASE_N
+#undef DEF_SYNC_BUILTIN_STORE_ORDER_ALL_N
+#undef DEF_SYNC_BUILTIN_STORE_ORDER_N
+#undef DEF_SYNC_BUILTIN_LOAD_ORDER_ALL_N
+#undef DEF_SYNC_BUILTIN_LOAD_ORDER_N
+#undef DEF_SYNC_BUILTIN_RMW_ORDER_ALL_N
+#undef DEF_SYNC_BUILTIN_RMW_ORDER_N
+#undef DEF_SYNC_BUILTIN_RMW_ALL_N
+#undef DEF_SYNC_BUILTIN_RMW_N
+#undef FOR_ALL_SYNC_N
+#undef FOR_NONCAP_SYNC_N


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-06 14:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-06 14:43 [gcc(refs/vendors/ARM/heads/morello)] Factor sync-builtins.def definitions Matthew Malcomson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).