1*38fd1498Szrj/* This file contains the definitions and documentation for the
2*38fd1498Szrj   synchronization builtins used in the GNU compiler.
3*38fd1498Szrj   Copyright (C) 2005-2018 Free Software Foundation, Inc.
4*38fd1498Szrj
5*38fd1498SzrjThis file is part of GCC.
6*38fd1498Szrj
7*38fd1498SzrjGCC is free software; you can redistribute it and/or modify it under
8*38fd1498Szrjthe terms of the GNU General Public License as published by the Free
9*38fd1498SzrjSoftware Foundation; either version 3, or (at your option) any later
10*38fd1498Szrjversion.
11*38fd1498Szrj
12*38fd1498SzrjGCC is distributed in the hope that it will be useful, but WITHOUT ANY
13*38fd1498SzrjWARRANTY; without even the implied warranty of MERCHANTABILITY or
14*38fd1498SzrjFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15*38fd1498Szrjfor more details.
16*38fd1498Szrj
17*38fd1498SzrjYou should have received a copy of the GNU General Public License
18*38fd1498Szrjalong with GCC; see the file COPYING3.  If not see
19*38fd1498Szrj<http://www.gnu.org/licenses/>.  */
20*38fd1498Szrj
21*38fd1498Szrj/* Before including this file, you should define a macro:
22*38fd1498Szrj
23*38fd1498Szrj     DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
24*38fd1498Szrj
25*38fd1498Szrj   See builtins.def for details.  */
26*38fd1498Szrj
27*38fd1498Szrj/* Synchronization Primitives.  The "_N" version is the one that the user
28*38fd1498Szrj   is supposed to be using.  It's overloaded, and is resolved to one of the
29*38fd1498Szrj   "_1" through "_16" versions, plus some extra casts.  */
30*38fd1498Szrj
31*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_N, "__sync_fetch_and_add",
32*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
33*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
34*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
35*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
36*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
37*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
38*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
39*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
40*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
41*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
42*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
43*38fd1498Szrj
44*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
45*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
46*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
47*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
48*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
49*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
50*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
51*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
52*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
53*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
54*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
55*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
56*38fd1498Szrj
57*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_N, "__sync_fetch_and_or",
58*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
59*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
60*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
61*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
62*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
63*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
64*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
65*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
66*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
67*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
68*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
69*38fd1498Szrj
70*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_N, "__sync_fetch_and_and",
71*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
72*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
73*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
74*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
75*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
76*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
77*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
78*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
79*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
80*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
81*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
82*38fd1498Szrj
83*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
84*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
85*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
86*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
87*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
88*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
89*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
90*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
91*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
92*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
93*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
94*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
95*38fd1498Szrj
96*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
97*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
98*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
99*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
100*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
101*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
102*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
103*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
104*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
105*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
106*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
107*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
108*38fd1498Szrj
109*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_N, "__sync_add_and_fetch",
110*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
111*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
112*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
113*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
114*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
115*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
116*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
117*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
118*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
119*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
120*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
121*38fd1498Szrj
122*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
123*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
124*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
125*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
126*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
127*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
128*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
129*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
130*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
131*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
132*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
133*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
134*38fd1498Szrj
135*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_N, "__sync_or_and_fetch",
136*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
137*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
138*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
139*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
140*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
141*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
142*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
143*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
144*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
145*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
146*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
147*38fd1498Szrj
148*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_N, "__sync_and_and_fetch",
149*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
150*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
151*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
152*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
153*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
154*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
155*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
156*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
157*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
158*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
159*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
160*38fd1498Szrj
161*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
162*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
163*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
164*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
165*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
166*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
167*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
168*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
169*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
170*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
171*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
172*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
173*38fd1498Szrj
174*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
175*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
176*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
177*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
178*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
179*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
180*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
181*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
182*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
183*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
184*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
185*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
186*38fd1498Szrj
187*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N,
188*38fd1498Szrj		  "__sync_bool_compare_and_swap",
189*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
190*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1,
191*38fd1498Szrj		  "__sync_bool_compare_and_swap_1",
192*38fd1498Szrj		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
193*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2,
194*38fd1498Szrj		  "__sync_bool_compare_and_swap_2",
195*38fd1498Szrj		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
196*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4,
197*38fd1498Szrj		  "__sync_bool_compare_and_swap_4",
198*38fd1498Szrj		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
199*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8,
200*38fd1498Szrj		  "__sync_bool_compare_and_swap_8",
201*38fd1498Szrj		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
202*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16,
203*38fd1498Szrj		  "__sync_bool_compare_and_swap_16",
204*38fd1498Szrj		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
205*38fd1498Szrj
206*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N,
207*38fd1498Szrj		  "__sync_val_compare_and_swap",
208*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
209*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1,
210*38fd1498Szrj		  "__sync_val_compare_and_swap_1",
211*38fd1498Szrj		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
212*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2,
213*38fd1498Szrj		  "__sync_val_compare_and_swap_2",
214*38fd1498Szrj		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
215*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4,
216*38fd1498Szrj		  "__sync_val_compare_and_swap_4",
217*38fd1498Szrj		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
218*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8,
219*38fd1498Szrj		  "__sync_val_compare_and_swap_8",
220*38fd1498Szrj		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
221*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16,
222*38fd1498Szrj		  "__sync_val_compare_and_swap_16",
223*38fd1498Szrj		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
224*38fd1498Szrj
225*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_N,
226*38fd1498Szrj		  "__sync_lock_test_and_set",
227*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
228*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_1,
229*38fd1498Szrj		  "__sync_lock_test_and_set_1",
230*38fd1498Szrj		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
231*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_2,
232*38fd1498Szrj		  "__sync_lock_test_and_set_2",
233*38fd1498Szrj		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
234*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4,
235*38fd1498Szrj		  "__sync_lock_test_and_set_4",
236*38fd1498Szrj		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
237*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8,
238*38fd1498Szrj		  "__sync_lock_test_and_set_8",
239*38fd1498Szrj		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
240*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_16,
241*38fd1498Szrj		  "__sync_lock_test_and_set_16",
242*38fd1498Szrj		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
243*38fd1498Szrj
244*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_N, "__sync_lock_release",
245*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
246*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_1, "__sync_lock_release_1",
247*38fd1498Szrj		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
248*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_2, "__sync_lock_release_2",
249*38fd1498Szrj		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
250*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_4, "__sync_lock_release_4",
251*38fd1498Szrj		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
252*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_8, "__sync_lock_release_8",
253*38fd1498Szrj		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
254*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_16, "__sync_lock_release_16",
255*38fd1498Szrj		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
256*38fd1498Szrj
257*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_SYNC_SYNCHRONIZE, "__sync_synchronize",
258*38fd1498Szrj		  BT_FN_VOID, ATTR_NOTHROWCALL_LEAF_LIST)
259*38fd1498Szrj
260*38fd1498Szrj/* __sync* builtins for the C++ memory model.  */
261*38fd1498Szrj
262*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_TEST_AND_SET, "__atomic_test_and_set",
263*38fd1498Szrj		  BT_FN_BOOL_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
264*38fd1498Szrj
265*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_CLEAR, "__atomic_clear", BT_FN_VOID_VPTR_INT,
266*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
267*38fd1498Szrj
268*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE,
269*38fd1498Szrj		  "__atomic_exchange",
270*38fd1498Szrj		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
271*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_N,
272*38fd1498Szrj		  "__atomic_exchange_n",
273*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
274*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_1,
275*38fd1498Szrj		  "__atomic_exchange_1",
276*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
277*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_2,
278*38fd1498Szrj		  "__atomic_exchange_2",
279*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
280*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_4,
281*38fd1498Szrj		  "__atomic_exchange_4",
282*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
283*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_8,
284*38fd1498Szrj		  "__atomic_exchange_8",
285*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
286*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_16,
287*38fd1498Szrj		  "__atomic_exchange_16",
288*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
289*38fd1498Szrj
290*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD,
291*38fd1498Szrj		  "__atomic_load",
292*38fd1498Szrj		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT,
293*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
294*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_N,
295*38fd1498Szrj		  "__atomic_load_n",
296*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
297*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_1,
298*38fd1498Szrj		  "__atomic_load_1",
299*38fd1498Szrj		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
300*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_2,
301*38fd1498Szrj		  "__atomic_load_2",
302*38fd1498Szrj		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
303*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_4,
304*38fd1498Szrj		  "__atomic_load_4",
305*38fd1498Szrj		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
306*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_8,
307*38fd1498Szrj		  "__atomic_load_8",
308*38fd1498Szrj		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
309*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_16,
310*38fd1498Szrj		  "__atomic_load_16",
311*38fd1498Szrj		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
312*38fd1498Szrj
313*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
314*38fd1498Szrj		  "__atomic_compare_exchange",
315*38fd1498Szrj		  BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT,
316*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
317*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N,
318*38fd1498Szrj		  "__atomic_compare_exchange_n",
319*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
320*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1,
321*38fd1498Szrj		  "__atomic_compare_exchange_1",
322*38fd1498Szrj		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT,
323*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
324*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2,
325*38fd1498Szrj		  "__atomic_compare_exchange_2",
326*38fd1498Szrj		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT,
327*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
328*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4,
329*38fd1498Szrj		  "__atomic_compare_exchange_4",
330*38fd1498Szrj		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT,
331*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
332*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8,
333*38fd1498Szrj		  "__atomic_compare_exchange_8",
334*38fd1498Szrj		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT,
335*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
336*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16,
337*38fd1498Szrj		  "__atomic_compare_exchange_16",
338*38fd1498Szrj		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT,
339*38fd1498Szrj		  ATTR_NOTHROWCALL_LEAF_LIST)
340*38fd1498Szrj
341*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE,
342*38fd1498Szrj		  "__atomic_store",
343*38fd1498Szrj		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
344*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_N,
345*38fd1498Szrj		  "__atomic_store_n",
346*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
347*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_1,
348*38fd1498Szrj		  "__atomic_store_1",
349*38fd1498Szrj		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
350*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_2,
351*38fd1498Szrj		  "__atomic_store_2",
352*38fd1498Szrj		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
353*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_4,
354*38fd1498Szrj		  "__atomic_store_4",
355*38fd1498Szrj		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
356*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_8,
357*38fd1498Szrj		  "__atomic_store_8",
358*38fd1498Szrj		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
359*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_16,
360*38fd1498Szrj		  "__atomic_store_16",
361*38fd1498Szrj		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
362*38fd1498Szrj
363*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_N,
364*38fd1498Szrj		  "__atomic_add_fetch",
365*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
366*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_1,
367*38fd1498Szrj		  "__atomic_add_fetch_1",
368*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
369*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_2,
370*38fd1498Szrj		  "__atomic_add_fetch_2",
371*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
372*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_4,
373*38fd1498Szrj		  "__atomic_add_fetch_4",
374*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
375*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_8,
376*38fd1498Szrj		  "__atomic_add_fetch_8",
377*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
378*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_16,
379*38fd1498Szrj		  "__atomic_add_fetch_16",
380*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
381*38fd1498Szrj
382*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_N,
383*38fd1498Szrj		  "__atomic_sub_fetch",
384*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
385*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_1,
386*38fd1498Szrj		  "__atomic_sub_fetch_1",
387*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
388*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_2,
389*38fd1498Szrj		  "__atomic_sub_fetch_2",
390*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
391*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_4,
392*38fd1498Szrj		  "__atomic_sub_fetch_4",
393*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
394*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_8,
395*38fd1498Szrj		  "__atomic_sub_fetch_8",
396*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
397*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_16,
398*38fd1498Szrj		  "__atomic_sub_fetch_16",
399*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
400*38fd1498Szrj
401*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_N,
402*38fd1498Szrj		  "__atomic_and_fetch",
403*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
404*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_1,
405*38fd1498Szrj		  "__atomic_and_fetch_1",
406*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
407*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_2,
408*38fd1498Szrj		  "__atomic_and_fetch_2",
409*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
410*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_4,
411*38fd1498Szrj		  "__atomic_and_fetch_4",
412*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
413*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_8,
414*38fd1498Szrj		  "__atomic_and_fetch_8",
415*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
416*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_16,
417*38fd1498Szrj		  "__atomic_and_fetch_16",
418*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
419*38fd1498Szrj
420*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_N,
421*38fd1498Szrj		  "__atomic_nand_fetch",
422*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
423*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_1,
424*38fd1498Szrj		  "__atomic_nand_fetch_1",
425*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
426*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_2,
427*38fd1498Szrj		  "__atomic_nand_fetch_2",
428*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
429*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_4,
430*38fd1498Szrj		  "__atomic_nand_fetch_4",
431*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
432*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_8,
433*38fd1498Szrj		  "__atomic_nand_fetch_8",
434*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
435*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_16,
436*38fd1498Szrj		  "__atomic_nand_fetch_16",
437*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
438*38fd1498Szrj
439*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_N,
440*38fd1498Szrj		  "__atomic_xor_fetch",
441*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
442*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_1,
443*38fd1498Szrj		  "__atomic_xor_fetch_1",
444*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
445*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_2,
446*38fd1498Szrj		  "__atomic_xor_fetch_2",
447*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
448*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_4,
449*38fd1498Szrj		  "__atomic_xor_fetch_4",
450*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
451*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_8,
452*38fd1498Szrj		  "__atomic_xor_fetch_8",
453*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
454*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_16,
455*38fd1498Szrj		  "__atomic_xor_fetch_16",
456*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
457*38fd1498Szrj
458*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_N,
459*38fd1498Szrj		  "__atomic_or_fetch",
460*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
461*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_1,
462*38fd1498Szrj		  "__atomic_or_fetch_1",
463*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
464*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_2,
465*38fd1498Szrj		  "__atomic_or_fetch_2",
466*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
467*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_4,
468*38fd1498Szrj		  "__atomic_or_fetch_4",
469*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
470*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_8,
471*38fd1498Szrj		  "__atomic_or_fetch_8",
472*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
473*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_16,
474*38fd1498Szrj		  "__atomic_or_fetch_16",
475*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
476*38fd1498Szrj
477*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_N,
478*38fd1498Szrj		  "__atomic_fetch_add",
479*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
480*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_1,
481*38fd1498Szrj		  "__atomic_fetch_add_1",
482*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
483*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_2,
484*38fd1498Szrj		  "__atomic_fetch_add_2",
485*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
486*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_4,
487*38fd1498Szrj		  "__atomic_fetch_add_4",
488*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
489*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_8,
490*38fd1498Szrj		  "__atomic_fetch_add_8",
491*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
492*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_16,
493*38fd1498Szrj		  "__atomic_fetch_add_16",
494*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
495*38fd1498Szrj
496*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_N,
497*38fd1498Szrj		  "__atomic_fetch_sub",
498*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
499*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_1,
500*38fd1498Szrj		  "__atomic_fetch_sub_1",
501*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
502*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_2,
503*38fd1498Szrj		  "__atomic_fetch_sub_2",
504*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
505*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_4,
506*38fd1498Szrj		  "__atomic_fetch_sub_4",
507*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
508*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_8,
509*38fd1498Szrj		  "__atomic_fetch_sub_8",
510*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
511*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_16,
512*38fd1498Szrj		  "__atomic_fetch_sub_16",
513*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
514*38fd1498Szrj
515*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_N,
516*38fd1498Szrj		  "__atomic_fetch_and",
517*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
518*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_1,
519*38fd1498Szrj		  "__atomic_fetch_and_1",
520*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
521*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_2,
522*38fd1498Szrj		  "__atomic_fetch_and_2",
523*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
524*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_4,
525*38fd1498Szrj		  "__atomic_fetch_and_4",
526*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
527*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_8,
528*38fd1498Szrj		  "__atomic_fetch_and_8",
529*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
530*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_16,
531*38fd1498Szrj		  "__atomic_fetch_and_16",
532*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
533*38fd1498Szrj
534*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_N,
535*38fd1498Szrj		  "__atomic_fetch_nand",
536*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
537*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_1,
538*38fd1498Szrj		  "__atomic_fetch_nand_1",
539*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
540*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_2,
541*38fd1498Szrj		  "__atomic_fetch_nand_2",
542*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
543*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_4,
544*38fd1498Szrj		  "__atomic_fetch_nand_4",
545*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
546*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_8,
547*38fd1498Szrj		  "__atomic_fetch_nand_8",
548*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
549*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_16,
550*38fd1498Szrj		  "__atomic_fetch_nand_16",
551*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
552*38fd1498Szrj
553*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_N,
554*38fd1498Szrj		  "__atomic_fetch_xor",
555*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
556*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_1,
557*38fd1498Szrj		  "__atomic_fetch_xor_1",
558*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
559*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_2,
560*38fd1498Szrj		  "__atomic_fetch_xor_2",
561*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
562*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_4,
563*38fd1498Szrj		  "__atomic_fetch_xor_4",
564*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
565*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_8,
566*38fd1498Szrj		  "__atomic_fetch_xor_8",
567*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
568*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_16,
569*38fd1498Szrj		  "__atomic_fetch_xor_16",
570*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
571*38fd1498Szrj
572*38fd1498Szrj
573*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_N,
574*38fd1498Szrj		  "__atomic_fetch_or",
575*38fd1498Szrj		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
576*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_1,
577*38fd1498Szrj		  "__atomic_fetch_or_1",
578*38fd1498Szrj		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
579*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_2,
580*38fd1498Szrj		  "__atomic_fetch_or_2",
581*38fd1498Szrj		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
582*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_4,
583*38fd1498Szrj		  "__atomic_fetch_or_4",
584*38fd1498Szrj		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
585*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_8,
586*38fd1498Szrj		  "__atomic_fetch_or_8",
587*38fd1498Szrj		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
588*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_16,
589*38fd1498Szrj		  "__atomic_fetch_or_16",
590*38fd1498Szrj		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
591*38fd1498Szrj
592*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE,
593*38fd1498Szrj		  "__atomic_always_lock_free",
594*38fd1498Szrj		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
595*38fd1498Szrj
596*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_IS_LOCK_FREE,
597*38fd1498Szrj		  "__atomic_is_lock_free",
598*38fd1498Szrj		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
599*38fd1498Szrj
600*38fd1498Szrj
601*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_THREAD_FENCE,
602*38fd1498Szrj		  "__atomic_thread_fence",
603*38fd1498Szrj		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
604*38fd1498Szrj
605*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SIGNAL_FENCE,
606*38fd1498Szrj		  "__atomic_signal_fence",
607*38fd1498Szrj		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
608*38fd1498Szrj
609*38fd1498Szrj/* This one is actually a function in libatomic and not expected to be
610*38fd1498Szrj   inlined, declared here for convenience of targets generating calls
611*38fd1498Szrj   to it.  */
612*38fd1498SzrjDEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FERAISEEXCEPT,
613*38fd1498Szrj		  "__atomic_feraiseexcept",
614*38fd1498Szrj		  BT_FN_VOID_INT, ATTR_LEAF_LIST)
615