1 /* This file contains the definitions and documentation for the
2 builtins used in the GNU compiler.
3 Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of GCC.
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
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
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 /* Before including this file, you should define a macro:
24 DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
25 FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)
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.
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
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
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
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
53 exist when compiling in ANSI conformant mode.
55 ATTRs is an attribute list as defined in builtin-attrs.def that
56 describes the attributes of this builtin function.
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
62 simplifying floor((double)float) since the runtime need not implement
65 /* A GCC builtin (like __builtin_saveregs) is provided by the
66 compiler, but does not correspond to a function in the standard
68 #undef DEF_GCC_BUILTIN
69 #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
70 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \
71 false, false, false, ATTRS, true)
73 /* A library builtin (like __builtin_strchr) is a builtin equivalent
74 of an ANSI/ISO standard library function. In addition to the
75 `__builtin' version, we will create an ordinary version (e.g,
76 `strchr') as well. If we cannot compute the answer using the
77 builtin function, we will fall back to the standard library
79 #undef DEF_LIB_BUILTIN
80 #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
81 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
82 true, true, false, ATTRS, true)
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
88 #undef DEF_EXT_LIB_BUILTIN
89 #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
90 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
91 true, true, true, ATTRS, false)
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
96 #define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
97 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
98 true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
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
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)
109 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
112 ATTR_MALLOC_NOTHROW_LIST)
114 DEF_LIB_BUILTIN(BUILT_IN_ABS,
117 ATTR_CONST_NOTHROW_LIST)
118 DEF_LIB_BUILTIN(BUILT_IN_LABS,
121 ATTR_CONST_NOTHROW_LIST)
123 DEF_LIB_BUILTIN(BUILT_IN_FABS,
126 ATTR_CONST_NOTHROW_LIST)
127 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
130 ATTR_CONST_NOTHROW_LIST)
131 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
133 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
134 ATTR_CONST_NOTHROW_LIST)
136 DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
139 ATTR_CONST_NOTHROW_LIST)
140 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF,
143 ATTR_CONST_NOTHROW_LIST)
144 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL,
146 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
147 ATTR_CONST_NOTHROW_LIST)
149 DEF_LIB_BUILTIN(BUILT_IN_CEIL,
152 ATTR_CONST_NOTHROW_LIST)
153 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF,
156 ATTR_CONST_NOTHROW_LIST)
157 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL,
159 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
160 ATTR_CONST_NOTHROW_LIST)
162 DEF_C99_BUILTIN(BUILT_IN_ROUND,
165 ATTR_CONST_NOTHROW_LIST)
166 DEF_C99_BUILTIN(BUILT_IN_ROUNDF,
169 ATTR_CONST_NOTHROW_LIST)
170 DEF_C99_BUILTIN(BUILT_IN_ROUNDL,
172 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
173 ATTR_CONST_NOTHROW_LIST)
175 DEF_C99_BUILTIN(BUILT_IN_TRUNC,
178 ATTR_CONST_NOTHROW_LIST)
179 DEF_C99_BUILTIN(BUILT_IN_TRUNCF,
182 ATTR_CONST_NOTHROW_LIST)
183 DEF_C99_BUILTIN(BUILT_IN_TRUNCL,
185 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
186 ATTR_CONST_NOTHROW_LIST)
188 DEF_C99_BUILTIN(BUILT_IN_NEARBYINT,
189 "__builtin_nearbyint",
191 ATTR_CONST_NOTHROW_LIST)
192 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF,
193 "__builtin_nearbyintf",
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)
201 DEF_C99_BUILTIN(BUILT_IN_LLABS,
203 BT_FN_LONGLONG_LONGLONG,
204 ATTR_CONST_NOTHROW_LIST)
205 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
208 ATTR_CONST_NOTHROW_LIST)
209 DEF_C99_BUILTIN(BUILT_IN_CONJ,
211 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
212 ATTR_CONST_NOTHROW_LIST)
213 DEF_C99_BUILTIN(BUILT_IN_CONJF,
215 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
216 ATTR_CONST_NOTHROW_LIST)
217 DEF_C99_BUILTIN(BUILT_IN_CONJL,
219 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
220 ATTR_CONST_NOTHROW_LIST)
221 DEF_C99_BUILTIN(BUILT_IN_CREAL,
223 BT_FN_DOUBLE_COMPLEX_DOUBLE,
224 ATTR_CONST_NOTHROW_LIST)
225 DEF_C99_BUILTIN(BUILT_IN_CREALF,
227 BT_FN_FLOAT_COMPLEX_FLOAT,
228 ATTR_CONST_NOTHROW_LIST)
229 DEF_C99_BUILTIN(BUILT_IN_CREALL,
231 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
232 ATTR_CONST_NOTHROW_LIST)
233 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
235 BT_FN_DOUBLE_COMPLEX_DOUBLE,
236 ATTR_CONST_NOTHROW_LIST)
237 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
239 BT_FN_FLOAT_COMPLEX_FLOAT,
240 ATTR_CONST_NOTHROW_LIST)
241 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
243 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
244 ATTR_CONST_NOTHROW_LIST)
245 DEF_C99_BUILTIN(BUILT_IN_CABS,
247 BT_FN_DOUBLE_COMPLEX_DOUBLE,
248 ATTR_CONST_NOTHROW_LIST)
249 DEF_C99_BUILTIN(BUILT_IN_CABSF,
251 BT_FN_FLOAT_COMPLEX_FLOAT,
252 ATTR_CONST_NOTHROW_LIST)
253 DEF_C99_BUILTIN(BUILT_IN_CABSL,
255 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
256 ATTR_CONST_NOTHROW_LIST)
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,
264 DEF_EXT_LIB_BUILTIN(BUILT_IN_BCOPY,
266 BT_FN_VOID_CONST_PTR_PTR_SIZE,
268 DEF_EXT_LIB_BUILTIN(BUILT_IN_BCMP,
270 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
271 ATTR_PURE_NOTHROW_LIST)
273 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
276 ATTR_CONST_NOTHROW_LIST)
277 DEF_GCC_BUILTIN(BUILT_IN_CLZ,
280 ATTR_CONST_NOTHROW_LIST)
281 DEF_GCC_BUILTIN(BUILT_IN_CTZ,
284 ATTR_CONST_NOTHROW_LIST)
285 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT,
286 "__builtin_popcount",
288 ATTR_CONST_NOTHROW_LIST)
289 DEF_GCC_BUILTIN(BUILT_IN_PARITY,
292 ATTR_CONST_NOTHROW_LIST)
294 DEF_GCC_BUILTIN(BUILT_IN_FFSL,
297 ATTR_CONST_NOTHROW_LIST)
298 DEF_GCC_BUILTIN(BUILT_IN_CLZL,
301 ATTR_CONST_NOTHROW_LIST)
302 DEF_GCC_BUILTIN(BUILT_IN_CTZL,
305 ATTR_CONST_NOTHROW_LIST)
306 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL,
307 "__builtin_popcountl",
309 ATTR_CONST_NOTHROW_LIST)
310 DEF_GCC_BUILTIN(BUILT_IN_PARITYL,
313 ATTR_CONST_NOTHROW_LIST)
315 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL,
318 ATTR_CONST_NOTHROW_LIST)
319 DEF_GCC_BUILTIN(BUILT_IN_CLZLL,
322 ATTR_CONST_NOTHROW_LIST)
323 DEF_GCC_BUILTIN(BUILT_IN_CTZLL,
326 ATTR_CONST_NOTHROW_LIST)
327 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL,
328 "__builtin_popcountll",
330 ATTR_CONST_NOTHROW_LIST)
331 DEF_GCC_BUILTIN(BUILT_IN_PARITYLL,
332 "__builtin_parityll",
334 ATTR_CONST_NOTHROW_LIST)
336 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
338 BT_FN_STRING_CONST_STRING_INT,
339 ATTR_PURE_NOTHROW_NONNULL_1)
340 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
342 BT_FN_STRING_CONST_STRING_INT,
343 ATTR_PURE_NOTHROW_NONNULL_1)
345 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
347 BT_FN_PTR_PTR_CONST_PTR_SIZE,
348 ATTR_NOTHROW_NONNULL_1_2)
349 DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE,
351 BT_FN_PTR_PTR_CONST_PTR_SIZE,
352 ATTR_NOTHROW_NONNULL_1_2)
353 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
355 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
356 ATTR_PURE_NOTHROW_NONNULL_1_2)
357 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
359 BT_FN_PTR_PTR_INT_SIZE,
360 ATTR_NOTHROW_NONNULL_1)
361 DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY,
363 BT_FN_PTR_PTR_CONST_PTR_SIZE,
364 ATTR_NOTHROW_NONNULL_1_2)
366 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
368 BT_FN_STRING_STRING_CONST_STRING,
369 ATTR_NOTHROW_NONNULL_1_2)
370 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
372 BT_FN_STRING_STRING_CONST_STRING_SIZE,
373 ATTR_NOTHROW_NONNULL_1_2)
374 DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY,
376 BT_FN_STRING_STRING_CONST_STRING,
377 ATTR_NOTHROW_NONNULL_1_2)
378 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
380 BT_FN_STRING_STRING_CONST_STRING,
381 ATTR_NOTHROW_NONNULL_1_2)
382 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
384 BT_FN_STRING_STRING_CONST_STRING_SIZE,
385 ATTR_NOTHROW_NONNULL_1_2)
386 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
388 BT_FN_INT_CONST_STRING_CONST_STRING,
389 ATTR_PURE_NOTHROW_NONNULL_1_2)
390 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
392 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
393 ATTR_PURE_NOTHROW_NONNULL_1_2)
394 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
396 BT_FN_SIZE_CONST_STRING,
397 ATTR_PURE_NOTHROW_NONNULL_1)
398 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
400 BT_FN_STRING_CONST_STRING_CONST_STRING,
401 ATTR_PURE_NOTHROW_NONNULL_1_2)
402 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
404 BT_FN_STRING_CONST_STRING_CONST_STRING,
405 ATTR_PURE_NOTHROW_NONNULL_1_2)
406 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
408 BT_FN_SIZE_CONST_STRING_CONST_STRING,
409 ATTR_PURE_NOTHROW_NONNULL_1_2)
410 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
412 BT_FN_SIZE_CONST_STRING_CONST_STRING,
413 ATTR_PURE_NOTHROW_NONNULL_1_2)
414 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
416 BT_FN_STRING_CONST_STRING_INT,
417 ATTR_PURE_NOTHROW_NONNULL_1)
418 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
420 BT_FN_STRING_CONST_STRING_INT,
421 ATTR_PURE_NOTHROW_NONNULL_1)
423 DEF_LIB_BUILTIN(BUILT_IN_SQRT,
426 flag_errno_math ? ATTR_NOTHROW_LIST
427 : (flag_unsafe_math_optimizations
428 ? ATTR_CONST_NOTHROW_LIST
429 : ATTR_PURE_NOTHROW_LIST))
430 DEF_LIB_BUILTIN(BUILT_IN_SIN,
433 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
434 : ATTR_PURE_NOTHROW_LIST)
435 DEF_LIB_BUILTIN(BUILT_IN_COS,
438 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
439 : ATTR_PURE_NOTHROW_LIST)
440 DEF_LIB_BUILTIN(BUILT_IN_EXP,
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,
450 flag_errno_math ? ATTR_NOTHROW_LIST
451 : (flag_unsafe_math_optimizations
452 ? ATTR_CONST_NOTHROW_LIST
453 : ATTR_PURE_NOTHROW_LIST))
454 DEF_LIB_BUILTIN(BUILT_IN_TAN,
457 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
458 : ATTR_PURE_NOTHROW_LIST)
459 DEF_LIB_BUILTIN(BUILT_IN_ATAN,
462 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
463 : ATTR_PURE_NOTHROW_LIST)
464 DEF_LIB_BUILTIN(BUILT_IN_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,
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))
478 DEF_LIB_BUILTIN(BUILT_IN_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))
485 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
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,
495 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
496 : ATTR_PURE_NOTHROW_LIST)
497 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
500 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
501 : ATTR_PURE_NOTHROW_LIST)
502 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
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,
512 flag_errno_math ? ATTR_NOTHROW_LIST
513 : (flag_unsafe_math_optimizations
514 ? ATTR_CONST_NOTHROW_LIST
515 : ATTR_PURE_NOTHROW_LIST))
516 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
519 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
520 : ATTR_PURE_NOTHROW_LIST)
521 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF,
524 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
525 : ATTR_PURE_NOTHROW_LIST)
526 DEF_C99_C90RES_BUILTIN(BUILT_IN_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,
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))
540 DEF_C99_C90RES_BUILTIN(BUILT_IN_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))
547 DEF_C99_C90RES_BUILTIN(BUILT_IN_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,
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,
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,
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,
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))
578 DEF_C99_C90RES_BUILTIN(BUILT_IN_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,
585 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
586 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
587 : ATTR_PURE_NOTHROW_LIST)
588 DEF_C99_C90RES_BUILTIN(BUILT_IN_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,
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))
602 DEF_C99_C90RES_BUILTIN(BUILT_IN_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))
610 DEF_GCC_BUILTIN(BUILT_IN_INF,
613 ATTR_CONST_NOTHROW_LIST)
614 DEF_GCC_BUILTIN(BUILT_IN_INFF,
617 ATTR_CONST_NOTHROW_LIST)
618 DEF_GCC_BUILTIN(BUILT_IN_INFL,
621 ATTR_CONST_NOTHROW_LIST)
623 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
624 "__builtin_huge_val",
626 ATTR_CONST_NOTHROW_LIST)
627 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
628 "__builtin_huge_valf",
630 ATTR_CONST_NOTHROW_LIST)
631 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
632 "__builtin_huge_vall",
634 ATTR_CONST_NOTHROW_LIST)
636 DEF_LIB_BUILTIN(BUILT_IN_NAN,
638 BT_FN_DOUBLE_CONST_STRING,
639 ATTR_CONST_NOTHROW_NONNULL_1)
640 DEF_LIB_BUILTIN(BUILT_IN_NANF,
642 BT_FN_FLOAT_CONST_STRING,
643 ATTR_CONST_NOTHROW_NONNULL_1)
644 DEF_LIB_BUILTIN(BUILT_IN_NANL,
646 BT_FN_LONG_DOUBLE_CONST_STRING,
647 ATTR_CONST_NOTHROW_NONNULL_1)
649 DEF_LIB_BUILTIN(BUILT_IN_NANS,
651 BT_FN_DOUBLE_CONST_STRING,
652 ATTR_CONST_NOTHROW_NONNULL_1)
653 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
655 BT_FN_FLOAT_CONST_STRING,
656 ATTR_CONST_NOTHROW_NONNULL_1)
657 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
659 BT_FN_LONG_DOUBLE_CONST_STRING,
660 ATTR_CONST_NOTHROW_NONNULL_1)
662 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
663 "__builtin_saveregs",
666 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
667 "__builtin_classify_type",
670 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
671 "__builtin_next_arg",
674 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
675 "__builtin_args_info",
678 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
679 "__builtin_constant_p",
681 ATTR_CONST_NOTHROW_LIST)
682 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
683 "__builtin_frame_address",
686 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
687 "__builtin_return_address",
690 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
691 "__builtin_aggregate_incoming_address",
694 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
695 "__builtin_apply_args",
698 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
700 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
702 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
705 ATTR_NORETURN_NOTHROW_LIST)
706 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
710 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
713 ATTR_NORETURN_NOTHROW_LIST)
714 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
717 ATTR_NORETURN_NOTHROW_LIST)
718 DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
719 "__builtin_prefetch",
720 BT_FN_VOID_CONST_PTR_VAR,
723 /* stdio.h builtins (without FILE *). */
725 DEF_LIB_BUILTIN(BUILT_IN_PRINTF,
727 BT_FN_INT_CONST_STRING_VAR,
728 ATTR_FORMAT_PRINTF_1_2)
729 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
733 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
735 BT_FN_INT_CONST_STRING,
736 ATTR_NOTHROW_NONNULL_1)
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,
743 BT_FN_INT_STRING_CONST_STRING_VAR,
744 ATTR_FORMAT_PRINTF_2_3)
745 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
747 BT_FN_INT_CONST_STRING_VAR,
748 ATTR_FORMAT_SCANF_1_2)
749 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
751 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
752 ATTR_FORMAT_SCANF_2_3)
753 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
755 BT_FN_INT_CONST_STRING_VALIST_ARG,
756 ATTR_FORMAT_PRINTF_1_0)
757 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
759 BT_FN_INT_CONST_STRING_VALIST_ARG,
760 ATTR_FORMAT_SCANF_1_0)
761 DEF_C99_BUILTIN(BUILT_IN_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)
775 /* stdio.h builtins (with FILE *). */
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. */
782 DEF_LIB_BUILTIN(BUILT_IN_FPUTC,
785 ATTR_NOTHROW_NONNULL_2)
786 DEF_LIB_BUILTIN(BUILT_IN_FPUTS,
788 BT_FN_INT_CONST_STRING_PTR,
789 ATTR_NOTHROW_NONNULL_1_2)
790 DEF_LIB_BUILTIN(BUILT_IN_FWRITE,
792 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
793 ATTR_NOTHROW_NONNULL_1_4)
794 DEF_LIB_BUILTIN(BUILT_IN_FPRINTF,
796 BT_FN_INT_PTR_CONST_STRING_VAR,
797 ATTR_FORMAT_PRINTF_2_3)
799 /* stdio unlocked builtins (without FILE *). */
801 DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
802 "__builtin_putchar_unlocked",
805 DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
806 "__builtin_puts_unlocked",
807 BT_FN_INT_CONST_STRING,
808 ATTR_NOTHROW_NONNULL_1)
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)
814 /* stdio unlocked builtins (with FILE *). */
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. */
821 DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
822 "__builtin_fputc_unlocked",
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)
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)
838 /* ISO C99 floating point unordered comparisons. */
839 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
840 "__builtin_isgreater",
842 ATTR_CONST_NOTHROW_LIST)
843 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
844 "__builtin_isgreaterequal",
846 ATTR_CONST_NOTHROW_LIST)
847 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
850 ATTR_CONST_NOTHROW_LIST)
851 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
852 "__builtin_islessequal",
854 ATTR_CONST_NOTHROW_LIST)
855 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
856 "__builtin_islessgreater",
858 ATTR_CONST_NOTHROW_LIST)
859 DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
860 "__builtin_isunordered",
862 ATTR_CONST_NOTHROW_LIST)
864 /* Various hooks for the DWARF 2 __throw routine. */
865 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
866 "__builtin_unwind_init",
869 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
870 "__builtin_dwarf_cfa",
873 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
874 "__builtin_dwarf_sp_column",
877 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
878 "__builtin_init_dwarf_reg_size_table",
881 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
882 "__builtin_frob_return_addr",
885 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
886 "__builtin_extract_return_addr",
889 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
890 "__builtin_eh_return",
891 BT_FN_VOID_PTRMODE_PTR,
892 ATTR_NORETURN_NOTHROW_LIST)
893 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
894 "__builtin_eh_return_data_regno",
898 /* Variable argument list (stdarg.h) support */
899 DEF_GCC_BUILTIN(BUILT_IN_VA_START,
900 "__builtin_va_start",
901 BT_FN_VOID_VALIST_REF_VAR,
903 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
904 "__builtin_stdarg_start",
905 BT_FN_VOID_VALIST_REF_VAR,
907 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
909 BT_FN_VOID_VALIST_REF,
911 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
913 BT_FN_VOID_VALIST_REF_VALIST_ARG,
916 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
918 BT_FN_LONG_LONG_LONG,
921 /* Declare abort, exit, _exit and _Exit */
922 DEF_LIB_BUILTIN(BUILT_IN_ABORT,
925 ATTR_NORETURN_NOTHROW_LIST)
926 DEF_LIB_BUILTIN(BUILT_IN_EXIT,
929 ATTR_NORETURN_NOTHROW_LIST)
930 DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
933 ATTR_NORETURN_NOTHROW_LIST)
934 DEF_C99_BUILTIN(BUILT_IN__EXIT2,
937 ATTR_NORETURN_NOTHROW_LIST)
939 /* Declare malloc, calloc and strdup. */
940 DEF_LIB_BUILTIN(BUILT_IN_MALLOC,
943 ATTR_MALLOC_NOTHROW_LIST)
945 DEF_LIB_BUILTIN(BUILT_IN_CALLOC,
948 ATTR_MALLOC_NOTHROW_LIST)
950 DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP,
952 BT_FN_STRING_CONST_STRING,
953 ATTR_MALLOC_NOTHROW_NONNULL_1)