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)
74 /* A fallback builtin is a builtin (like __builtin_puts) that falls
75 back to the corresopnding library function if necessary -- but
76 for which we should not introduce the non-`__builtin' variant of
78 #undef DEF_FALLBACK_BUILTIN
79 #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
80 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
81 false, true, false, ATTRS, true)
83 /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
84 is specified by ANSI/ISO C. So, when we're being fully conformant
85 we ignore the version of these builtins that does not begin with
87 #undef DEF_EXT_FALLBACK_BUILTIN
88 #define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
89 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
90 false, true, true, ATTRS, true)
92 /* A library builtin (like __builtin_strchr) is a builtin equivalent
93 of an ANSI/ISO standard library function. In addition to the
94 `__builtin' version, we will create an ordinary version (e.g,
95 `strchr') as well. If we cannot compute the answer using the
96 builtin function, we will fall back to the standard library
98 #undef DEF_LIB_BUILTIN
99 #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
100 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
101 true, true, false, ATTRS, true)
103 /* Like DEF_LIB_BUILTIN, except that the function is not one that is
104 specified by ANSI/ISO C. So, when we're being fully conformant we
105 ignore the version of these builtins that does not begin with
107 #undef DEF_EXT_LIB_BUILTIN
108 #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
109 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
110 true, true, true, ATTRS, false)
112 /* Like DEF_LIB_BUILTIN, except that the function is only a part of
113 the standard in C99 or above. */
114 #undef DEF_C99_BUILTIN
115 #define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
116 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
117 true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
119 /* Builtin that is specified by C99 and C90 reserve the name for future use.
120 We can still recognize the builtin in C90 mode but we can't produce it
122 #undef DEF_C99_C90RES_BUILTIN
123 #define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
124 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
125 true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
127 /* Like DEF_LIB_BUILTIN, except that the function is expanded in the
129 #undef DEF_FRONT_END_LIB_BUILTIN
130 #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
131 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
132 true, true, false, ATTRS, true)
134 /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
135 that is specified by ANSI/ISO C. So, when we're being fully
136 conformant we ignore the version of these builtins that does not
137 begin with __builtin. */
138 #undef DEF_EXT_FRONT_END_LIB_BUILTIN
139 #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
140 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
141 true, true, true, ATTRS, true)
143 /* If SMALL_STACK is defined, then `alloca' is only defined in its
146 DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
149 ATTR_MALLOC_NOTHROW_LIST)
151 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
154 ATTR_MALLOC_NOTHROW_LIST)
157 DEF_LIB_BUILTIN(BUILT_IN_ABS,
160 ATTR_CONST_NOTHROW_LIST)
161 DEF_LIB_BUILTIN(BUILT_IN_LABS,
164 ATTR_CONST_NOTHROW_LIST)
166 DEF_LIB_BUILTIN(BUILT_IN_FABS,
169 ATTR_CONST_NOTHROW_LIST)
170 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
173 ATTR_CONST_NOTHROW_LIST)
174 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
176 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
177 ATTR_CONST_NOTHROW_LIST)
179 DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
182 ATTR_CONST_NOTHROW_LIST)
183 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF,
186 ATTR_CONST_NOTHROW_LIST)
187 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL,
189 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
190 ATTR_CONST_NOTHROW_LIST)
192 DEF_LIB_BUILTIN(BUILT_IN_CEIL,
195 ATTR_CONST_NOTHROW_LIST)
196 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF,
199 ATTR_CONST_NOTHROW_LIST)
200 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL,
202 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
203 ATTR_CONST_NOTHROW_LIST)
205 DEF_C99_BUILTIN(BUILT_IN_ROUND,
208 ATTR_CONST_NOTHROW_LIST)
209 DEF_C99_BUILTIN(BUILT_IN_ROUNDF,
212 ATTR_CONST_NOTHROW_LIST)
213 DEF_C99_BUILTIN(BUILT_IN_ROUNDL,
215 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
216 ATTR_CONST_NOTHROW_LIST)
218 DEF_C99_BUILTIN(BUILT_IN_TRUNC,
221 ATTR_CONST_NOTHROW_LIST)
222 DEF_C99_BUILTIN(BUILT_IN_TRUNCF,
225 ATTR_CONST_NOTHROW_LIST)
226 DEF_C99_BUILTIN(BUILT_IN_TRUNCL,
228 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
229 ATTR_CONST_NOTHROW_LIST)
231 DEF_C99_BUILTIN(BUILT_IN_NEARBYINT,
232 "__builtin_nearbyint",
234 ATTR_CONST_NOTHROW_LIST)
235 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF,
236 "__builtin_nearbyintf",
238 ATTR_CONST_NOTHROW_LIST)
239 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL,
240 "__builtin_nearbyintl",
241 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
242 ATTR_CONST_NOTHROW_LIST)
244 DEF_C99_BUILTIN(BUILT_IN_LLABS,
246 BT_FN_LONGLONG_LONGLONG,
247 ATTR_CONST_NOTHROW_LIST)
248 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
251 ATTR_CONST_NOTHROW_LIST)
252 DEF_C99_BUILTIN(BUILT_IN_CONJ,
254 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
255 ATTR_CONST_NOTHROW_LIST)
256 DEF_C99_BUILTIN(BUILT_IN_CONJF,
258 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
259 ATTR_CONST_NOTHROW_LIST)
260 DEF_C99_BUILTIN(BUILT_IN_CONJL,
262 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
263 ATTR_CONST_NOTHROW_LIST)
264 DEF_C99_BUILTIN(BUILT_IN_CREAL,
266 BT_FN_DOUBLE_COMPLEX_DOUBLE,
267 ATTR_CONST_NOTHROW_LIST)
268 DEF_C99_BUILTIN(BUILT_IN_CREALF,
270 BT_FN_FLOAT_COMPLEX_FLOAT,
271 ATTR_CONST_NOTHROW_LIST)
272 DEF_C99_BUILTIN(BUILT_IN_CREALL,
274 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
275 ATTR_CONST_NOTHROW_LIST)
276 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
278 BT_FN_DOUBLE_COMPLEX_DOUBLE,
279 ATTR_CONST_NOTHROW_LIST)
280 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
282 BT_FN_FLOAT_COMPLEX_FLOAT,
283 ATTR_CONST_NOTHROW_LIST)
284 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
286 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
287 ATTR_CONST_NOTHROW_LIST)
289 /* The system prototypes for `bzero', 'bcopy' and `bcmp' functions
290 have many variations, so don't specify parameters to avoid
291 conflicts. The expand_* functions check the argument types anyway.
292 In addition, these functions have traditionally accepted NULL
293 pointers when the length parameter is zero, so don't apply
294 attribute "nonnull". */
295 DEF_BUILTIN (BUILT_IN_BZERO,
301 ATTR_NOTHROW_LIST, false)
302 DEF_BUILTIN (BUILT_IN_BCOPY,
305 BT_FN_VOID_CONST_PTR_PTR_SIZE,
308 ATTR_NOTHROW_LIST, false)
309 DEF_BUILTIN (BUILT_IN_BCMP,
312 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
315 ATTR_PURE_NOTHROW_LIST, false)
317 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
320 ATTR_CONST_NOTHROW_LIST)
321 DEF_GCC_BUILTIN(BUILT_IN_CLZ,
324 ATTR_CONST_NOTHROW_LIST)
325 DEF_GCC_BUILTIN(BUILT_IN_CTZ,
328 ATTR_CONST_NOTHROW_LIST)
329 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT,
330 "__builtin_popcount",
332 ATTR_CONST_NOTHROW_LIST)
333 DEF_GCC_BUILTIN(BUILT_IN_PARITY,
336 ATTR_CONST_NOTHROW_LIST)
338 DEF_GCC_BUILTIN(BUILT_IN_FFSL,
341 ATTR_CONST_NOTHROW_LIST)
342 DEF_GCC_BUILTIN(BUILT_IN_CLZL,
345 ATTR_CONST_NOTHROW_LIST)
346 DEF_GCC_BUILTIN(BUILT_IN_CTZL,
349 ATTR_CONST_NOTHROW_LIST)
350 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL,
351 "__builtin_popcountl",
353 ATTR_CONST_NOTHROW_LIST)
354 DEF_GCC_BUILTIN(BUILT_IN_PARITYL,
357 ATTR_CONST_NOTHROW_LIST)
359 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL,
362 ATTR_CONST_NOTHROW_LIST)
363 DEF_GCC_BUILTIN(BUILT_IN_CLZLL,
366 ATTR_CONST_NOTHROW_LIST)
367 DEF_GCC_BUILTIN(BUILT_IN_CTZLL,
370 ATTR_CONST_NOTHROW_LIST)
371 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL,
372 "__builtin_popcountll",
374 ATTR_CONST_NOTHROW_LIST)
375 DEF_GCC_BUILTIN(BUILT_IN_PARITYLL,
376 "__builtin_parityll",
378 ATTR_CONST_NOTHROW_LIST)
380 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
382 BT_FN_STRING_CONST_STRING_INT,
383 ATTR_PURE_NOTHROW_NONNULL_1)
384 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
386 BT_FN_STRING_CONST_STRING_INT,
387 ATTR_PURE_NOTHROW_NONNULL_1)
389 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
391 BT_FN_PTR_PTR_CONST_PTR_SIZE,
392 ATTR_NOTHROW_NONNULL_1_2)
393 DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE,
395 BT_FN_PTR_PTR_CONST_PTR_SIZE,
396 ATTR_NOTHROW_NONNULL_1_2)
397 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
399 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
400 ATTR_PURE_NOTHROW_NONNULL_1_2)
401 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
403 BT_FN_PTR_PTR_INT_SIZE,
404 ATTR_NOTHROW_NONNULL_1)
405 DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY,
407 BT_FN_PTR_PTR_CONST_PTR_SIZE,
408 ATTR_NOTHROW_NONNULL_1_2)
410 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
412 BT_FN_STRING_STRING_CONST_STRING,
413 ATTR_NOTHROW_NONNULL_1_2)
414 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
416 BT_FN_STRING_STRING_CONST_STRING_SIZE,
417 ATTR_NOTHROW_NONNULL_1_2)
418 DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY,
420 BT_FN_STRING_STRING_CONST_STRING,
421 ATTR_NOTHROW_NONNULL_1_2)
422 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
424 BT_FN_STRING_STRING_CONST_STRING,
425 ATTR_NOTHROW_NONNULL_1_2)
426 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
428 BT_FN_STRING_STRING_CONST_STRING_SIZE,
429 ATTR_NOTHROW_NONNULL_1_2)
430 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
432 BT_FN_INT_CONST_STRING_CONST_STRING,
433 ATTR_PURE_NOTHROW_NONNULL_1_2)
434 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
436 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
437 ATTR_PURE_NOTHROW_NONNULL_1_2)
438 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
440 BT_FN_SIZE_CONST_STRING,
441 ATTR_PURE_NOTHROW_NONNULL_1)
442 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
444 BT_FN_STRING_CONST_STRING_CONST_STRING,
445 ATTR_PURE_NOTHROW_NONNULL_1_2)
446 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
448 BT_FN_STRING_CONST_STRING_CONST_STRING,
449 ATTR_PURE_NOTHROW_NONNULL_1_2)
450 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
452 BT_FN_SIZE_CONST_STRING_CONST_STRING,
453 ATTR_PURE_NOTHROW_NONNULL_1_2)
454 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
456 BT_FN_SIZE_CONST_STRING_CONST_STRING,
457 ATTR_PURE_NOTHROW_NONNULL_1_2)
458 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
460 BT_FN_STRING_CONST_STRING_INT,
461 ATTR_PURE_NOTHROW_NONNULL_1)
462 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
464 BT_FN_STRING_CONST_STRING_INT,
465 ATTR_PURE_NOTHROW_NONNULL_1)
467 DEF_LIB_BUILTIN(BUILT_IN_SQRT,
470 flag_errno_math ? ATTR_NOTHROW_LIST
471 : (flag_unsafe_math_optimizations
472 ? ATTR_CONST_NOTHROW_LIST
473 : ATTR_PURE_NOTHROW_LIST))
474 DEF_LIB_BUILTIN(BUILT_IN_SIN,
477 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
478 : ATTR_PURE_NOTHROW_LIST)
479 DEF_LIB_BUILTIN(BUILT_IN_COS,
482 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
483 : ATTR_PURE_NOTHROW_LIST)
484 DEF_LIB_BUILTIN(BUILT_IN_EXP,
487 flag_errno_math ? ATTR_NOTHROW_LIST
488 : (flag_unsafe_math_optimizations
489 ? ATTR_CONST_NOTHROW_LIST
490 : ATTR_PURE_NOTHROW_LIST))
491 DEF_LIB_BUILTIN(BUILT_IN_LOG,
494 flag_errno_math ? ATTR_NOTHROW_LIST
495 : (flag_unsafe_math_optimizations
496 ? ATTR_CONST_NOTHROW_LIST
497 : ATTR_PURE_NOTHROW_LIST))
498 DEF_LIB_BUILTIN(BUILT_IN_TAN,
501 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
502 : ATTR_PURE_NOTHROW_LIST)
503 DEF_LIB_BUILTIN(BUILT_IN_ATAN,
506 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
507 : ATTR_PURE_NOTHROW_LIST)
508 DEF_LIB_BUILTIN(BUILT_IN_POW,
510 BT_FN_DOUBLE_DOUBLE_DOUBLE,
511 flag_errno_math ? ATTR_NOTHROW_LIST
512 : (flag_unsafe_math_optimizations
513 ? ATTR_CONST_NOTHROW_LIST
514 : ATTR_PURE_NOTHROW_LIST))
515 DEF_LIB_BUILTIN(BUILT_IN_ATAN2,
517 BT_FN_DOUBLE_DOUBLE_DOUBLE,
518 flag_errno_math ? ATTR_NOTHROW_LIST
519 : (flag_unsafe_math_optimizations
520 ? ATTR_CONST_NOTHROW_LIST
521 : ATTR_PURE_NOTHROW_LIST))
522 DEF_LIB_BUILTIN(BUILT_IN_FMOD,
524 BT_FN_DOUBLE_DOUBLE_DOUBLE,
525 flag_errno_math ? ATTR_NOTHROW_LIST
526 : (flag_unsafe_math_optimizations
527 ? ATTR_CONST_NOTHROW_LIST
528 : ATTR_PURE_NOTHROW_LIST))
529 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
532 flag_errno_math ? ATTR_NOTHROW_LIST
533 : (flag_unsafe_math_optimizations
534 ? ATTR_CONST_NOTHROW_LIST
535 : ATTR_PURE_NOTHROW_LIST))
536 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
539 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
540 : ATTR_PURE_NOTHROW_LIST)
541 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
544 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
545 : ATTR_PURE_NOTHROW_LIST)
546 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
549 flag_errno_math ? ATTR_NOTHROW_LIST
550 : (flag_unsafe_math_optimizations
551 ? ATTR_CONST_NOTHROW_LIST
552 : ATTR_PURE_NOTHROW_LIST))
553 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
556 flag_errno_math ? ATTR_NOTHROW_LIST
557 : (flag_unsafe_math_optimizations
558 ? ATTR_CONST_NOTHROW_LIST
559 : ATTR_PURE_NOTHROW_LIST))
560 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
563 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
564 : ATTR_PURE_NOTHROW_LIST)
565 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF,
568 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
569 : ATTR_PURE_NOTHROW_LIST)
570 DEF_C99_C90RES_BUILTIN(BUILT_IN_POWF,
572 BT_FN_FLOAT_FLOAT_FLOAT,
573 flag_errno_math ? ATTR_NOTHROW_LIST
574 : (flag_unsafe_math_optimizations
575 ? ATTR_CONST_NOTHROW_LIST
576 : ATTR_PURE_NOTHROW_LIST))
577 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2F,
579 BT_FN_FLOAT_FLOAT_FLOAT,
580 flag_errno_math ? ATTR_NOTHROW_LIST
581 : (flag_unsafe_math_optimizations
582 ? ATTR_CONST_NOTHROW_LIST
583 : ATTR_PURE_NOTHROW_LIST))
584 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF,
586 BT_FN_FLOAT_FLOAT_FLOAT,
587 flag_errno_math ? ATTR_NOTHROW_LIST
588 : (flag_unsafe_math_optimizations
589 ? ATTR_CONST_NOTHROW_LIST
590 : ATTR_PURE_NOTHROW_LIST))
591 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
593 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
594 flag_errno_math ? ATTR_NOTHROW_LIST
595 : (flag_unsafe_math_optimizations
596 ? ATTR_CONST_NOTHROW_LIST
597 : ATTR_PURE_NOTHROW_LIST))
598 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
600 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
601 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
602 : ATTR_PURE_NOTHROW_LIST)
603 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
605 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
606 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
607 : ATTR_PURE_NOTHROW_LIST)
608 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
610 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
611 flag_errno_math ? ATTR_NOTHROW_LIST
612 : (flag_unsafe_math_optimizations
613 ? ATTR_CONST_NOTHROW_LIST
614 : ATTR_PURE_NOTHROW_LIST))
615 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
617 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
618 flag_errno_math ? ATTR_NOTHROW_LIST
619 : (flag_unsafe_math_optimizations
620 ? ATTR_CONST_NOTHROW_LIST
621 : ATTR_PURE_NOTHROW_LIST))
622 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
624 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
625 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
626 : ATTR_PURE_NOTHROW_LIST)
627 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL,
629 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
630 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
631 : ATTR_PURE_NOTHROW_LIST)
632 DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL,
634 BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
635 flag_errno_math ? ATTR_NOTHROW_LIST
636 : (flag_unsafe_math_optimizations
637 ? ATTR_CONST_NOTHROW_LIST
638 : ATTR_PURE_NOTHROW_LIST))
639 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L,
641 BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
642 flag_errno_math ? ATTR_NOTHROW_LIST
643 : (flag_unsafe_math_optimizations
644 ? ATTR_CONST_NOTHROW_LIST
645 : ATTR_PURE_NOTHROW_LIST))
646 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL,
648 BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
649 flag_errno_math ? ATTR_NOTHROW_LIST
650 : (flag_unsafe_math_optimizations
651 ? ATTR_CONST_NOTHROW_LIST
652 : ATTR_PURE_NOTHROW_LIST))
654 DEF_GCC_BUILTIN(BUILT_IN_INF,
657 ATTR_CONST_NOTHROW_LIST)
658 DEF_GCC_BUILTIN(BUILT_IN_INFF,
661 ATTR_CONST_NOTHROW_LIST)
662 DEF_GCC_BUILTIN(BUILT_IN_INFL,
665 ATTR_CONST_NOTHROW_LIST)
667 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
668 "__builtin_huge_val",
670 ATTR_CONST_NOTHROW_LIST)
671 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
672 "__builtin_huge_valf",
674 ATTR_CONST_NOTHROW_LIST)
675 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
676 "__builtin_huge_vall",
678 ATTR_CONST_NOTHROW_LIST)
680 DEF_LIB_BUILTIN(BUILT_IN_NAN,
682 BT_FN_DOUBLE_CONST_STRING,
683 ATTR_CONST_NOTHROW_NONNULL_1)
684 DEF_LIB_BUILTIN(BUILT_IN_NANF,
686 BT_FN_FLOAT_CONST_STRING,
687 ATTR_CONST_NOTHROW_NONNULL_1)
688 DEF_LIB_BUILTIN(BUILT_IN_NANL,
690 BT_FN_LONG_DOUBLE_CONST_STRING,
691 ATTR_CONST_NOTHROW_NONNULL_1)
693 DEF_LIB_BUILTIN(BUILT_IN_NANS,
695 BT_FN_DOUBLE_CONST_STRING,
696 ATTR_CONST_NOTHROW_NONNULL_1)
697 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
699 BT_FN_FLOAT_CONST_STRING,
700 ATTR_CONST_NOTHROW_NONNULL_1)
701 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
703 BT_FN_LONG_DOUBLE_CONST_STRING,
704 ATTR_CONST_NOTHROW_NONNULL_1)
706 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
707 "__builtin_saveregs",
710 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
711 "__builtin_classify_type",
714 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
715 "__builtin_next_arg",
718 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
719 "__builtin_args_info",
722 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
723 "__builtin_constant_p",
725 ATTR_CONST_NOTHROW_LIST)
726 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
727 "__builtin_frame_address",
730 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
731 "__builtin_return_address",
734 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
735 "__builtin_aggregate_incoming_address",
738 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
739 "__builtin_apply_args",
742 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
744 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
746 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
749 ATTR_NORETURN_NOTHROW_LIST)
750 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
754 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
757 ATTR_NORETURN_NOTHROW_LIST)
758 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
761 ATTR_NORETURN_NOTHROW_LIST)
762 DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
763 "__builtin_prefetch",
764 BT_FN_VOID_CONST_PTR_VAR,
767 /* stdio.h builtins (without FILE *). */
769 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
771 BT_FN_INT_CONST_STRING_VAR,
772 ATTR_FORMAT_PRINTF_1_2)
773 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
777 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
779 BT_FN_INT_CONST_STRING,
780 ATTR_NOTHROW_NONNULL_1)
781 DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
782 "__builtin_snprintf",
783 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
784 ATTR_FORMAT_PRINTF_3_4)
785 DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
787 BT_FN_INT_STRING_CONST_STRING_VAR,
788 ATTR_FORMAT_PRINTF_2_3)
789 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
791 BT_FN_INT_CONST_STRING_VAR,
792 ATTR_FORMAT_SCANF_1_2)
793 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
795 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
796 ATTR_FORMAT_SCANF_2_3)
797 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
799 BT_FN_INT_CONST_STRING_VALIST_ARG,
800 ATTR_FORMAT_PRINTF_1_0)
801 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
803 BT_FN_INT_CONST_STRING_VALIST_ARG,
804 ATTR_FORMAT_SCANF_1_0)
805 DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
807 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
808 ATTR_FORMAT_SCANF_2_0)
809 DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
810 "__builtin_vsnprintf",
811 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
812 ATTR_FORMAT_PRINTF_3_0)
813 DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
814 "__builtin_vsprintf",
815 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
816 ATTR_FORMAT_PRINTF_2_0)
819 /* stdio.h builtins (with FILE *). */
821 /* Declare the __builtin_ style with arguments and the regular style
822 without them. We rely on stdio.h to supply the arguments for the
823 regular style declaration since we had to use void* instead of
824 FILE* in the __builtin_ prototype supplied here. */
826 DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
829 ATTR_NOTHROW_NONNULL_2)
830 DEF_BUILTIN (BUILT_IN_FPUTS,
833 BT_FN_INT_CONST_STRING_PTR,
835 true, true, false, ATTR_NOTHROW_NONNULL_1_2, true)
836 DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
838 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
839 ATTR_NOTHROW_NONNULL_1_4)
840 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
842 BT_FN_INT_PTR_CONST_STRING_VAR,
843 ATTR_FORMAT_PRINTF_2_3)
845 /* stdio unlocked builtins (without FILE *). */
847 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
848 "__builtin_putchar_unlocked",
849 BT_FN_INT_INT, ATTR_NOTHROW_LIST)
850 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
851 "__builtin_puts_unlocked",
852 BT_FN_INT_CONST_STRING, ATTR_NOTHROW_NONNULL_1)
853 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
854 "__builtin_printf_unlocked",
855 BT_FN_INT_CONST_STRING_VAR,
856 ATTR_FORMAT_PRINTF_1_2)
858 /* stdio unlocked builtins (with FILE *). */
860 /* Declare the __builtin_ style with arguments and the regular style
861 without them. We rely on stdio.h to supply the arguments for the
862 regular style declaration since we had to use void* instead of
863 FILE* in the __builtin_ prototype supplied here. */
865 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
866 "__builtin_fputc_unlocked",
867 BT_FN_INT_INT_PTR, ATTR_NOTHROW_NONNULL_2)
868 DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
869 "__builtin_fputs_unlocked",
871 BT_FN_INT_CONST_STRING_PTR,
873 true, true, true, ATTR_NOTHROW_NONNULL_1_2, true)
874 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
875 "__builtin_fwrite_unlocked",
876 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, ATTR_NOTHROW_NONNULL_1_4)
877 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
878 "__builtin_fprintf_unlocked",
879 BT_FN_INT_PTR_CONST_STRING_VAR,
880 ATTR_FORMAT_PRINTF_2_3)
882 /* ISO C99 floating point unordered comparisons. */
883 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
884 "__builtin_isgreater",
886 ATTR_CONST_NOTHROW_LIST)
887 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
888 "__builtin_isgreaterequal",
890 ATTR_CONST_NOTHROW_LIST)
891 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
894 ATTR_CONST_NOTHROW_LIST)
895 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
896 "__builtin_islessequal",
898 ATTR_CONST_NOTHROW_LIST)
899 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
900 "__builtin_islessgreater",
902 ATTR_CONST_NOTHROW_LIST)
903 DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
904 "__builtin_isunordered",
906 ATTR_CONST_NOTHROW_LIST)
908 /* Various hooks for the DWARF 2 __throw routine. */
909 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
910 "__builtin_unwind_init",
913 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
914 "__builtin_dwarf_cfa",
917 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
918 "__builtin_dwarf_sp_column",
921 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
922 "__builtin_init_dwarf_reg_size_table",
925 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
926 "__builtin_frob_return_addr",
929 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
930 "__builtin_extract_return_addr",
933 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
934 "__builtin_eh_return",
935 BT_FN_VOID_PTRMODE_PTR,
936 ATTR_NORETURN_NOTHROW_LIST)
937 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
938 "__builtin_eh_return_data_regno",
942 /* Variable argument list (stdarg.h) support */
943 DEF_GCC_BUILTIN(BUILT_IN_VA_START,
944 "__builtin_va_start",
945 BT_FN_VOID_VALIST_REF_VAR,
947 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
948 "__builtin_stdarg_start",
949 BT_FN_VOID_VALIST_REF_VAR,
951 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
953 BT_FN_VOID_VALIST_REF,
955 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
957 BT_FN_VOID_VALIST_REF_VALIST_ARG,
960 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
962 BT_FN_LONG_LONG_LONG,
965 /* Declare abort, exit, _exit and _Exit */
966 DEF_LIB_BUILTIN(BUILT_IN_ABORT,
969 ATTR_NORETURN_NOTHROW_LIST)
970 DEF_LIB_BUILTIN(BUILT_IN_EXIT,
973 ATTR_NORETURN_NOTHROW_LIST)
974 DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
977 ATTR_NORETURN_NOTHROW_LIST)
978 DEF_C99_BUILTIN(BUILT_IN__EXIT2,
981 ATTR_NORETURN_NOTHROW_LIST)
983 /* Declare malloc, calloc and strdup. */
984 DEF_LIB_BUILTIN(BUILT_IN_MALLOC,
987 ATTR_MALLOC_NOTHROW_LIST)
989 DEF_LIB_BUILTIN(BUILT_IN_CALLOC,
992 ATTR_MALLOC_NOTHROW_LIST)
994 DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP,
996 BT_FN_STRING_CONST_STRING,
997 ATTR_MALLOC_NOTHROW_NONNULL_1)