sync-builtins.def revision 169689
19974Sehelin/* This file contains the definitions and documentation for the
29974Sehelin   synchronization builtins used in the GNU compiler.
39974Sehelin   Copyright (C) 2005 Free Software Foundation, Inc.
49974Sehelin
59974SehelinThis file is part of GCC.
69974Sehelin
79974SehelinGCC is free software; you can redistribute it and/or modify it under
89974Sehelinthe terms of the GNU General Public License as published by the Free
99974SehelinSoftware Foundation; either version 2, or (at your option) any later
109974Sehelinversion.
119974Sehelin
129974SehelinGCC is distributed in the hope that it will be useful, but WITHOUT ANY
139974SehelinWARRANTY; without even the implied warranty of MERCHANTABILITY or
149974SehelinFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
159974Sehelinfor more details.
169974Sehelin
179974SehelinYou should have received a copy of the GNU General Public License
189974Sehelinalong with GCC; see the file COPYING.  If not, write to the Free
199974SehelinSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
209974Sehelin02110-1301, USA.  */
219974Sehelin
229974Sehelin/* Before including this file, you should define a macro:
239974Sehelin
249974Sehelin     DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
259974Sehelin
269974Sehelin   See builtins.def for details.  */
279974Sehelin   
289974Sehelin/* Synchronization Primitives.  The "_N" version is the one that the user
299974Sehelin   is supposed to be using.  It's overloaded, and is resolved to one of the
309974Sehelin   "_1" through "_16" versions, plus some extra casts.  */
319974Sehelin
329974SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_N, "__sync_fetch_and_add",
3310193Sehelin		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
3410193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
3510193Sehelin		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
369974SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
3710193Sehelin		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
3810193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
3910193Sehelin		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
4010193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
419974Sehelin		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
429974SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
439974Sehelin		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
4410193Sehelin
4510193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
4610193Sehelin		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
4710193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
4810193Sehelin		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
4910193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
5010193Sehelin		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
5110193SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
529974Sehelin		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
539974SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
549974Sehelin		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
559974SehelinDEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
56		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
57
58DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_N, "__sync_fetch_and_or",
59		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
60DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
61		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
62DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
63		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
64DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
65		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
66DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
67		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
68DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
69		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
70
71DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_N, "__sync_fetch_and_and",
72		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
73DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
74		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
75DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
76		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
77DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
78		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
79DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
80		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
81DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
82		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
83
84DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
85		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
86DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
87		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
88DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
89		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
90DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
91		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
92DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
93		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
94DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
95		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
96
97DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
98		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
99DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
100		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
101DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
102		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
103DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
104		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
105DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
106		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
107DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
108		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
109
110DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_N, "__sync_add_and_fetch",
111		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
112DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
113		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
114DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
115		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
116DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
117		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
118DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
119		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
120DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
121		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
122
123DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
124		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
125DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
126		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
127DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
128		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
129DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
130		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
131DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
132		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
133DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
134		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
135
136DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_N, "__sync_or_and_fetch",
137		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
138DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
139		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
140DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
141		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
142DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
143		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
144DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
145		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
146DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
147		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
148
149DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_N, "__sync_and_and_fetch",
150		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
151DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
152		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
153DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
154		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
155DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
156		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
157DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
158		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
159DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
160		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
161
162DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
163		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
164DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
165		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
166DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
167		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
168DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
169		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
170DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
171		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
172DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
173		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
174
175DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
176		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
177DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
178		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
179DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
180		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
181DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
182		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
183DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
184		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
185DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
186		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
187
188DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_N,
189		  "__sync_bool_compare_and_swap",
190		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
191DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_1,
192		  "__sync_bool_compare_and_swap_1",
193		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LIST)
194DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_2,
195		  "__sync_bool_compare_and_swap_2",
196		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LIST)
197DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_4,
198		  "__sync_bool_compare_and_swap_4",
199		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LIST)
200DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_8,
201		  "__sync_bool_compare_and_swap_8",
202		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LIST)
203DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_16,
204		  "__sync_bool_compare_and_swap_16",
205		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROW_LIST)
206
207DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_N,
208		  "__sync_val_compare_and_swap",
209		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
210DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_1,
211		  "__sync_val_compare_and_swap_1",
212		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LIST)
213DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_2,
214		  "__sync_val_compare_and_swap_2",
215		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LIST)
216DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_4,
217		  "__sync_val_compare_and_swap_4",
218		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LIST)
219DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_8,
220		  "__sync_val_compare_and_swap_8",
221		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LIST)
222DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_16,
223		  "__sync_val_compare_and_swap_16",
224		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROW_LIST)
225
226DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_N, "__sync_lock_test_and_set",
227		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
228DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1",
229		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
230DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2",
231		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
232DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4",
233		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
234DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8",
235		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
236DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_16, "__sync_lock_test_and_set_16",
237		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST)
238
239DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_N, "__sync_lock_release",
240		  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
241DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_1, "__sync_lock_release_1",
242		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
243DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_2, "__sync_lock_release_2",
244		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
245DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_4, "__sync_lock_release_4",
246		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
247DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_8, "__sync_lock_release_8",
248		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
249DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_16, "__sync_lock_release_16",
250		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
251
252DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize",
253		  BT_FN_VOID, ATTR_NOTHROW_LIST)
254