]>
Commit | Line | Data |
---|---|---|
cb1072f4 KG |
1 | /* This file contains the definitions and documentation for the |
2 | builtins used in the GNU compiler. | |
46847aa6 | 3 | Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
cb1072f4 | 4 | |
1322177d | 5 | This file is part of GCC. |
cb1072f4 | 6 | |
1322177d LB |
7 | GCC is free software; you can redistribute it and/or modify it under |
8 | the terms of the GNU General Public License as published by the Free | |
9 | Software Foundation; either version 2, or (at your option) any later | |
10 | version. | |
cb1072f4 | 11 | |
1322177d LB |
12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
cb1072f4 KG |
16 | |
17 | You should have received a copy of the GNU General Public License | |
1322177d LB |
18 | along with GCC; see the file COPYING. If not, write to the Free |
19 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
20 | 02111-1307, USA. */ | |
cb1072f4 | 21 | |
10841285 MM |
22 | /* Before including this file, you should define a macro: |
23 | ||
24 | DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, | |
272f51a3 | 25 | FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT) |
10841285 MM |
26 | |
27 | This macro will be called once for each builtin function. The | |
28 | ENUM will be of type `enum built_in_function', and will indicate | |
29 | which builtin function is being processed. The NAME of the builtin | |
30 | function (which will always start with `__builtin_') is a string | |
31 | literal. The CLASS is of type `enum built_in_class' and indicates | |
32 | what kind of builtin is being processed. | |
33 | ||
34 | Some builtins are actually two separate functions. For example, | |
35 | for `strcmp' there are two builtin functions; `__builtin_strcmp' | |
36 | and `strcmp' itself. Both behave identically. Other builtins | |
37 | define only the `__builtin' variant. If BOTH_P is TRUE, then this | |
38 | builtin has both variants; otherwise, it is has only the first | |
39 | variant. | |
40 | ||
41 | TYPE indicates the type of the function. The symbols correspond to | |
42 | enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE | |
43 | is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE | |
44 | should be ignored. | |
45 | ||
46 | If FALLBACK_P is true then, if for some reason, the compiler cannot | |
47 | expand the builtin function directly, it will call the | |
48 | corresponding library function (which does not have the | |
49 | `__builtin_' prefix. | |
50 | ||
51 | If NONANSI_P is true, then the non-`__builtin_' variant is not an | |
52 | ANSI/ISO library function, and so we should pretend it does not | |
df061a43 RS |
53 | exist when compiling in ANSI conformant mode. |
54 | ||
55 | ATTRs is an attribute list as defined in builtin-attrs.def that | |
272f51a3 JH |
56 | describes the attributes of this builtin function. |
57 | ||
58 | IMPLICIT specifies condition when the builtin can be produced by | |
59 | compiler. For instance C90 reserves floorf function, but does not | |
60 | define it's meaning. When user uses floorf we may assume that the | |
61 | floorf has the meaning we expect, but we can't produce floorf by | |
f937d5e6 RS |
62 | simplifying floor((double)float) since the runtime need not implement |
63 | it. */ | |
10841285 MM |
64 | |
65 | /* A GCC builtin (like __builtin_saveregs) is provided by the | |
66 | compiler, but does not correspond to a function in the standard | |
67 | library. */ | |
68 | #undef DEF_GCC_BUILTIN | |
c2ef6d34 | 69 | #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ |
10841285 | 70 | DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \ |
272f51a3 | 71 | false, false, false, ATTRS, true) |
10841285 | 72 | |
10841285 MM |
73 | /* A library builtin (like __builtin_strchr) is a builtin equivalent |
74 | of an ANSI/ISO standard library function. In addition to the | |
5519a4f9 | 75 | `__builtin' version, we will create an ordinary version (e.g, |
10841285 MM |
76 | `strchr') as well. If we cannot compute the answer using the |
77 | builtin function, we will fall back to the standard library | |
991b6592 | 78 | version. */ |
10841285 | 79 | #undef DEF_LIB_BUILTIN |
df061a43 | 80 | #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ |
10841285 | 81 | DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
272f51a3 | 82 | true, true, false, ATTRS, true) |
10841285 | 83 | |
10841285 MM |
84 | /* Like DEF_LIB_BUILTIN, except that the function is not one that is |
85 | specified by ANSI/ISO C. So, when we're being fully conformant we | |
86 | ignore the version of these builtins that does not begin with | |
87 | __builtin. */ | |
88 | #undef DEF_EXT_LIB_BUILTIN | |
df061a43 | 89 | #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ |
10841285 | 90 | DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
272f51a3 | 91 | true, true, true, ATTRS, false) |
10841285 MM |
92 | |
93 | /* Like DEF_LIB_BUILTIN, except that the function is only a part of | |
94 | the standard in C99 or above. */ | |
95 | #undef DEF_C99_BUILTIN | |
4977bab6 | 96 | #define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ |
10841285 | 97 | DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
272f51a3 JH |
98 | true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS) |
99 | ||
100 | /* Builtin that is specified by C99 and C90 reserve the name for future use. | |
101 | We can still recognize the builtin in C90 mode but we can't produce it | |
102 | implicitly. */ | |
103 | #undef DEF_C99_C90RES_BUILTIN | |
104 | #define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ | |
105 | DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ | |
106 | true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS) | |
10841285 | 107 | |
b4c984fb | 108 | |
10841285 MM |
109 | DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA, |
110 | "__builtin_alloca", | |
df061a43 RS |
111 | BT_FN_PTR_SIZE, |
112 | ATTR_MALLOC_NOTHROW_LIST) | |
10841285 | 113 | |
b052d8ee RS |
114 | DEF_LIB_BUILTIN(BUILT_IN_ABS, |
115 | "__builtin_abs", | |
116 | BT_FN_INT_INT, | |
117 | ATTR_CONST_NOTHROW_LIST) | |
118 | DEF_LIB_BUILTIN(BUILT_IN_LABS, | |
119 | "__builtin_labs", | |
120 | BT_FN_LONG_LONG, | |
121 | ATTR_CONST_NOTHROW_LIST) | |
122 | ||
123 | DEF_LIB_BUILTIN(BUILT_IN_FABS, | |
124 | "__builtin_fabs", | |
125 | BT_FN_DOUBLE_DOUBLE, | |
126 | ATTR_CONST_NOTHROW_LIST) | |
127 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF, | |
10841285 | 128 | "__builtin_fabsf", |
b052d8ee RS |
129 | BT_FN_FLOAT_FLOAT, |
130 | ATTR_CONST_NOTHROW_LIST) | |
131 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL, | |
10841285 | 132 | "__builtin_fabsl", |
b052d8ee RS |
133 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, |
134 | ATTR_CONST_NOTHROW_LIST) | |
10841285 | 135 | |
4977bab6 ZW |
136 | DEF_LIB_BUILTIN(BUILT_IN_FLOOR, |
137 | "__builtin_floor", | |
138 | BT_FN_DOUBLE_DOUBLE, | |
139 | ATTR_CONST_NOTHROW_LIST) | |
272f51a3 JH |
140 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF, |
141 | "__builtin_floorf", | |
142 | BT_FN_FLOAT_FLOAT, | |
143 | ATTR_CONST_NOTHROW_LIST) | |
144 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL, | |
145 | "__builtin_floorl", | |
146 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
147 | ATTR_CONST_NOTHROW_LIST) | |
4977bab6 ZW |
148 | |
149 | DEF_LIB_BUILTIN(BUILT_IN_CEIL, | |
150 | "__builtin_ceil", | |
151 | BT_FN_DOUBLE_DOUBLE, | |
152 | ATTR_CONST_NOTHROW_LIST) | |
272f51a3 JH |
153 | DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF, |
154 | "__builtin_ceilf", | |
155 | BT_FN_FLOAT_FLOAT, | |
156 | ATTR_CONST_NOTHROW_LIST) | |
157 | DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL, | |
158 | "__builtin_ceill", | |
159 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
160 | ATTR_CONST_NOTHROW_LIST) | |
4977bab6 ZW |
161 | |
162 | DEF_C99_BUILTIN(BUILT_IN_ROUND, | |
163 | "__builtin_round", | |
164 | BT_FN_DOUBLE_DOUBLE, | |
165 | ATTR_CONST_NOTHROW_LIST) | |
166 | DEF_C99_BUILTIN(BUILT_IN_ROUNDF, | |
167 | "__builtin_roundf", | |
168 | BT_FN_FLOAT_FLOAT, | |
169 | ATTR_CONST_NOTHROW_LIST) | |
170 | DEF_C99_BUILTIN(BUILT_IN_ROUNDL, | |
171 | "__builtin_roundl", | |
172 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
173 | ATTR_CONST_NOTHROW_LIST) | |
174 | ||
175 | DEF_C99_BUILTIN(BUILT_IN_TRUNC, | |
176 | "__builtin_trunc", | |
177 | BT_FN_DOUBLE_DOUBLE, | |
178 | ATTR_CONST_NOTHROW_LIST) | |
179 | DEF_C99_BUILTIN(BUILT_IN_TRUNCF, | |
180 | "__builtin_truncf", | |
181 | BT_FN_FLOAT_FLOAT, | |
182 | ATTR_CONST_NOTHROW_LIST) | |
183 | DEF_C99_BUILTIN(BUILT_IN_TRUNCL, | |
184 | "__builtin_truncl", | |
185 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
186 | ATTR_CONST_NOTHROW_LIST) | |
187 | ||
188 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINT, | |
189 | "__builtin_nearbyint", | |
190 | BT_FN_DOUBLE_DOUBLE, | |
191 | ATTR_CONST_NOTHROW_LIST) | |
192 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF, | |
193 | "__builtin_nearbyintf", | |
194 | BT_FN_FLOAT_FLOAT, | |
195 | ATTR_CONST_NOTHROW_LIST) | |
196 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL, | |
197 | "__builtin_nearbyintl", | |
198 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
199 | ATTR_CONST_NOTHROW_LIST) | |
200 | ||
10841285 MM |
201 | DEF_C99_BUILTIN(BUILT_IN_LLABS, |
202 | "__builtin_llabs", | |
4977bab6 ZW |
203 | BT_FN_LONGLONG_LONGLONG, |
204 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
205 | DEF_C99_BUILTIN(BUILT_IN_IMAXABS, |
206 | "__builtin_imaxabs", | |
4977bab6 ZW |
207 | BT_FN_INTMAX_INTMAX, |
208 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
209 | DEF_C99_BUILTIN(BUILT_IN_CONJ, |
210 | "__builtin_conj", | |
4977bab6 ZW |
211 | BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, |
212 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
213 | DEF_C99_BUILTIN(BUILT_IN_CONJF, |
214 | "__builtin_conjf", | |
4977bab6 ZW |
215 | BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, |
216 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
217 | DEF_C99_BUILTIN(BUILT_IN_CONJL, |
218 | "__builtin_conjl", | |
4977bab6 ZW |
219 | BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, |
220 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
221 | DEF_C99_BUILTIN(BUILT_IN_CREAL, |
222 | "__builtin_creal", | |
4977bab6 ZW |
223 | BT_FN_DOUBLE_COMPLEX_DOUBLE, |
224 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
225 | DEF_C99_BUILTIN(BUILT_IN_CREALF, |
226 | "__builtin_crealf", | |
4977bab6 ZW |
227 | BT_FN_FLOAT_COMPLEX_FLOAT, |
228 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
229 | DEF_C99_BUILTIN(BUILT_IN_CREALL, |
230 | "__builtin_creall", | |
4977bab6 ZW |
231 | BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, |
232 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
233 | DEF_C99_BUILTIN(BUILT_IN_CIMAG, |
234 | "__builtin_cimag", | |
4977bab6 ZW |
235 | BT_FN_DOUBLE_COMPLEX_DOUBLE, |
236 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
237 | DEF_C99_BUILTIN(BUILT_IN_CIMAGF, |
238 | "__builtin_cimagf", | |
4977bab6 ZW |
239 | BT_FN_FLOAT_COMPLEX_FLOAT, |
240 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
241 | DEF_C99_BUILTIN(BUILT_IN_CIMAGL, |
242 | "__builtin_cimagl", | |
4977bab6 ZW |
243 | BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, |
244 | ATTR_CONST_NOTHROW_LIST) | |
075ec276 RS |
245 | DEF_C99_BUILTIN(BUILT_IN_CABS, |
246 | "__builtin_cabs", | |
247 | BT_FN_DOUBLE_COMPLEX_DOUBLE, | |
248 | ATTR_CONST_NOTHROW_LIST) | |
249 | DEF_C99_BUILTIN(BUILT_IN_CABSF, | |
250 | "__builtin_cabsf", | |
251 | BT_FN_FLOAT_COMPLEX_FLOAT, | |
252 | ATTR_CONST_NOTHROW_LIST) | |
253 | DEF_C99_BUILTIN(BUILT_IN_CABSL, | |
254 | "__builtin_cabsl", | |
255 | BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, | |
256 | ATTR_CONST_NOTHROW_LIST) | |
10841285 | 257 | |
cc42f5f5 RS |
258 | /* These functions have traditionally accepted NULL pointers when the |
259 | length parameter is zero, so don't apply attribute "nonnull". */ | |
260 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BZERO, | |
261 | "__builtin_bzero", | |
262 | BT_FN_VOID_PTR_SIZE, | |
263 | ATTR_NOTHROW_LIST) | |
264 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BCOPY, | |
265 | "__builtin_bcopy", | |
266 | BT_FN_VOID_CONST_PTR_PTR_SIZE, | |
267 | ATTR_NOTHROW_LIST) | |
268 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BCMP, | |
269 | "__builtin_bcmp", | |
270 | BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, | |
271 | ATTR_PURE_NOTHROW_LIST) | |
10841285 MM |
272 | |
273 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, | |
274 | "__builtin_ffs", | |
df061a43 RS |
275 | BT_FN_INT_INT, |
276 | ATTR_CONST_NOTHROW_LIST) | |
2928cd7a RH |
277 | DEF_GCC_BUILTIN(BUILT_IN_CLZ, |
278 | "__builtin_clz", | |
279 | BT_FN_INT_INT, | |
280 | ATTR_CONST_NOTHROW_LIST) | |
281 | DEF_GCC_BUILTIN(BUILT_IN_CTZ, | |
282 | "__builtin_ctz", | |
283 | BT_FN_INT_INT, | |
284 | ATTR_CONST_NOTHROW_LIST) | |
285 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT, | |
286 | "__builtin_popcount", | |
287 | BT_FN_INT_INT, | |
288 | ATTR_CONST_NOTHROW_LIST) | |
289 | DEF_GCC_BUILTIN(BUILT_IN_PARITY, | |
290 | "__builtin_parity", | |
291 | BT_FN_INT_INT, | |
292 | ATTR_CONST_NOTHROW_LIST) | |
293 | ||
294 | DEF_GCC_BUILTIN(BUILT_IN_FFSL, | |
295 | "__builtin_ffsl", | |
296 | BT_FN_INT_LONG, | |
297 | ATTR_CONST_NOTHROW_LIST) | |
298 | DEF_GCC_BUILTIN(BUILT_IN_CLZL, | |
299 | "__builtin_clzl", | |
300 | BT_FN_INT_LONG, | |
301 | ATTR_CONST_NOTHROW_LIST) | |
302 | DEF_GCC_BUILTIN(BUILT_IN_CTZL, | |
303 | "__builtin_ctzl", | |
304 | BT_FN_INT_LONG, | |
305 | ATTR_CONST_NOTHROW_LIST) | |
306 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL, | |
307 | "__builtin_popcountl", | |
308 | BT_FN_INT_LONG, | |
309 | ATTR_CONST_NOTHROW_LIST) | |
310 | DEF_GCC_BUILTIN(BUILT_IN_PARITYL, | |
311 | "__builtin_parityl", | |
312 | BT_FN_INT_LONG, | |
313 | ATTR_CONST_NOTHROW_LIST) | |
314 | ||
315 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL, | |
316 | "__builtin_ffsll", | |
317 | BT_FN_INT_LONGLONG, | |
318 | ATTR_CONST_NOTHROW_LIST) | |
319 | DEF_GCC_BUILTIN(BUILT_IN_CLZLL, | |
320 | "__builtin_clzll", | |
321 | BT_FN_INT_LONGLONG, | |
322 | ATTR_CONST_NOTHROW_LIST) | |
323 | DEF_GCC_BUILTIN(BUILT_IN_CTZLL, | |
324 | "__builtin_ctzll", | |
325 | BT_FN_INT_LONGLONG, | |
326 | ATTR_CONST_NOTHROW_LIST) | |
327 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL, | |
328 | "__builtin_popcountll", | |
329 | BT_FN_INT_LONGLONG, | |
330 | ATTR_CONST_NOTHROW_LIST) | |
331 | DEF_GCC_BUILTIN(BUILT_IN_PARITYLL, | |
332 | "__builtin_parityll", | |
333 | BT_FN_INT_LONGLONG, | |
334 | ATTR_CONST_NOTHROW_LIST) | |
335 | ||
10841285 MM |
336 | DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, |
337 | "__builtin_index", | |
df061a43 | 338 | BT_FN_STRING_CONST_STRING_INT, |
00362064 | 339 | ATTR_PURE_NOTHROW_NONNULL_1) |
10841285 MM |
340 | DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, |
341 | "__builtin_rindex", | |
df061a43 | 342 | BT_FN_STRING_CONST_STRING_INT, |
00362064 | 343 | ATTR_PURE_NOTHROW_NONNULL_1) |
10841285 MM |
344 | |
345 | DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, | |
346 | "__builtin_memcpy", | |
df061a43 | 347 | BT_FN_PTR_PTR_CONST_PTR_SIZE, |
00362064 | 348 | ATTR_NOTHROW_NONNULL_1_2) |
e31603c4 JJ |
349 | DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE, |
350 | "__builtin_memmove", | |
351 | BT_FN_PTR_PTR_CONST_PTR_SIZE, | |
00362064 | 352 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
353 | DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, |
354 | "__builtin_memcmp", | |
df061a43 | 355 | BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, |
00362064 | 356 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
357 | DEF_LIB_BUILTIN(BUILT_IN_MEMSET, |
358 | "__builtin_memset", | |
df061a43 | 359 | BT_FN_PTR_PTR_INT_SIZE, |
00362064 | 360 | ATTR_NOTHROW_NONNULL_1) |
9cb65f92 KG |
361 | DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY, |
362 | "__builtin_mempcpy", | |
363 | BT_FN_PTR_PTR_CONST_PTR_SIZE, | |
00362064 | 364 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
365 | |
366 | DEF_LIB_BUILTIN(BUILT_IN_STRCAT, | |
367 | "__builtin_strcat", | |
df061a43 | 368 | BT_FN_STRING_STRING_CONST_STRING, |
00362064 | 369 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
370 | DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, |
371 | "__builtin_strncat", | |
df061a43 | 372 | BT_FN_STRING_STRING_CONST_STRING_SIZE, |
00362064 | 373 | ATTR_NOTHROW_NONNULL_1_2) |
9cb65f92 KG |
374 | DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY, |
375 | "__builtin_stpcpy", | |
376 | BT_FN_STRING_STRING_CONST_STRING, | |
00362064 | 377 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
378 | DEF_LIB_BUILTIN(BUILT_IN_STRCPY, |
379 | "__builtin_strcpy", | |
df061a43 | 380 | BT_FN_STRING_STRING_CONST_STRING, |
00362064 | 381 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
382 | DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, |
383 | "__builtin_strncpy", | |
df061a43 | 384 | BT_FN_STRING_STRING_CONST_STRING_SIZE, |
00362064 | 385 | ATTR_NOTHROW_NONNULL_1_2) |
10841285 MM |
386 | DEF_LIB_BUILTIN(BUILT_IN_STRCMP, |
387 | "__builtin_strcmp", | |
df061a43 | 388 | BT_FN_INT_CONST_STRING_CONST_STRING, |
00362064 | 389 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
390 | DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, |
391 | "__builtin_strncmp", | |
df061a43 | 392 | BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, |
00362064 | 393 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
394 | DEF_LIB_BUILTIN(BUILT_IN_STRLEN, |
395 | "__builtin_strlen", | |
df061a43 | 396 | BT_FN_SIZE_CONST_STRING, |
00362064 | 397 | ATTR_PURE_NOTHROW_NONNULL_1) |
10841285 MM |
398 | DEF_LIB_BUILTIN(BUILT_IN_STRSTR, |
399 | "__builtin_strstr", | |
df061a43 | 400 | BT_FN_STRING_CONST_STRING_CONST_STRING, |
00362064 | 401 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
402 | DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, |
403 | "__builtin_strpbrk", | |
df061a43 | 404 | BT_FN_STRING_CONST_STRING_CONST_STRING, |
00362064 | 405 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
406 | DEF_LIB_BUILTIN(BUILT_IN_STRSPN, |
407 | "__builtin_strspn", | |
df061a43 | 408 | BT_FN_SIZE_CONST_STRING_CONST_STRING, |
00362064 | 409 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
410 | DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, |
411 | "__builtin_strcspn", | |
df061a43 | 412 | BT_FN_SIZE_CONST_STRING_CONST_STRING, |
00362064 | 413 | ATTR_PURE_NOTHROW_NONNULL_1_2) |
10841285 MM |
414 | DEF_LIB_BUILTIN(BUILT_IN_STRCHR, |
415 | "__builtin_strchr", | |
df061a43 | 416 | BT_FN_STRING_CONST_STRING_INT, |
00362064 | 417 | ATTR_PURE_NOTHROW_NONNULL_1) |
10841285 MM |
418 | DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, |
419 | "__builtin_strrchr", | |
df061a43 | 420 | BT_FN_STRING_CONST_STRING_INT, |
00362064 | 421 | ATTR_PURE_NOTHROW_NONNULL_1) |
10841285 | 422 | |
dc6f4158 AJ |
423 | DEF_LIB_BUILTIN(BUILT_IN_SQRT, |
424 | "__builtin_sqrt", | |
df061a43 RS |
425 | BT_FN_DOUBLE_DOUBLE, |
426 | flag_errno_math ? ATTR_NOTHROW_LIST | |
427 | : (flag_unsafe_math_optimizations | |
428 | ? ATTR_CONST_NOTHROW_LIST | |
429 | : ATTR_PURE_NOTHROW_LIST)) | |
10841285 MM |
430 | DEF_LIB_BUILTIN(BUILT_IN_SIN, |
431 | "__builtin_sin", | |
df061a43 RS |
432 | BT_FN_DOUBLE_DOUBLE, |
433 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
434 | : ATTR_PURE_NOTHROW_LIST) | |
10841285 MM |
435 | DEF_LIB_BUILTIN(BUILT_IN_COS, |
436 | "__builtin_cos", | |
df061a43 RS |
437 | BT_FN_DOUBLE_DOUBLE, |
438 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
439 | : ATTR_PURE_NOTHROW_LIST) | |
e7b489c8 RS |
440 | DEF_LIB_BUILTIN(BUILT_IN_EXP, |
441 | "__builtin_exp", | |
442 | BT_FN_DOUBLE_DOUBLE, | |
443 | flag_errno_math ? ATTR_NOTHROW_LIST | |
444 | : (flag_unsafe_math_optimizations | |
445 | ? ATTR_CONST_NOTHROW_LIST | |
446 | : ATTR_PURE_NOTHROW_LIST)) | |
447 | DEF_LIB_BUILTIN(BUILT_IN_LOG, | |
448 | "__builtin_log", | |
449 | BT_FN_DOUBLE_DOUBLE, | |
450 | flag_errno_math ? ATTR_NOTHROW_LIST | |
451 | : (flag_unsafe_math_optimizations | |
452 | ? ATTR_CONST_NOTHROW_LIST | |
453 | : ATTR_PURE_NOTHROW_LIST)) | |
29f523be RS |
454 | DEF_LIB_BUILTIN(BUILT_IN_TAN, |
455 | "__builtin_tan", | |
456 | BT_FN_DOUBLE_DOUBLE, | |
457 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
458 | : ATTR_PURE_NOTHROW_LIST) | |
459 | DEF_LIB_BUILTIN(BUILT_IN_ATAN, | |
460 | "__builtin_atan", | |
461 | BT_FN_DOUBLE_DOUBLE, | |
462 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
463 | : ATTR_PURE_NOTHROW_LIST) | |
46847aa6 RS |
464 | DEF_LIB_BUILTIN(BUILT_IN_POW, |
465 | "__builtin_pow", | |
466 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
467 | flag_errno_math ? ATTR_NOTHROW_LIST | |
468 | : (flag_unsafe_math_optimizations | |
469 | ? ATTR_CONST_NOTHROW_LIST | |
470 | : ATTR_PURE_NOTHROW_LIST)) | |
471 | DEF_LIB_BUILTIN(BUILT_IN_ATAN2, | |
472 | "__builtin_atan2", | |
473 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
474 | flag_errno_math ? ATTR_NOTHROW_LIST | |
475 | : (flag_unsafe_math_optimizations | |
476 | ? ATTR_CONST_NOTHROW_LIST | |
477 | : ATTR_PURE_NOTHROW_LIST)) | |
b052d8ee RS |
478 | DEF_LIB_BUILTIN(BUILT_IN_FMOD, |
479 | "__builtin_fmod", | |
480 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
481 | flag_errno_math ? ATTR_NOTHROW_LIST | |
482 | : (flag_unsafe_math_optimizations | |
483 | ? ATTR_CONST_NOTHROW_LIST | |
484 | : ATTR_PURE_NOTHROW_LIST)) | |
272f51a3 JH |
485 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF, |
486 | "__builtin_sqrtf", | |
487 | BT_FN_FLOAT_FLOAT, | |
488 | flag_errno_math ? ATTR_NOTHROW_LIST | |
489 | : (flag_unsafe_math_optimizations | |
490 | ? ATTR_CONST_NOTHROW_LIST | |
491 | : ATTR_PURE_NOTHROW_LIST)) | |
492 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF, | |
493 | "__builtin_sinf", | |
494 | BT_FN_FLOAT_FLOAT, | |
495 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
496 | : ATTR_PURE_NOTHROW_LIST) | |
497 | DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF, | |
498 | "__builtin_cosf", | |
499 | BT_FN_FLOAT_FLOAT, | |
500 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
501 | : ATTR_PURE_NOTHROW_LIST) | |
502 | DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF, | |
503 | "__builtin_expf", | |
504 | BT_FN_FLOAT_FLOAT, | |
505 | flag_errno_math ? ATTR_NOTHROW_LIST | |
506 | : (flag_unsafe_math_optimizations | |
507 | ? ATTR_CONST_NOTHROW_LIST | |
508 | : ATTR_PURE_NOTHROW_LIST)) | |
509 | DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF, | |
510 | "__builtin_logf", | |
511 | BT_FN_FLOAT_FLOAT, | |
512 | flag_errno_math ? ATTR_NOTHROW_LIST | |
513 | : (flag_unsafe_math_optimizations | |
514 | ? ATTR_CONST_NOTHROW_LIST | |
515 | : ATTR_PURE_NOTHROW_LIST)) | |
29f523be RS |
516 | DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF, |
517 | "__builtin_tanf", | |
518 | BT_FN_FLOAT_FLOAT, | |
519 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
520 | : ATTR_PURE_NOTHROW_LIST) | |
521 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF, | |
522 | "__builtin_atanf", | |
523 | BT_FN_FLOAT_FLOAT, | |
524 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
525 | : ATTR_PURE_NOTHROW_LIST) | |
46847aa6 RS |
526 | DEF_C99_C90RES_BUILTIN(BUILT_IN_POWF, |
527 | "__builtin_powf", | |
528 | BT_FN_FLOAT_FLOAT_FLOAT, | |
529 | flag_errno_math ? ATTR_NOTHROW_LIST | |
530 | : (flag_unsafe_math_optimizations | |
531 | ? ATTR_CONST_NOTHROW_LIST | |
532 | : ATTR_PURE_NOTHROW_LIST)) | |
533 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2F, | |
534 | "__builtin_atan2f", | |
535 | BT_FN_FLOAT_FLOAT_FLOAT, | |
536 | flag_errno_math ? ATTR_NOTHROW_LIST | |
537 | : (flag_unsafe_math_optimizations | |
538 | ? ATTR_CONST_NOTHROW_LIST | |
539 | : ATTR_PURE_NOTHROW_LIST)) | |
b052d8ee RS |
540 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF, |
541 | "__builtin_fmodf", | |
542 | BT_FN_FLOAT_FLOAT_FLOAT, | |
543 | flag_errno_math ? ATTR_NOTHROW_LIST | |
544 | : (flag_unsafe_math_optimizations | |
545 | ? ATTR_CONST_NOTHROW_LIST | |
546 | : ATTR_PURE_NOTHROW_LIST)) | |
272f51a3 JH |
547 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL, |
548 | "__builtin_sqrtl", | |
549 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
550 | flag_errno_math ? ATTR_NOTHROW_LIST | |
551 | : (flag_unsafe_math_optimizations | |
552 | ? ATTR_CONST_NOTHROW_LIST | |
553 | : ATTR_PURE_NOTHROW_LIST)) | |
554 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL, | |
555 | "__builtin_sinl", | |
556 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
557 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
558 | : ATTR_PURE_NOTHROW_LIST) | |
559 | DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL, | |
560 | "__builtin_cosl", | |
561 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
562 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
563 | : ATTR_PURE_NOTHROW_LIST) | |
564 | DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL, | |
565 | "__builtin_expl", | |
566 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
567 | flag_errno_math ? ATTR_NOTHROW_LIST | |
568 | : (flag_unsafe_math_optimizations | |
569 | ? ATTR_CONST_NOTHROW_LIST | |
570 | : ATTR_PURE_NOTHROW_LIST)) | |
571 | DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL, | |
572 | "__builtin_logl", | |
573 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
574 | flag_errno_math ? ATTR_NOTHROW_LIST | |
575 | : (flag_unsafe_math_optimizations | |
576 | ? ATTR_CONST_NOTHROW_LIST | |
577 | : ATTR_PURE_NOTHROW_LIST)) | |
29f523be RS |
578 | DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL, |
579 | "__builtin_tanl", | |
580 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
581 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
582 | : ATTR_PURE_NOTHROW_LIST) | |
583 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL, | |
584 | "__builtin_atanl", | |
585 | BT_FN_LONG_DOUBLE_LONG_DOUBLE, | |
586 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
587 | : ATTR_PURE_NOTHROW_LIST) | |
46847aa6 RS |
588 | DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL, |
589 | "__builtin_powl", | |
590 | BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE, | |
591 | flag_errno_math ? ATTR_NOTHROW_LIST | |
592 | : (flag_unsafe_math_optimizations | |
593 | ? ATTR_CONST_NOTHROW_LIST | |
594 | : ATTR_PURE_NOTHROW_LIST)) | |
595 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L, | |
596 | "__builtin_atan2l", | |
597 | BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE, | |
598 | flag_errno_math ? ATTR_NOTHROW_LIST | |
599 | : (flag_unsafe_math_optimizations | |
600 | ? ATTR_CONST_NOTHROW_LIST | |
601 | : ATTR_PURE_NOTHROW_LIST)) | |
b052d8ee RS |
602 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL, |
603 | "__builtin_fmodl", | |
604 | BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE, | |
605 | flag_errno_math ? ATTR_NOTHROW_LIST | |
606 | : (flag_unsafe_math_optimizations | |
607 | ? ATTR_CONST_NOTHROW_LIST | |
608 | : ATTR_PURE_NOTHROW_LIST)) | |
10841285 | 609 | |
ab5e2615 RH |
610 | DEF_GCC_BUILTIN(BUILT_IN_INF, |
611 | "__builtin_inf", | |
612 | BT_FN_DOUBLE, | |
3aa4cad7 | 613 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 RH |
614 | DEF_GCC_BUILTIN(BUILT_IN_INFF, |
615 | "__builtin_inff", | |
616 | BT_FN_FLOAT, | |
3aa4cad7 | 617 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 RH |
618 | DEF_GCC_BUILTIN(BUILT_IN_INFL, |
619 | "__builtin_infl", | |
620 | BT_FN_LONG_DOUBLE, | |
3aa4cad7 | 621 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 RH |
622 | |
623 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL, | |
624 | "__builtin_huge_val", | |
625 | BT_FN_DOUBLE, | |
3aa4cad7 | 626 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 RH |
627 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF, |
628 | "__builtin_huge_valf", | |
629 | BT_FN_FLOAT, | |
3aa4cad7 | 630 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 RH |
631 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL, |
632 | "__builtin_huge_vall", | |
633 | BT_FN_LONG_DOUBLE, | |
3aa4cad7 | 634 | ATTR_CONST_NOTHROW_LIST) |
10841285 | 635 | |
1472e41c RH |
636 | DEF_LIB_BUILTIN(BUILT_IN_NAN, |
637 | "__builtin_nan", | |
638 | BT_FN_DOUBLE_CONST_STRING, | |
00362064 | 639 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
640 | DEF_LIB_BUILTIN(BUILT_IN_NANF, |
641 | "__builtin_nanf", | |
642 | BT_FN_FLOAT_CONST_STRING, | |
00362064 | 643 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
644 | DEF_LIB_BUILTIN(BUILT_IN_NANL, |
645 | "__builtin_nanl", | |
646 | BT_FN_LONG_DOUBLE_CONST_STRING, | |
00362064 | 647 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
648 | |
649 | DEF_LIB_BUILTIN(BUILT_IN_NANS, | |
650 | "__builtin_nans", | |
651 | BT_FN_DOUBLE_CONST_STRING, | |
00362064 | 652 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
653 | DEF_LIB_BUILTIN(BUILT_IN_NANSF, |
654 | "__builtin_nansf", | |
655 | BT_FN_FLOAT_CONST_STRING, | |
00362064 | 656 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
657 | DEF_LIB_BUILTIN(BUILT_IN_NANSL, |
658 | "__builtin_nansl", | |
659 | BT_FN_LONG_DOUBLE_CONST_STRING, | |
00362064 | 660 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c | 661 | |
10841285 MM |
662 | DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, |
663 | "__builtin_saveregs", | |
c2ef6d34 RS |
664 | BT_FN_PTR_VAR, |
665 | ATTR_NULL) | |
10841285 MM |
666 | DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, |
667 | "__builtin_classify_type", | |
c2ef6d34 RS |
668 | BT_FN_INT_VAR, |
669 | ATTR_NULL) | |
10841285 MM |
670 | DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, |
671 | "__builtin_next_arg", | |
c2ef6d34 RS |
672 | BT_FN_PTR_VAR, |
673 | ATTR_NULL) | |
10841285 MM |
674 | DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, |
675 | "__builtin_args_info", | |
c2ef6d34 RS |
676 | BT_FN_INT_INT, |
677 | ATTR_NULL) | |
10841285 MM |
678 | DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, |
679 | "__builtin_constant_p", | |
c2ef6d34 | 680 | BT_FN_INT_VAR, |
44c8a5f8 | 681 | ATTR_CONST_NOTHROW_LIST) |
10841285 MM |
682 | DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, |
683 | "__builtin_frame_address", | |
c2ef6d34 RS |
684 | BT_FN_PTR_UNSIGNED, |
685 | ATTR_NULL) | |
10841285 MM |
686 | DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, |
687 | "__builtin_return_address", | |
c2ef6d34 RS |
688 | BT_FN_PTR_UNSIGNED, |
689 | ATTR_NULL) | |
10841285 MM |
690 | DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, |
691 | "__builtin_aggregate_incoming_address", | |
c2ef6d34 RS |
692 | BT_FN_PTR_VAR, |
693 | ATTR_NULL) | |
10841285 MM |
694 | DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, |
695 | "__builtin_apply_args", | |
c2ef6d34 RS |
696 | BT_FN_PTR_VAR, |
697 | ATTR_NULL) | |
10841285 MM |
698 | DEF_GCC_BUILTIN(BUILT_IN_APPLY, |
699 | "__builtin_apply", | |
c2ef6d34 RS |
700 | BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, |
701 | ATTR_NULL) | |
10841285 MM |
702 | DEF_GCC_BUILTIN(BUILT_IN_RETURN, |
703 | "__builtin_return", | |
c2ef6d34 RS |
704 | BT_FN_VOID_PTR, |
705 | ATTR_NORETURN_NOTHROW_LIST) | |
10841285 MM |
706 | DEF_GCC_BUILTIN(BUILT_IN_SETJMP, |
707 | "__builtin_setjmp", | |
c2ef6d34 RS |
708 | BT_FN_INT_PTR, |
709 | ATTR_NULL) | |
10841285 MM |
710 | DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, |
711 | "__builtin_longjmp", | |
c2ef6d34 RS |
712 | BT_FN_VOID_PTR_INT, |
713 | ATTR_NORETURN_NOTHROW_LIST) | |
10841285 MM |
714 | DEF_GCC_BUILTIN(BUILT_IN_TRAP, |
715 | "__builtin_trap", | |
c2ef6d34 RS |
716 | BT_FN_VOID, |
717 | ATTR_NORETURN_NOTHROW_LIST) | |
a9ccbb60 JJ |
718 | DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, |
719 | "__builtin_prefetch", | |
c2ef6d34 RS |
720 | BT_FN_VOID_CONST_PTR_VAR, |
721 | ATTR_NULL) | |
10841285 | 722 | |
08291658 RS |
723 | /* stdio.h builtins (without FILE *). */ |
724 | ||
868b8cda RS |
725 | DEF_LIB_BUILTIN(BUILT_IN_PRINTF, |
726 | "__builtin_printf", | |
727 | BT_FN_INT_CONST_STRING_VAR, | |
728 | ATTR_FORMAT_PRINTF_1_2) | |
08291658 RS |
729 | DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR, |
730 | "__builtin_putchar", | |
731 | BT_FN_INT_INT, | |
732 | ATTR_NOTHROW_LIST) | |
733 | DEF_LIB_BUILTIN(BUILT_IN_PUTS, | |
734 | "__builtin_puts", | |
735 | BT_FN_INT_CONST_STRING, | |
00362064 | 736 | ATTR_NOTHROW_NONNULL_1) |
08291658 RS |
737 | DEF_C99_BUILTIN(BUILT_IN_SNPRINTF, |
738 | "__builtin_snprintf", | |
739 | BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, | |
740 | ATTR_FORMAT_PRINTF_3_4) | |
741 | DEF_LIB_BUILTIN(BUILT_IN_SPRINTF, | |
742 | "__builtin_sprintf", | |
743 | BT_FN_INT_STRING_CONST_STRING_VAR, | |
744 | ATTR_FORMAT_PRINTF_2_3) | |
745 | DEF_LIB_BUILTIN(BUILT_IN_SCANF, | |
746 | "__builtin_scanf", | |
747 | BT_FN_INT_CONST_STRING_VAR, | |
748 | ATTR_FORMAT_SCANF_1_2) | |
749 | DEF_LIB_BUILTIN(BUILT_IN_SSCANF, | |
750 | "__builtin_sscanf", | |
751 | BT_FN_INT_CONST_STRING_CONST_STRING_VAR, | |
752 | ATTR_FORMAT_SCANF_2_3) | |
753 | DEF_LIB_BUILTIN(BUILT_IN_VPRINTF, | |
754 | "__builtin_vprintf", | |
755 | BT_FN_INT_CONST_STRING_VALIST_ARG, | |
756 | ATTR_FORMAT_PRINTF_1_0) | |
757 | DEF_C99_BUILTIN(BUILT_IN_VSCANF, | |
758 | "__builtin_vscanf", | |
759 | BT_FN_INT_CONST_STRING_VALIST_ARG, | |
760 | ATTR_FORMAT_SCANF_1_0) | |
761 | DEF_C99_BUILTIN(BUILT_IN_VSSCANF, | |
762 | "__builtin_vsscanf", | |
763 | BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, | |
764 | ATTR_FORMAT_SCANF_2_0) | |
765 | DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF, | |
766 | "__builtin_vsnprintf", | |
767 | BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, | |
768 | ATTR_FORMAT_PRINTF_3_0) | |
769 | DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF, | |
770 | "__builtin_vsprintf", | |
771 | BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, | |
772 | ATTR_FORMAT_PRINTF_2_0) | |
773 | ||
774 | ||
775 | /* stdio.h builtins (with FILE *). */ | |
776 | ||
10841285 MM |
777 | /* Declare the __builtin_ style with arguments and the regular style |
778 | without them. We rely on stdio.h to supply the arguments for the | |
779 | regular style declaration since we had to use void* instead of | |
780 | FILE* in the __builtin_ prototype supplied here. */ | |
08291658 | 781 | |
cc42f5f5 RS |
782 | DEF_LIB_BUILTIN(BUILT_IN_FPUTC, |
783 | "__builtin_fputc", | |
784 | BT_FN_INT_INT_PTR, | |
785 | ATTR_NOTHROW_NONNULL_2) | |
786 | DEF_LIB_BUILTIN(BUILT_IN_FPUTS, | |
787 | "__builtin_fputs", | |
788 | BT_FN_INT_CONST_STRING_PTR, | |
789 | ATTR_NOTHROW_NONNULL_1_2) | |
790 | DEF_LIB_BUILTIN(BUILT_IN_FWRITE, | |
791 | "__builtin_fwrite", | |
792 | BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, | |
793 | ATTR_NOTHROW_NONNULL_1_4) | |
868b8cda RS |
794 | DEF_LIB_BUILTIN(BUILT_IN_FPRINTF, |
795 | "__builtin_fprintf", | |
796 | BT_FN_INT_PTR_CONST_STRING_VAR, | |
797 | ATTR_FORMAT_PRINTF_2_3) | |
3ff5f682 | 798 | |
08291658 | 799 | /* stdio unlocked builtins (without FILE *). */ |
b4c984fb | 800 | |
cc42f5f5 RS |
801 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, |
802 | "__builtin_putchar_unlocked", | |
803 | BT_FN_INT_INT, | |
804 | ATTR_NOTHROW_LIST) | |
805 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTS_UNLOCKED, | |
806 | "__builtin_puts_unlocked", | |
807 | BT_FN_INT_CONST_STRING, | |
808 | ATTR_NOTHROW_NONNULL_1) | |
868b8cda RS |
809 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, |
810 | "__builtin_printf_unlocked", | |
811 | BT_FN_INT_CONST_STRING_VAR, | |
812 | ATTR_FORMAT_PRINTF_1_2) | |
08291658 RS |
813 | |
814 | /* stdio unlocked builtins (with FILE *). */ | |
815 | ||
b4c984fb KG |
816 | /* Declare the __builtin_ style with arguments and the regular style |
817 | without them. We rely on stdio.h to supply the arguments for the | |
818 | regular style declaration since we had to use void* instead of | |
819 | FILE* in the __builtin_ prototype supplied here. */ | |
08291658 | 820 | |
cc42f5f5 RS |
821 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, |
822 | "__builtin_fputc_unlocked", | |
823 | BT_FN_INT_INT_PTR, | |
824 | ATTR_NOTHROW_NONNULL_2) | |
825 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTS_UNLOCKED, | |
826 | "__builtin_fputs_unlocked", | |
827 | BT_FN_INT_CONST_STRING_PTR, | |
828 | ATTR_NOTHROW_NONNULL_1_2) | |
829 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, | |
830 | "__builtin_fwrite_unlocked", | |
831 | BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, | |
832 | ATTR_NOTHROW_NONNULL_1_4) | |
868b8cda RS |
833 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, |
834 | "__builtin_fprintf_unlocked", | |
835 | BT_FN_INT_PTR_CONST_STRING_VAR, | |
836 | ATTR_FORMAT_PRINTF_2_3) | |
b4c984fb | 837 | |
cb1072f4 | 838 | /* ISO C99 floating point unordered comparisons. */ |
10841285 MM |
839 | DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, |
840 | "__builtin_isgreater", | |
c2ef6d34 RS |
841 | BT_FN_INT_VAR, |
842 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
843 | DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, |
844 | "__builtin_isgreaterequal", | |
c2ef6d34 RS |
845 | BT_FN_INT_VAR, |
846 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
847 | DEF_GCC_BUILTIN(BUILT_IN_ISLESS, |
848 | "__builtin_isless", | |
c2ef6d34 RS |
849 | BT_FN_INT_VAR, |
850 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
851 | DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, |
852 | "__builtin_islessequal", | |
c2ef6d34 RS |
853 | BT_FN_INT_VAR, |
854 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
855 | DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, |
856 | "__builtin_islessgreater", | |
c2ef6d34 RS |
857 | BT_FN_INT_VAR, |
858 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
859 | DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, |
860 | "__builtin_isunordered", | |
c2ef6d34 RS |
861 | BT_FN_INT_VAR, |
862 | ATTR_CONST_NOTHROW_LIST) | |
10841285 MM |
863 | |
864 | /* Various hooks for the DWARF 2 __throw routine. */ | |
865 | DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, | |
866 | "__builtin_unwind_init", | |
c2ef6d34 RS |
867 | BT_FN_VOID, |
868 | ATTR_NULL) | |
10841285 MM |
869 | DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, |
870 | "__builtin_dwarf_cfa", | |
c2ef6d34 RS |
871 | BT_FN_PTR, |
872 | ATTR_NULL) | |
9c80ff25 RH |
873 | DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN, |
874 | "__builtin_dwarf_sp_column", | |
c2ef6d34 RS |
875 | BT_FN_UNSIGNED, |
876 | ATTR_NULL) | |
10841285 MM |
877 | DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, |
878 | "__builtin_init_dwarf_reg_size_table", | |
c2ef6d34 RS |
879 | BT_FN_VOID_PTR, |
880 | ATTR_NULL) | |
10841285 MM |
881 | DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, |
882 | "__builtin_frob_return_addr", | |
c2ef6d34 RS |
883 | BT_FN_PTR_PTR, |
884 | ATTR_NULL) | |
10841285 MM |
885 | DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, |
886 | "__builtin_extract_return_addr", | |
c2ef6d34 RS |
887 | BT_FN_PTR_PTR, |
888 | ATTR_NULL) | |
10841285 MM |
889 | DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, |
890 | "__builtin_eh_return", | |
c2ef6d34 RS |
891 | BT_FN_VOID_PTRMODE_PTR, |
892 | ATTR_NORETURN_NOTHROW_LIST) | |
10841285 MM |
893 | DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, |
894 | "__builtin_eh_return_data_regno", | |
c2ef6d34 RS |
895 | BT_FN_INT_INT, |
896 | ATTR_NULL) | |
10841285 | 897 | |
6c535c69 ZW |
898 | /* Variable argument list (stdarg.h) support */ |
899 | DEF_GCC_BUILTIN(BUILT_IN_VA_START, | |
900 | "__builtin_va_start", | |
c2ef6d34 RS |
901 | BT_FN_VOID_VALIST_REF_VAR, |
902 | ATTR_NULL) | |
6c535c69 | 903 | DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */ |
10841285 | 904 | "__builtin_stdarg_start", |
c2ef6d34 RS |
905 | BT_FN_VOID_VALIST_REF_VAR, |
906 | ATTR_NULL) | |
10841285 MM |
907 | DEF_GCC_BUILTIN(BUILT_IN_VA_END, |
908 | "__builtin_va_end", | |
c2ef6d34 RS |
909 | BT_FN_VOID_VALIST_REF, |
910 | ATTR_NULL) | |
10841285 MM |
911 | DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, |
912 | "__builtin_va_copy", | |
c2ef6d34 RS |
913 | BT_FN_VOID_VALIST_REF_VALIST_ARG, |
914 | ATTR_NULL) | |
6c535c69 | 915 | |
10841285 MM |
916 | DEF_GCC_BUILTIN(BUILT_IN_EXPECT, |
917 | "__builtin_expect", | |
c2ef6d34 RS |
918 | BT_FN_LONG_LONG_LONG, |
919 | ATTR_NULL) | |
10841285 | 920 | |
df061a43 | 921 | /* Declare abort, exit, _exit and _Exit */ |
b052d8ee RS |
922 | DEF_LIB_BUILTIN(BUILT_IN_ABORT, |
923 | "__builtin_abort", | |
924 | BT_FN_VOID, | |
925 | ATTR_NORETURN_NOTHROW_LIST) | |
926 | DEF_LIB_BUILTIN(BUILT_IN_EXIT, | |
927 | "__builtin_exit", | |
928 | BT_FN_VOID_INT, | |
929 | ATTR_NORETURN_NOTHROW_LIST) | |
930 | DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT, | |
931 | "__builtin__exit", | |
932 | BT_FN_VOID_INT, | |
933 | ATTR_NORETURN_NOTHROW_LIST) | |
934 | DEF_C99_BUILTIN(BUILT_IN__EXIT2, | |
935 | "__builtin__Exit", | |
936 | BT_FN_VOID_INT, | |
937 | ATTR_NORETURN_NOTHROW_LIST) | |
df061a43 | 938 | |
1331d16f RS |
939 | /* Declare malloc, calloc and strdup. */ |
940 | DEF_LIB_BUILTIN(BUILT_IN_MALLOC, | |
941 | "__builtin_malloc", | |
942 | BT_FN_PTR_SIZE, | |
943 | ATTR_MALLOC_NOTHROW_LIST) | |
944 | ||
945 | DEF_LIB_BUILTIN(BUILT_IN_CALLOC, | |
946 | "__builtin_calloc", | |
947 | BT_FN_PTR_SIZE_SIZE, | |
948 | ATTR_MALLOC_NOTHROW_LIST) | |
949 | ||
950 | DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP, | |
951 | "__builtin_strdup", | |
952 | BT_FN_STRING_CONST_STRING, | |
00362064 | 953 | ATTR_MALLOC_NOTHROW_NONNULL_1) |
1331d16f | 954 |