]>
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 | |
1aa0a5f6 RS |
109 | DEF_LIB_BUILTIN(BUILT_IN_ABORT, |
110 | "__builtin_abort", | |
111 | BT_FN_VOID, | |
112 | ATTR_NORETURN_NOTHROW_LIST) | |
113 | ||
114 | DEF_LIB_BUILTIN(BUILT_IN_ABS, | |
115 | "__builtin_abs", | |
116 | BT_FN_INT_INT, | |
117 | ATTR_CONST_NOTHROW_LIST) | |
118 | ||
119 | DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, | |
120 | "__builtin_aggregate_incoming_address", | |
121 | BT_FN_PTR_VAR, | |
122 | ATTR_NULL) | |
123 | ||
10841285 MM |
124 | DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA, |
125 | "__builtin_alloca", | |
df061a43 RS |
126 | BT_FN_PTR_SIZE, |
127 | ATTR_MALLOC_NOTHROW_LIST) | |
10841285 | 128 | |
1aa0a5f6 RS |
129 | DEF_GCC_BUILTIN(BUILT_IN_APPLY, |
130 | "__builtin_apply", | |
131 | BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, | |
132 | ATTR_NULL) | |
133 | ||
134 | DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, | |
135 | "__builtin_apply_args", | |
136 | BT_FN_PTR_VAR, | |
137 | ATTR_NULL) | |
138 | ||
139 | DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, | |
140 | "__builtin_args_info", | |
b052d8ee | 141 | BT_FN_INT_INT, |
1aa0a5f6 | 142 | ATTR_NULL) |
b052d8ee | 143 | |
1aa0a5f6 RS |
144 | DEF_LIB_BUILTIN(BUILT_IN_ATAN, |
145 | "__builtin_atan", | |
b052d8ee | 146 | BT_FN_DOUBLE_DOUBLE, |
1aa0a5f6 RS |
147 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
148 | : ATTR_PURE_NOTHROW_LIST) | |
149 | ||
150 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF, | |
151 | "__builtin_atanf", | |
b052d8ee | 152 | BT_FN_FLOAT_FLOAT, |
1aa0a5f6 RS |
153 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
154 | : ATTR_PURE_NOTHROW_LIST) | |
155 | ||
156 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL, | |
157 | "__builtin_atanl", | |
3c260e1d | 158 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
159 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
160 | : ATTR_PURE_NOTHROW_LIST) | |
10841285 | 161 | |
1aa0a5f6 RS |
162 | DEF_LIB_BUILTIN(BUILT_IN_ATAN2, |
163 | "__builtin_atan2", | |
164 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
165 | flag_errno_math ? ATTR_NOTHROW_LIST | |
166 | : (flag_unsafe_math_optimizations | |
167 | ? ATTR_CONST_NOTHROW_LIST | |
168 | : ATTR_PURE_NOTHROW_LIST)) | |
169 | ||
170 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2F, | |
171 | "__builtin_atan2f", | |
172 | BT_FN_FLOAT_FLOAT_FLOAT, | |
173 | flag_errno_math ? ATTR_NOTHROW_LIST | |
174 | : (flag_unsafe_math_optimizations | |
175 | ? ATTR_CONST_NOTHROW_LIST | |
176 | : ATTR_PURE_NOTHROW_LIST)) | |
177 | ||
178 | DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L, | |
179 | "__builtin_atan2l", | |
3c260e1d | 180 | BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
181 | flag_errno_math ? ATTR_NOTHROW_LIST |
182 | : (flag_unsafe_math_optimizations | |
183 | ? ATTR_CONST_NOTHROW_LIST | |
184 | : ATTR_PURE_NOTHROW_LIST)) | |
185 | ||
186 | /* bcmp has traditionally accepted NULL pointers when the length | |
187 | parameter is zero, so don't apply attribute "nonnull". */ | |
188 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BCMP, | |
189 | "__builtin_bcmp", | |
190 | BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, | |
191 | ATTR_PURE_NOTHROW_LIST) | |
192 | ||
193 | /* bcopy has traditionally accepted NULL pointers when the length | |
194 | parameter is zero, so don't apply attribute "nonnull". */ | |
195 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BCOPY, | |
196 | "__builtin_bcopy", | |
197 | BT_FN_VOID_CONST_PTR_PTR_SIZE, | |
198 | ATTR_NOTHROW_LIST) | |
199 | ||
200 | /* bzero has traditionally accepted a NULL pointer when the length | |
201 | parameter is zero, so don't apply attribute "nonnull". */ | |
202 | DEF_EXT_LIB_BUILTIN(BUILT_IN_BZERO, | |
203 | "__builtin_bzero", | |
204 | BT_FN_VOID_PTR_SIZE, | |
205 | ATTR_NOTHROW_LIST) | |
206 | ||
207 | DEF_C99_BUILTIN(BUILT_IN_CABS, | |
208 | "__builtin_cabs", | |
209 | BT_FN_DOUBLE_COMPLEX_DOUBLE, | |
210 | ATTR_CONST_NOTHROW_LIST) | |
211 | ||
212 | DEF_C99_BUILTIN(BUILT_IN_CABSF, | |
213 | "__builtin_cabsf", | |
214 | BT_FN_FLOAT_COMPLEX_FLOAT, | |
215 | ATTR_CONST_NOTHROW_LIST) | |
216 | ||
217 | DEF_C99_BUILTIN(BUILT_IN_CABSL, | |
218 | "__builtin_cabsl", | |
3c260e1d | 219 | BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, |
4977bab6 | 220 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
221 | |
222 | DEF_LIB_BUILTIN(BUILT_IN_CALLOC, | |
223 | "__builtin_calloc", | |
224 | BT_FN_PTR_SIZE_SIZE, | |
225 | ATTR_MALLOC_NOTHROW_LIST) | |
4977bab6 ZW |
226 | |
227 | DEF_LIB_BUILTIN(BUILT_IN_CEIL, | |
228 | "__builtin_ceil", | |
229 | BT_FN_DOUBLE_DOUBLE, | |
230 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 231 | |
272f51a3 JH |
232 | DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF, |
233 | "__builtin_ceilf", | |
234 | BT_FN_FLOAT_FLOAT, | |
235 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 236 | |
272f51a3 JH |
237 | DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL, |
238 | "__builtin_ceill", | |
3c260e1d | 239 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
272f51a3 | 240 | ATTR_CONST_NOTHROW_LIST) |
4977bab6 | 241 | |
1aa0a5f6 RS |
242 | DEF_C99_BUILTIN(BUILT_IN_CIMAG, |
243 | "__builtin_cimag", | |
244 | BT_FN_DOUBLE_COMPLEX_DOUBLE, | |
4977bab6 ZW |
245 | ATTR_CONST_NOTHROW_LIST) |
246 | ||
1aa0a5f6 RS |
247 | DEF_C99_BUILTIN(BUILT_IN_CIMAGF, |
248 | "__builtin_cimagf", | |
249 | BT_FN_FLOAT_COMPLEX_FLOAT, | |
4977bab6 ZW |
250 | ATTR_CONST_NOTHROW_LIST) |
251 | ||
1aa0a5f6 RS |
252 | DEF_C99_BUILTIN(BUILT_IN_CIMAGL, |
253 | "__builtin_cimagl", | |
3c260e1d | 254 | BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, |
4977bab6 | 255 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
256 | |
257 | DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, | |
258 | "__builtin_classify_type", | |
259 | BT_FN_INT_VAR, | |
260 | ATTR_NULL) | |
261 | ||
262 | DEF_GCC_BUILTIN(BUILT_IN_CLZ, | |
263 | "__builtin_clz", | |
264 | BT_FN_INT_INT, | |
4977bab6 ZW |
265 | ATTR_CONST_NOTHROW_LIST) |
266 | ||
1aa0a5f6 RS |
267 | DEF_GCC_BUILTIN(BUILT_IN_CLZL, |
268 | "__builtin_clzl", | |
269 | BT_FN_INT_LONG, | |
4977bab6 | 270 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
271 | |
272 | DEF_GCC_BUILTIN(BUILT_IN_CLZLL, | |
273 | "__builtin_clzll", | |
274 | BT_FN_INT_LONGLONG, | |
4977bab6 | 275 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 | 276 | |
10841285 MM |
277 | DEF_C99_BUILTIN(BUILT_IN_CONJ, |
278 | "__builtin_conj", | |
4977bab6 ZW |
279 | BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, |
280 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 281 | |
10841285 MM |
282 | DEF_C99_BUILTIN(BUILT_IN_CONJF, |
283 | "__builtin_conjf", | |
4977bab6 ZW |
284 | BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, |
285 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 286 | |
10841285 MM |
287 | DEF_C99_BUILTIN(BUILT_IN_CONJL, |
288 | "__builtin_conjl", | |
3c260e1d | 289 | BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, |
4977bab6 | 290 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
291 | |
292 | DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, | |
293 | "__builtin_constant_p", | |
294 | BT_FN_INT_VAR, | |
295 | ATTR_CONST_NOTHROW_LIST) | |
296 | ||
297 | DEF_LIB_BUILTIN(BUILT_IN_COS, | |
298 | "__builtin_cos", | |
299 | BT_FN_DOUBLE_DOUBLE, | |
300 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
301 | : ATTR_PURE_NOTHROW_LIST) | |
302 | ||
303 | DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF, | |
304 | "__builtin_cosf", | |
305 | BT_FN_FLOAT_FLOAT, | |
306 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
307 | : ATTR_PURE_NOTHROW_LIST) | |
308 | ||
309 | DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL, | |
310 | "__builtin_cosl", | |
3c260e1d | 311 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
312 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
313 | : ATTR_PURE_NOTHROW_LIST) | |
314 | ||
10841285 MM |
315 | DEF_C99_BUILTIN(BUILT_IN_CREAL, |
316 | "__builtin_creal", | |
4977bab6 ZW |
317 | BT_FN_DOUBLE_COMPLEX_DOUBLE, |
318 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 319 | |
10841285 MM |
320 | DEF_C99_BUILTIN(BUILT_IN_CREALF, |
321 | "__builtin_crealf", | |
4977bab6 ZW |
322 | BT_FN_FLOAT_COMPLEX_FLOAT, |
323 | ATTR_CONST_NOTHROW_LIST) | |
1aa0a5f6 | 324 | |
10841285 MM |
325 | DEF_C99_BUILTIN(BUILT_IN_CREALL, |
326 | "__builtin_creall", | |
3c260e1d | 327 | BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, |
4977bab6 | 328 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
329 | |
330 | DEF_GCC_BUILTIN(BUILT_IN_CTZ, | |
331 | "__builtin_ctz", | |
332 | BT_FN_INT_INT, | |
075ec276 | 333 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
334 | |
335 | DEF_GCC_BUILTIN(BUILT_IN_CTZL, | |
336 | "__builtin_ctzl", | |
337 | BT_FN_INT_LONG, | |
075ec276 | 338 | ATTR_CONST_NOTHROW_LIST) |
10841285 | 339 | |
1aa0a5f6 RS |
340 | DEF_GCC_BUILTIN(BUILT_IN_CTZLL, |
341 | "__builtin_ctzll", | |
342 | BT_FN_INT_LONGLONG, | |
343 | ATTR_CONST_NOTHROW_LIST) | |
10841285 | 344 | |
1aa0a5f6 RS |
345 | DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, |
346 | "__builtin_dwarf_cfa", | |
347 | BT_FN_PTR, | |
348 | ATTR_NULL) | |
2928cd7a | 349 | |
1aa0a5f6 RS |
350 | DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN, |
351 | "__builtin_dwarf_sp_column", | |
352 | BT_FN_UNSIGNED, | |
353 | ATTR_NULL) | |
2928cd7a | 354 | |
1aa0a5f6 RS |
355 | DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, |
356 | "__builtin_eh_return", | |
357 | BT_FN_VOID_PTRMODE_PTR, | |
358 | ATTR_NORETURN_NOTHROW_LIST) | |
2928cd7a | 359 | |
1aa0a5f6 RS |
360 | DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, |
361 | "__builtin_eh_return_data_regno", | |
362 | BT_FN_INT_INT, | |
363 | ATTR_NULL) | |
10841285 | 364 | |
1aa0a5f6 RS |
365 | DEF_LIB_BUILTIN(BUILT_IN_EXIT, |
366 | "__builtin_exit", | |
367 | BT_FN_VOID_INT, | |
368 | ATTR_NORETURN_NOTHROW_LIST) | |
10841285 | 369 | |
1aa0a5f6 RS |
370 | DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT, |
371 | "__builtin__exit", | |
372 | BT_FN_VOID_INT, | |
373 | ATTR_NORETURN_NOTHROW_LIST) | |
374 | ||
375 | DEF_C99_BUILTIN(BUILT_IN__EXIT2, | |
376 | "__builtin__Exit", | |
377 | BT_FN_VOID_INT, | |
378 | ATTR_NORETURN_NOTHROW_LIST) | |
10841285 | 379 | |
e7b489c8 RS |
380 | DEF_LIB_BUILTIN(BUILT_IN_EXP, |
381 | "__builtin_exp", | |
382 | BT_FN_DOUBLE_DOUBLE, | |
383 | flag_errno_math ? ATTR_NOTHROW_LIST | |
384 | : (flag_unsafe_math_optimizations | |
385 | ? ATTR_CONST_NOTHROW_LIST | |
386 | : ATTR_PURE_NOTHROW_LIST)) | |
1aa0a5f6 | 387 | |
272f51a3 JH |
388 | DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF, |
389 | "__builtin_expf", | |
390 | BT_FN_FLOAT_FLOAT, | |
391 | flag_errno_math ? ATTR_NOTHROW_LIST | |
392 | : (flag_unsafe_math_optimizations | |
393 | ? ATTR_CONST_NOTHROW_LIST | |
394 | : ATTR_PURE_NOTHROW_LIST)) | |
1aa0a5f6 | 395 | |
272f51a3 | 396 | DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL, |
1aa0a5f6 | 397 | "__builtin_expl", |
3c260e1d | 398 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
46847aa6 RS |
399 | flag_errno_math ? ATTR_NOTHROW_LIST |
400 | : (flag_unsafe_math_optimizations | |
401 | ? ATTR_CONST_NOTHROW_LIST | |
402 | : ATTR_PURE_NOTHROW_LIST)) | |
1aa0a5f6 RS |
403 | |
404 | DEF_GCC_BUILTIN(BUILT_IN_EXPECT, | |
405 | "__builtin_expect", | |
406 | BT_FN_LONG_LONG_LONG, | |
407 | ATTR_NULL) | |
408 | ||
409 | DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, | |
410 | "__builtin_extract_return_addr", | |
411 | BT_FN_PTR_PTR, | |
412 | ATTR_NULL) | |
413 | ||
414 | DEF_LIB_BUILTIN(BUILT_IN_FABS, | |
415 | "__builtin_fabs", | |
416 | BT_FN_DOUBLE_DOUBLE, | |
417 | ATTR_CONST_NOTHROW_LIST) | |
418 | ||
419 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF, | |
420 | "__builtin_fabsf", | |
421 | BT_FN_FLOAT_FLOAT, | |
422 | ATTR_CONST_NOTHROW_LIST) | |
423 | ||
424 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL, | |
425 | "__builtin_fabsl", | |
3c260e1d | 426 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
427 | ATTR_CONST_NOTHROW_LIST) |
428 | ||
429 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, | |
430 | "__builtin_ffs", | |
431 | BT_FN_INT_INT, | |
432 | ATTR_CONST_NOTHROW_LIST) | |
433 | ||
434 | DEF_GCC_BUILTIN(BUILT_IN_FFSL, | |
435 | "__builtin_ffsl", | |
436 | BT_FN_INT_LONG, | |
437 | ATTR_CONST_NOTHROW_LIST) | |
438 | ||
439 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL, | |
440 | "__builtin_ffsll", | |
441 | BT_FN_INT_LONGLONG, | |
442 | ATTR_CONST_NOTHROW_LIST) | |
443 | ||
444 | DEF_LIB_BUILTIN(BUILT_IN_FLOOR, | |
445 | "__builtin_floor", | |
446 | BT_FN_DOUBLE_DOUBLE, | |
447 | ATTR_CONST_NOTHROW_LIST) | |
448 | ||
449 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF, | |
450 | "__builtin_floorf", | |
451 | BT_FN_FLOAT_FLOAT, | |
452 | ATTR_CONST_NOTHROW_LIST) | |
453 | ||
454 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL, | |
455 | "__builtin_floorl", | |
3c260e1d | 456 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
457 | ATTR_CONST_NOTHROW_LIST) |
458 | ||
459 | DEF_LIB_BUILTIN(BUILT_IN_FMOD, | |
460 | "__builtin_fmod", | |
461 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
462 | flag_errno_math ? ATTR_NOTHROW_LIST | |
463 | : (flag_unsafe_math_optimizations | |
464 | ? ATTR_CONST_NOTHROW_LIST | |
465 | : ATTR_PURE_NOTHROW_LIST)) | |
466 | ||
467 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF, | |
468 | "__builtin_fmodf", | |
469 | BT_FN_FLOAT_FLOAT_FLOAT, | |
46847aa6 RS |
470 | flag_errno_math ? ATTR_NOTHROW_LIST |
471 | : (flag_unsafe_math_optimizations | |
472 | ? ATTR_CONST_NOTHROW_LIST | |
473 | : ATTR_PURE_NOTHROW_LIST)) | |
1aa0a5f6 | 474 | |
b052d8ee RS |
475 | DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL, |
476 | "__builtin_fmodl", | |
3c260e1d | 477 | BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, |
b052d8ee RS |
478 | flag_errno_math ? ATTR_NOTHROW_LIST |
479 | : (flag_unsafe_math_optimizations | |
480 | ? ATTR_CONST_NOTHROW_LIST | |
481 | : ATTR_PURE_NOTHROW_LIST)) | |
10841285 | 482 | |
1aa0a5f6 RS |
483 | DEF_LIB_BUILTIN(BUILT_IN_FPRINTF, |
484 | "__builtin_fprintf", | |
485 | BT_FN_INT_PTR_CONST_STRING_VAR, | |
486 | ATTR_FORMAT_PRINTF_2_3) | |
487 | ||
488 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, | |
489 | "__builtin_fprintf_unlocked", | |
490 | BT_FN_INT_PTR_CONST_STRING_VAR, | |
491 | ATTR_FORMAT_PRINTF_2_3) | |
492 | ||
493 | DEF_LIB_BUILTIN(BUILT_IN_FPUTC, | |
494 | "__builtin_fputc", | |
495 | BT_FN_INT_INT_PTR, | |
496 | ATTR_NOTHROW_NONNULL_2) | |
497 | ||
498 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, | |
499 | "__builtin_fputc_unlocked", | |
500 | BT_FN_INT_INT_PTR, | |
501 | ATTR_NOTHROW_NONNULL_2) | |
502 | ||
503 | DEF_LIB_BUILTIN(BUILT_IN_FPUTS, | |
504 | "__builtin_fputs", | |
505 | BT_FN_INT_CONST_STRING_PTR, | |
506 | ATTR_NOTHROW_NONNULL_1_2) | |
507 | ||
508 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTS_UNLOCKED, | |
509 | "__builtin_fputs_unlocked", | |
510 | BT_FN_INT_CONST_STRING_PTR, | |
511 | ATTR_NOTHROW_NONNULL_1_2) | |
512 | ||
513 | DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, | |
514 | "__builtin_frame_address", | |
515 | BT_FN_PTR_UNSIGNED, | |
516 | ATTR_NULL) | |
517 | ||
518 | DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, | |
519 | "__builtin_frob_return_addr", | |
520 | BT_FN_PTR_PTR, | |
521 | ATTR_NULL) | |
522 | ||
523 | DEF_LIB_BUILTIN(BUILT_IN_FWRITE, | |
524 | "__builtin_fwrite", | |
525 | BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, | |
526 | ATTR_NOTHROW_NONNULL_1_4) | |
527 | ||
528 | DEF_EXT_LIB_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, | |
529 | "__builtin_fwrite_unlocked", | |
530 | BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, | |
531 | ATTR_NOTHROW_NONNULL_1_4) | |
532 | ||
533 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL, | |
534 | "__builtin_huge_val", | |
535 | BT_FN_DOUBLE, | |
536 | ATTR_CONST_NOTHROW_LIST) | |
537 | ||
538 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF, | |
539 | "__builtin_huge_valf", | |
540 | BT_FN_FLOAT, | |
541 | ATTR_CONST_NOTHROW_LIST) | |
542 | ||
543 | DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL, | |
544 | "__builtin_huge_vall", | |
3c260e1d | 545 | BT_FN_LONGDOUBLE, |
1aa0a5f6 RS |
546 | ATTR_CONST_NOTHROW_LIST) |
547 | ||
548 | DEF_C99_BUILTIN(BUILT_IN_IMAXABS, | |
549 | "__builtin_imaxabs", | |
550 | BT_FN_INTMAX_INTMAX, | |
551 | ATTR_CONST_NOTHROW_LIST) | |
552 | ||
553 | DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, | |
554 | "__builtin_index", | |
555 | BT_FN_STRING_CONST_STRING_INT, | |
556 | ATTR_PURE_NOTHROW_NONNULL_1) | |
557 | ||
ab5e2615 RH |
558 | DEF_GCC_BUILTIN(BUILT_IN_INF, |
559 | "__builtin_inf", | |
560 | BT_FN_DOUBLE, | |
3aa4cad7 | 561 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 | 562 | |
ab5e2615 RH |
563 | DEF_GCC_BUILTIN(BUILT_IN_INFF, |
564 | "__builtin_inff", | |
565 | BT_FN_FLOAT, | |
3aa4cad7 | 566 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 | 567 | |
ab5e2615 RH |
568 | DEF_GCC_BUILTIN(BUILT_IN_INFL, |
569 | "__builtin_infl", | |
3c260e1d | 570 | BT_FN_LONGDOUBLE, |
3aa4cad7 | 571 | ATTR_CONST_NOTHROW_LIST) |
ab5e2615 | 572 | |
1aa0a5f6 RS |
573 | DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, |
574 | "__builtin_init_dwarf_reg_size_table", | |
575 | BT_FN_VOID_PTR, | |
576 | ATTR_NULL) | |
577 | ||
578 | DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, | |
579 | "__builtin_isgreater", | |
580 | BT_FN_INT_VAR, | |
3aa4cad7 | 581 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
582 | |
583 | DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, | |
584 | "__builtin_isgreaterequal", | |
585 | BT_FN_INT_VAR, | |
3aa4cad7 | 586 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
587 | |
588 | DEF_GCC_BUILTIN(BUILT_IN_ISLESS, | |
589 | "__builtin_isless", | |
590 | BT_FN_INT_VAR, | |
591 | ATTR_CONST_NOTHROW_LIST) | |
592 | ||
593 | DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, | |
594 | "__builtin_islessequal", | |
595 | BT_FN_INT_VAR, | |
596 | ATTR_CONST_NOTHROW_LIST) | |
597 | ||
598 | DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, | |
599 | "__builtin_islessgreater", | |
600 | BT_FN_INT_VAR, | |
601 | ATTR_CONST_NOTHROW_LIST) | |
602 | ||
603 | DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, | |
604 | "__builtin_isunordered", | |
605 | BT_FN_INT_VAR, | |
3aa4cad7 | 606 | ATTR_CONST_NOTHROW_LIST) |
10841285 | 607 | |
1aa0a5f6 RS |
608 | DEF_LIB_BUILTIN(BUILT_IN_LABS, |
609 | "__builtin_labs", | |
610 | BT_FN_LONG_LONG, | |
611 | ATTR_CONST_NOTHROW_LIST) | |
612 | ||
613 | DEF_C99_BUILTIN(BUILT_IN_LLABS, | |
614 | "__builtin_llabs", | |
615 | BT_FN_LONGLONG_LONGLONG, | |
616 | ATTR_CONST_NOTHROW_LIST) | |
617 | ||
618 | DEF_LIB_BUILTIN(BUILT_IN_LOG, | |
619 | "__builtin_log", | |
620 | BT_FN_DOUBLE_DOUBLE, | |
621 | flag_errno_math ? ATTR_NOTHROW_LIST | |
622 | : (flag_unsafe_math_optimizations | |
623 | ? ATTR_CONST_NOTHROW_LIST | |
624 | : ATTR_PURE_NOTHROW_LIST)) | |
625 | ||
626 | DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF, | |
627 | "__builtin_logf", | |
628 | BT_FN_FLOAT_FLOAT, | |
629 | flag_errno_math ? ATTR_NOTHROW_LIST | |
630 | : (flag_unsafe_math_optimizations | |
631 | ? ATTR_CONST_NOTHROW_LIST | |
632 | : ATTR_PURE_NOTHROW_LIST)) | |
633 | ||
634 | DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL, | |
635 | "__builtin_logl", | |
3c260e1d | 636 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
637 | flag_errno_math ? ATTR_NOTHROW_LIST |
638 | : (flag_unsafe_math_optimizations | |
639 | ? ATTR_CONST_NOTHROW_LIST | |
640 | : ATTR_PURE_NOTHROW_LIST)) | |
641 | ||
642 | DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, | |
643 | "__builtin_longjmp", | |
644 | BT_FN_VOID_PTR_INT, | |
645 | ATTR_NORETURN_NOTHROW_LIST) | |
646 | ||
647 | DEF_LIB_BUILTIN(BUILT_IN_MALLOC, | |
648 | "__builtin_malloc", | |
649 | BT_FN_PTR_SIZE, | |
650 | ATTR_MALLOC_NOTHROW_LIST) | |
651 | ||
652 | DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, | |
653 | "__builtin_memcmp", | |
654 | BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, | |
655 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
656 | ||
657 | DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, | |
658 | "__builtin_memcpy", | |
659 | BT_FN_PTR_PTR_CONST_PTR_SIZE, | |
660 | ATTR_NOTHROW_NONNULL_1_2) | |
661 | ||
662 | DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE, | |
663 | "__builtin_memmove", | |
664 | BT_FN_PTR_PTR_CONST_PTR_SIZE, | |
665 | ATTR_NOTHROW_NONNULL_1_2) | |
666 | ||
667 | DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY, | |
668 | "__builtin_mempcpy", | |
669 | BT_FN_PTR_PTR_CONST_PTR_SIZE, | |
670 | ATTR_NOTHROW_NONNULL_1_2) | |
671 | ||
672 | DEF_LIB_BUILTIN(BUILT_IN_MEMSET, | |
673 | "__builtin_memset", | |
674 | BT_FN_PTR_PTR_INT_SIZE, | |
675 | ATTR_NOTHROW_NONNULL_1) | |
676 | ||
1472e41c RH |
677 | DEF_LIB_BUILTIN(BUILT_IN_NAN, |
678 | "__builtin_nan", | |
679 | BT_FN_DOUBLE_CONST_STRING, | |
00362064 | 680 | ATTR_CONST_NOTHROW_NONNULL_1) |
1aa0a5f6 | 681 | |
1472e41c RH |
682 | DEF_LIB_BUILTIN(BUILT_IN_NANF, |
683 | "__builtin_nanf", | |
684 | BT_FN_FLOAT_CONST_STRING, | |
00362064 | 685 | ATTR_CONST_NOTHROW_NONNULL_1) |
1aa0a5f6 | 686 | |
1472e41c RH |
687 | DEF_LIB_BUILTIN(BUILT_IN_NANL, |
688 | "__builtin_nanl", | |
3c260e1d | 689 | BT_FN_LONGDOUBLE_CONST_STRING, |
00362064 | 690 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c RH |
691 | |
692 | DEF_LIB_BUILTIN(BUILT_IN_NANS, | |
693 | "__builtin_nans", | |
694 | BT_FN_DOUBLE_CONST_STRING, | |
00362064 | 695 | ATTR_CONST_NOTHROW_NONNULL_1) |
1aa0a5f6 | 696 | |
1472e41c RH |
697 | DEF_LIB_BUILTIN(BUILT_IN_NANSF, |
698 | "__builtin_nansf", | |
699 | BT_FN_FLOAT_CONST_STRING, | |
00362064 | 700 | ATTR_CONST_NOTHROW_NONNULL_1) |
1aa0a5f6 | 701 | |
1472e41c RH |
702 | DEF_LIB_BUILTIN(BUILT_IN_NANSL, |
703 | "__builtin_nansl", | |
3c260e1d | 704 | BT_FN_LONGDOUBLE_CONST_STRING, |
00362064 | 705 | ATTR_CONST_NOTHROW_NONNULL_1) |
1472e41c | 706 | |
1aa0a5f6 RS |
707 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINT, |
708 | "__builtin_nearbyint", | |
709 | BT_FN_DOUBLE_DOUBLE, | |
710 | ATTR_CONST_NOTHROW_LIST) | |
711 | ||
712 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF, | |
713 | "__builtin_nearbyintf", | |
714 | BT_FN_FLOAT_FLOAT, | |
715 | ATTR_CONST_NOTHROW_LIST) | |
716 | ||
717 | DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL, | |
718 | "__builtin_nearbyintl", | |
3c260e1d | 719 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
720 | ATTR_CONST_NOTHROW_LIST) |
721 | ||
10841285 MM |
722 | DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, |
723 | "__builtin_next_arg", | |
c2ef6d34 RS |
724 | BT_FN_PTR_VAR, |
725 | ATTR_NULL) | |
1aa0a5f6 RS |
726 | |
727 | DEF_GCC_BUILTIN(BUILT_IN_PARITY, | |
728 | "__builtin_parity", | |
c2ef6d34 | 729 | BT_FN_INT_INT, |
44c8a5f8 | 730 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
731 | |
732 | DEF_GCC_BUILTIN(BUILT_IN_PARITYL, | |
733 | "__builtin_parityl", | |
734 | BT_FN_INT_LONG, | |
735 | ATTR_CONST_NOTHROW_LIST) | |
736 | ||
737 | DEF_GCC_BUILTIN(BUILT_IN_PARITYLL, | |
738 | "__builtin_parityll", | |
739 | BT_FN_INT_LONGLONG, | |
740 | ATTR_CONST_NOTHROW_LIST) | |
741 | ||
742 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT, | |
743 | "__builtin_popcount", | |
744 | BT_FN_INT_INT, | |
745 | ATTR_CONST_NOTHROW_LIST) | |
746 | ||
747 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL, | |
748 | "__builtin_popcountl", | |
749 | BT_FN_INT_LONG, | |
750 | ATTR_CONST_NOTHROW_LIST) | |
751 | ||
752 | DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL, | |
753 | "__builtin_popcountll", | |
754 | BT_FN_INT_LONGLONG, | |
755 | ATTR_CONST_NOTHROW_LIST) | |
756 | ||
757 | DEF_LIB_BUILTIN(BUILT_IN_POW, | |
758 | "__builtin_pow", | |
759 | BT_FN_DOUBLE_DOUBLE_DOUBLE, | |
760 | flag_errno_math ? ATTR_NOTHROW_LIST | |
761 | : (flag_unsafe_math_optimizations | |
762 | ? ATTR_CONST_NOTHROW_LIST | |
763 | : ATTR_PURE_NOTHROW_LIST)) | |
764 | ||
765 | DEF_C99_C90RES_BUILTIN(BUILT_IN_POWF, | |
766 | "__builtin_powf", | |
767 | BT_FN_FLOAT_FLOAT_FLOAT, | |
768 | flag_errno_math ? ATTR_NOTHROW_LIST | |
769 | : (flag_unsafe_math_optimizations | |
770 | ? ATTR_CONST_NOTHROW_LIST | |
771 | : ATTR_PURE_NOTHROW_LIST)) | |
772 | ||
773 | DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL, | |
774 | "__builtin_powl", | |
3c260e1d | 775 | BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
776 | flag_errno_math ? ATTR_NOTHROW_LIST |
777 | : (flag_unsafe_math_optimizations | |
778 | ? ATTR_CONST_NOTHROW_LIST | |
779 | : ATTR_PURE_NOTHROW_LIST)) | |
780 | ||
a9ccbb60 JJ |
781 | DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, |
782 | "__builtin_prefetch", | |
c2ef6d34 RS |
783 | BT_FN_VOID_CONST_PTR_VAR, |
784 | ATTR_NULL) | |
10841285 | 785 | |
868b8cda RS |
786 | DEF_LIB_BUILTIN(BUILT_IN_PRINTF, |
787 | "__builtin_printf", | |
788 | BT_FN_INT_CONST_STRING_VAR, | |
789 | ATTR_FORMAT_PRINTF_1_2) | |
1aa0a5f6 RS |
790 | |
791 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, | |
792 | "__builtin_printf_unlocked", | |
793 | BT_FN_INT_CONST_STRING_VAR, | |
794 | ATTR_FORMAT_PRINTF_1_2) | |
795 | ||
08291658 RS |
796 | DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR, |
797 | "__builtin_putchar", | |
798 | BT_FN_INT_INT, | |
799 | ATTR_NOTHROW_LIST) | |
1aa0a5f6 RS |
800 | |
801 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, | |
802 | "__builtin_putchar_unlocked", | |
803 | BT_FN_INT_INT, | |
804 | ATTR_NOTHROW_LIST) | |
805 | ||
08291658 RS |
806 | DEF_LIB_BUILTIN(BUILT_IN_PUTS, |
807 | "__builtin_puts", | |
808 | BT_FN_INT_CONST_STRING, | |
00362064 | 809 | ATTR_NOTHROW_NONNULL_1) |
1aa0a5f6 RS |
810 | |
811 | DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTS_UNLOCKED, | |
812 | "__builtin_puts_unlocked", | |
813 | BT_FN_INT_CONST_STRING, | |
814 | ATTR_NOTHROW_NONNULL_1) | |
815 | ||
816 | DEF_GCC_BUILTIN(BUILT_IN_RETURN, | |
817 | "__builtin_return", | |
818 | BT_FN_VOID_PTR, | |
819 | ATTR_NORETURN_NOTHROW_LIST) | |
820 | ||
821 | DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, | |
822 | "__builtin_return_address", | |
823 | BT_FN_PTR_UNSIGNED, | |
824 | ATTR_NULL) | |
825 | ||
826 | DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, | |
827 | "__builtin_rindex", | |
828 | BT_FN_STRING_CONST_STRING_INT, | |
829 | ATTR_PURE_NOTHROW_NONNULL_1) | |
830 | ||
831 | DEF_C99_BUILTIN(BUILT_IN_ROUND, | |
832 | "__builtin_round", | |
833 | BT_FN_DOUBLE_DOUBLE, | |
834 | ATTR_CONST_NOTHROW_LIST) | |
835 | ||
836 | DEF_C99_BUILTIN(BUILT_IN_ROUNDF, | |
837 | "__builtin_roundf", | |
838 | BT_FN_FLOAT_FLOAT, | |
839 | ATTR_CONST_NOTHROW_LIST) | |
840 | ||
841 | DEF_C99_BUILTIN(BUILT_IN_ROUNDL, | |
842 | "__builtin_roundl", | |
3c260e1d | 843 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
844 | ATTR_CONST_NOTHROW_LIST) |
845 | ||
846 | DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, | |
847 | "__builtin_saveregs", | |
848 | BT_FN_PTR_VAR, | |
849 | ATTR_NULL) | |
850 | ||
851 | DEF_LIB_BUILTIN(BUILT_IN_SCANF, | |
852 | "__builtin_scanf", | |
853 | BT_FN_INT_CONST_STRING_VAR, | |
854 | ATTR_FORMAT_SCANF_1_2) | |
855 | ||
856 | DEF_GCC_BUILTIN(BUILT_IN_SETJMP, | |
857 | "__builtin_setjmp", | |
858 | BT_FN_INT_PTR, | |
859 | ATTR_NULL) | |
860 | ||
861 | DEF_LIB_BUILTIN(BUILT_IN_SIN, | |
862 | "__builtin_sin", | |
863 | BT_FN_DOUBLE_DOUBLE, | |
864 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
865 | : ATTR_PURE_NOTHROW_LIST) | |
866 | ||
867 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF, | |
868 | "__builtin_sinf", | |
869 | BT_FN_FLOAT_FLOAT, | |
870 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
871 | : ATTR_PURE_NOTHROW_LIST) | |
872 | ||
873 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL, | |
874 | "__builtin_sinl", | |
3c260e1d | 875 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
876 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
877 | : ATTR_PURE_NOTHROW_LIST) | |
878 | ||
08291658 RS |
879 | DEF_C99_BUILTIN(BUILT_IN_SNPRINTF, |
880 | "__builtin_snprintf", | |
881 | BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, | |
882 | ATTR_FORMAT_PRINTF_3_4) | |
1aa0a5f6 | 883 | |
08291658 RS |
884 | DEF_LIB_BUILTIN(BUILT_IN_SPRINTF, |
885 | "__builtin_sprintf", | |
886 | BT_FN_INT_STRING_CONST_STRING_VAR, | |
887 | ATTR_FORMAT_PRINTF_2_3) | |
1aa0a5f6 | 888 | |
08291658 RS |
889 | DEF_LIB_BUILTIN(BUILT_IN_SSCANF, |
890 | "__builtin_sscanf", | |
891 | BT_FN_INT_CONST_STRING_CONST_STRING_VAR, | |
892 | ATTR_FORMAT_SCANF_2_3) | |
08291658 | 893 | |
1aa0a5f6 RS |
894 | DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */ |
895 | "__builtin_stdarg_start", | |
896 | BT_FN_VOID_VALIST_REF_VAR, | |
897 | ATTR_NULL) | |
898 | ||
899 | DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY, | |
900 | "__builtin_stpcpy", | |
901 | BT_FN_STRING_STRING_CONST_STRING, | |
902 | ATTR_NOTHROW_NONNULL_1_2) | |
903 | ||
904 | DEF_LIB_BUILTIN(BUILT_IN_STRCAT, | |
905 | "__builtin_strcat", | |
906 | BT_FN_STRING_STRING_CONST_STRING, | |
907 | ATTR_NOTHROW_NONNULL_1_2) | |
908 | ||
909 | DEF_LIB_BUILTIN(BUILT_IN_STRCHR, | |
910 | "__builtin_strchr", | |
911 | BT_FN_STRING_CONST_STRING_INT, | |
912 | ATTR_PURE_NOTHROW_NONNULL_1) | |
913 | ||
914 | DEF_LIB_BUILTIN(BUILT_IN_STRCMP, | |
915 | "__builtin_strcmp", | |
916 | BT_FN_INT_CONST_STRING_CONST_STRING, | |
917 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
918 | ||
919 | DEF_LIB_BUILTIN(BUILT_IN_STRCPY, | |
920 | "__builtin_strcpy", | |
921 | BT_FN_STRING_STRING_CONST_STRING, | |
922 | ATTR_NOTHROW_NONNULL_1_2) | |
923 | ||
924 | DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, | |
925 | "__builtin_strcspn", | |
926 | BT_FN_SIZE_CONST_STRING_CONST_STRING, | |
927 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
928 | ||
929 | DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP, | |
930 | "__builtin_strdup", | |
931 | BT_FN_STRING_CONST_STRING, | |
932 | ATTR_MALLOC_NOTHROW_NONNULL_1) | |
08291658 | 933 | |
1aa0a5f6 RS |
934 | DEF_LIB_BUILTIN(BUILT_IN_STRLEN, |
935 | "__builtin_strlen", | |
936 | BT_FN_SIZE_CONST_STRING, | |
937 | ATTR_PURE_NOTHROW_NONNULL_1) | |
08291658 | 938 | |
1aa0a5f6 RS |
939 | DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, |
940 | "__builtin_strncat", | |
941 | BT_FN_STRING_STRING_CONST_STRING_SIZE, | |
942 | ATTR_NOTHROW_NONNULL_1_2) | |
08291658 | 943 | |
1aa0a5f6 RS |
944 | DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, |
945 | "__builtin_strncmp", | |
946 | BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, | |
947 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
948 | ||
949 | DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, | |
950 | "__builtin_strncpy", | |
951 | BT_FN_STRING_STRING_CONST_STRING_SIZE, | |
cc42f5f5 | 952 | ATTR_NOTHROW_NONNULL_1_2) |
3ff5f682 | 953 | |
1aa0a5f6 RS |
954 | DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, |
955 | "__builtin_strpbrk", | |
956 | BT_FN_STRING_CONST_STRING_CONST_STRING, | |
957 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
b4c984fb | 958 | |
1aa0a5f6 RS |
959 | DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, |
960 | "__builtin_strrchr", | |
961 | BT_FN_STRING_CONST_STRING_INT, | |
962 | ATTR_PURE_NOTHROW_NONNULL_1) | |
963 | ||
964 | DEF_LIB_BUILTIN(BUILT_IN_STRSPN, | |
965 | "__builtin_strspn", | |
966 | BT_FN_SIZE_CONST_STRING_CONST_STRING, | |
967 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
968 | ||
969 | DEF_LIB_BUILTIN(BUILT_IN_STRSTR, | |
970 | "__builtin_strstr", | |
971 | BT_FN_STRING_CONST_STRING_CONST_STRING, | |
972 | ATTR_PURE_NOTHROW_NONNULL_1_2) | |
08291658 | 973 | |
1aa0a5f6 RS |
974 | DEF_LIB_BUILTIN(BUILT_IN_SQRT, |
975 | "__builtin_sqrt", | |
976 | BT_FN_DOUBLE_DOUBLE, | |
977 | flag_errno_math ? ATTR_NOTHROW_LIST | |
978 | : (flag_unsafe_math_optimizations | |
979 | ? ATTR_CONST_NOTHROW_LIST | |
980 | : ATTR_PURE_NOTHROW_LIST)) | |
08291658 | 981 | |
1aa0a5f6 RS |
982 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF, |
983 | "__builtin_sqrtf", | |
984 | BT_FN_FLOAT_FLOAT, | |
985 | flag_errno_math ? ATTR_NOTHROW_LIST | |
986 | : (flag_unsafe_math_optimizations | |
987 | ? ATTR_CONST_NOTHROW_LIST | |
988 | : ATTR_PURE_NOTHROW_LIST)) | |
08291658 | 989 | |
1aa0a5f6 RS |
990 | DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL, |
991 | "__builtin_sqrtl", | |
3c260e1d | 992 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
993 | flag_errno_math ? ATTR_NOTHROW_LIST |
994 | : (flag_unsafe_math_optimizations | |
995 | ? ATTR_CONST_NOTHROW_LIST | |
996 | : ATTR_PURE_NOTHROW_LIST)) | |
b4c984fb | 997 | |
1aa0a5f6 RS |
998 | DEF_LIB_BUILTIN(BUILT_IN_TAN, |
999 | "__builtin_tan", | |
1000 | BT_FN_DOUBLE_DOUBLE, | |
1001 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
1002 | : ATTR_PURE_NOTHROW_LIST) | |
1003 | ||
1004 | DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF, | |
1005 | "__builtin_tanf", | |
1006 | BT_FN_FLOAT_FLOAT, | |
1007 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST | |
1008 | : ATTR_PURE_NOTHROW_LIST) | |
1009 | ||
1010 | DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL, | |
1011 | "__builtin_tanl", | |
3c260e1d | 1012 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
1aa0a5f6 RS |
1013 | flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST |
1014 | : ATTR_PURE_NOTHROW_LIST) | |
1015 | ||
1016 | DEF_GCC_BUILTIN(BUILT_IN_TRAP, | |
1017 | "__builtin_trap", | |
1018 | BT_FN_VOID, | |
1019 | ATTR_NORETURN_NOTHROW_LIST) | |
1020 | ||
1021 | DEF_C99_BUILTIN(BUILT_IN_TRUNC, | |
1022 | "__builtin_trunc", | |
1023 | BT_FN_DOUBLE_DOUBLE, | |
c2ef6d34 | 1024 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
1025 | |
1026 | DEF_C99_BUILTIN(BUILT_IN_TRUNCF, | |
1027 | "__builtin_truncf", | |
1028 | BT_FN_FLOAT_FLOAT, | |
c2ef6d34 | 1029 | ATTR_CONST_NOTHROW_LIST) |
1aa0a5f6 RS |
1030 | |
1031 | DEF_C99_BUILTIN(BUILT_IN_TRUNCL, | |
1032 | "__builtin_truncl", | |
3c260e1d | 1033 | BT_FN_LONGDOUBLE_LONGDOUBLE, |
c2ef6d34 | 1034 | ATTR_CONST_NOTHROW_LIST) |
10841285 | 1035 | |
10841285 MM |
1036 | DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, |
1037 | "__builtin_unwind_init", | |
c2ef6d34 RS |
1038 | BT_FN_VOID, |
1039 | ATTR_NULL) | |
10841285 | 1040 | |
1aa0a5f6 RS |
1041 | DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, |
1042 | "__builtin_va_copy", | |
1043 | BT_FN_VOID_VALIST_REF_VALIST_ARG, | |
c2ef6d34 | 1044 | ATTR_NULL) |
1aa0a5f6 | 1045 | |
10841285 MM |
1046 | DEF_GCC_BUILTIN(BUILT_IN_VA_END, |
1047 | "__builtin_va_end", | |
c2ef6d34 RS |
1048 | BT_FN_VOID_VALIST_REF, |
1049 | ATTR_NULL) | |
6c535c69 | 1050 | |
1aa0a5f6 RS |
1051 | DEF_GCC_BUILTIN(BUILT_IN_VA_START, |
1052 | "__builtin_va_start", | |
1053 | BT_FN_VOID_VALIST_REF_VAR, | |
c2ef6d34 | 1054 | ATTR_NULL) |
10841285 | 1055 | |
1aa0a5f6 RS |
1056 | DEF_LIB_BUILTIN(BUILT_IN_VPRINTF, |
1057 | "__builtin_vprintf", | |
1058 | BT_FN_INT_CONST_STRING_VALIST_ARG, | |
1059 | ATTR_FORMAT_PRINTF_1_0) | |
df061a43 | 1060 | |
1aa0a5f6 RS |
1061 | DEF_C99_BUILTIN(BUILT_IN_VSCANF, |
1062 | "__builtin_vscanf", | |
1063 | BT_FN_INT_CONST_STRING_VALIST_ARG, | |
1064 | ATTR_FORMAT_SCANF_1_0) | |
1331d16f | 1065 | |
1aa0a5f6 RS |
1066 | DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF, |
1067 | "__builtin_vsnprintf", | |
1068 | BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, | |
1069 | ATTR_FORMAT_PRINTF_3_0) | |
1331d16f | 1070 | |
1aa0a5f6 RS |
1071 | DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF, |
1072 | "__builtin_vsprintf", | |
1073 | BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, | |
1074 | ATTR_FORMAT_PRINTF_2_0) | |
1075 | ||
1076 | DEF_C99_BUILTIN(BUILT_IN_VSSCANF, | |
1077 | "__builtin_vsscanf", | |
1078 | BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, | |
1079 | ATTR_FORMAT_SCANF_2_0) | |
1331d16f | 1080 |