1 /* This file contains the definitions and documentation for the
2 builtins used in the GNU compiler.
3 Copyright (C) 2000, 2001 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)
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 /* A GCC builtin (like __builtin_saveregs) is provided by the
59 compiler, but does not correspond to a function in the standard
61 #undef DEF_GCC_BUILTIN
62 #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
63 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \
64 false, false, false, ATTRS)
67 /* A fallback builtin is a builtin (like __builtin_puts) that falls
68 back to the corresopnding library function if necessary -- but
69 for which we should not introduce the non-`__builtin' variant of
71 #undef DEF_FALLBACK_BUILTIN
72 #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
73 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
74 false, true, false, ATTRS)
76 /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
77 is specified by ANSI/ISO C. So, when we're being fully conformant
78 we ignore the version of these builtins that does not begin with
80 #undef DEF_EXT_FALLBACK_BUILTIN
81 #define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \
82 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
83 false, true, true, ATTR_NOTHROW_LIST)
85 /* A library builtin (like __builtin_strchr) is a builtin equivalent
86 of an ANSI/ISO standard library function. In addition to the
87 `__builtin' version, we will create an ordinary version (e.g,
88 `strchr') as well. If we cannot compute the answer using the
89 builtin function, we will fall back to the standard library
91 #undef DEF_LIB_BUILTIN
92 #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
93 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
94 true, true, false, ATTRS)
96 /* Like DEF_LIB_BUILTIN, except that a call to the builtin should
97 never fall back to the library version. */
98 #undef DEF_LIB_ALWAYS_BUILTIN
99 #define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE) \
100 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
101 true, false, true, ATTR_CONST_NOTHROW_LIST)
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)
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)
119 /* Like DEF_LIB_BUILTIN, except that the function is expanded in the
121 #undef DEF_FRONT_END_LIB_BUILTIN
122 #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
123 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
124 true, true, false, ATTRS)
126 /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
127 that is specified by ANSI/ISO C. So, when we're being fully
128 conformant we ignore the version of these builtins that does not
129 begin with __builtin. */
130 #undef DEF_EXT_FRONT_END_LIB_BUILTIN
131 #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
132 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
133 true, true, true, ATTRS)
135 /* A built-in that is not currently used. */
136 #undef DEF_UNUSED_BUILTIN
137 #define DEF_UNUSED_BUILTIN(X) \
138 DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST, \
139 BT_LAST, false, false, false, ATTR_NOTHROW_LIST)
141 /* If SMALL_STACK is defined, then `alloca' is only defined in its
144 DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
147 ATTR_MALLOC_NOTHROW_LIST)
149 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
152 ATTR_MALLOC_NOTHROW_LIST)
155 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
158 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
162 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
165 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
168 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
170 BT_FN_LONG_DOUBLE_LONG_DOUBLE)
172 DEF_C99_BUILTIN(BUILT_IN_LLABS,
174 BT_FN_LONGLONG_LONGLONG,
176 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
180 DEF_C99_BUILTIN(BUILT_IN_CONJ,
182 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
184 DEF_C99_BUILTIN(BUILT_IN_CONJF,
186 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
188 DEF_C99_BUILTIN(BUILT_IN_CONJL,
190 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
192 DEF_C99_BUILTIN(BUILT_IN_CREAL,
194 BT_FN_DOUBLE_COMPLEX_DOUBLE,
196 DEF_C99_BUILTIN(BUILT_IN_CREALF,
198 BT_FN_FLOAT_COMPLEX_FLOAT,
200 DEF_C99_BUILTIN(BUILT_IN_CREALL,
202 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
204 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
206 BT_FN_DOUBLE_COMPLEX_DOUBLE,
208 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
210 BT_FN_FLOAT_COMPLEX_FLOAT,
212 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
214 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
217 DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
218 DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
219 DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
220 DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
221 DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
222 DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
224 /* The system prototypes for `bzero' and `bcmp' functions have many
225 variations, so don't specify parameters to avoid conflicts. The
226 expand_* functions check the argument types anyway. */
227 DEF_BUILTIN (BUILT_IN_BZERO,
234 DEF_BUILTIN (BUILT_IN_BCMP,
237 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
240 ATTR_PURE_NOTHROW_LIST)
242 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
245 ATTR_CONST_NOTHROW_LIST)
246 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
248 BT_FN_STRING_CONST_STRING_INT,
249 ATTR_PURE_NOTHROW_LIST)
250 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
252 BT_FN_STRING_CONST_STRING_INT,
253 ATTR_PURE_NOTHROW_LIST)
255 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
257 BT_FN_PTR_PTR_CONST_PTR_SIZE,
259 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
261 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
262 ATTR_PURE_NOTHROW_LIST)
263 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
265 BT_FN_PTR_PTR_INT_SIZE,
268 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
270 BT_FN_STRING_STRING_CONST_STRING,
272 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
274 BT_FN_STRING_STRING_CONST_STRING_SIZE,
276 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
278 BT_FN_STRING_STRING_CONST_STRING,
280 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
282 BT_FN_STRING_STRING_CONST_STRING_SIZE,
284 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
286 BT_FN_INT_CONST_STRING_CONST_STRING,
287 ATTR_PURE_NOTHROW_LIST)
288 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
290 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
291 ATTR_PURE_NOTHROW_LIST)
292 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
294 BT_FN_SIZE_CONST_STRING,
295 ATTR_PURE_NOTHROW_LIST)
296 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
298 BT_FN_STRING_CONST_STRING_CONST_STRING,
299 ATTR_PURE_NOTHROW_LIST)
300 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
302 BT_FN_STRING_CONST_STRING_CONST_STRING,
303 ATTR_PURE_NOTHROW_LIST)
304 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
306 BT_FN_SIZE_CONST_STRING_CONST_STRING,
307 ATTR_PURE_NOTHROW_LIST)
308 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
310 BT_FN_SIZE_CONST_STRING_CONST_STRING,
311 ATTR_PURE_NOTHROW_LIST)
312 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
314 BT_FN_STRING_CONST_STRING_INT,
315 ATTR_PURE_NOTHROW_LIST)
316 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
318 BT_FN_STRING_CONST_STRING_INT,
319 ATTR_PURE_NOTHROW_LIST)
321 DEF_LIB_BUILTIN(BUILT_IN_SQRT,
324 flag_errno_math ? ATTR_NOTHROW_LIST
325 : (flag_unsafe_math_optimizations
326 ? ATTR_CONST_NOTHROW_LIST
327 : ATTR_PURE_NOTHROW_LIST))
328 DEF_LIB_BUILTIN(BUILT_IN_SIN,
331 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
332 : ATTR_PURE_NOTHROW_LIST)
333 DEF_LIB_BUILTIN(BUILT_IN_COS,
336 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
337 : ATTR_PURE_NOTHROW_LIST)
338 DEF_LIB_BUILTIN(BUILT_IN_EXP,
341 flag_errno_math ? ATTR_NOTHROW_LIST
342 : (flag_unsafe_math_optimizations
343 ? ATTR_CONST_NOTHROW_LIST
344 : ATTR_PURE_NOTHROW_LIST))
345 DEF_LIB_BUILTIN(BUILT_IN_LOG,
348 flag_errno_math ? ATTR_NOTHROW_LIST
349 : (flag_unsafe_math_optimizations
350 ? ATTR_CONST_NOTHROW_LIST
351 : ATTR_PURE_NOTHROW_LIST))
352 DEF_LIB_BUILTIN(BUILT_IN_SQRTF,
355 flag_errno_math ? ATTR_NOTHROW_LIST
356 : (flag_unsafe_math_optimizations
357 ? ATTR_CONST_NOTHROW_LIST
358 : ATTR_PURE_NOTHROW_LIST))
359 DEF_LIB_BUILTIN(BUILT_IN_SINF,
362 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
363 : ATTR_PURE_NOTHROW_LIST)
364 DEF_LIB_BUILTIN(BUILT_IN_COSF,
367 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
368 : ATTR_PURE_NOTHROW_LIST)
369 DEF_LIB_BUILTIN(BUILT_IN_EXPF,
372 flag_errno_math ? ATTR_NOTHROW_LIST
373 : (flag_unsafe_math_optimizations
374 ? ATTR_CONST_NOTHROW_LIST
375 : ATTR_PURE_NOTHROW_LIST))
376 DEF_LIB_BUILTIN(BUILT_IN_LOGF,
379 flag_errno_math ? ATTR_NOTHROW_LIST
380 : (flag_unsafe_math_optimizations
381 ? ATTR_CONST_NOTHROW_LIST
382 : ATTR_PURE_NOTHROW_LIST))
383 DEF_LIB_BUILTIN(BUILT_IN_SQRTL,
385 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
386 flag_errno_math ? ATTR_NOTHROW_LIST
387 : (flag_unsafe_math_optimizations
388 ? ATTR_CONST_NOTHROW_LIST
389 : ATTR_PURE_NOTHROW_LIST))
390 DEF_LIB_BUILTIN(BUILT_IN_SINL,
392 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
393 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
394 : ATTR_PURE_NOTHROW_LIST)
395 DEF_LIB_BUILTIN(BUILT_IN_COSL,
397 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
398 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
399 : ATTR_PURE_NOTHROW_LIST)
400 DEF_LIB_BUILTIN(BUILT_IN_EXPL,
402 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
403 flag_errno_math ? ATTR_NOTHROW_LIST
404 : (flag_unsafe_math_optimizations
405 ? ATTR_CONST_NOTHROW_LIST
406 : ATTR_PURE_NOTHROW_LIST))
407 DEF_LIB_BUILTIN(BUILT_IN_LOGL,
409 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
410 flag_errno_math ? ATTR_NOTHROW_LIST
411 : (flag_unsafe_math_optimizations
412 ? ATTR_CONST_NOTHROW_LIST
413 : ATTR_PURE_NOTHROW_LIST))
415 DEF_GCC_BUILTIN(BUILT_IN_INF,
418 ATTR_CONST_NOTHROW_LIST)
419 DEF_GCC_BUILTIN(BUILT_IN_INFF,
422 ATTR_CONST_NOTHROW_LIST)
423 DEF_GCC_BUILTIN(BUILT_IN_INFL,
426 ATTR_CONST_NOTHROW_LIST)
428 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
429 "__builtin_huge_val",
431 ATTR_CONST_NOTHROW_LIST)
432 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
433 "__builtin_huge_valf",
435 ATTR_CONST_NOTHROW_LIST)
436 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
437 "__builtin_huge_vall",
439 ATTR_CONST_NOTHROW_LIST)
441 DEF_LIB_BUILTIN(BUILT_IN_NAN,
443 BT_FN_DOUBLE_CONST_STRING,
444 ATTR_CONST_NOTHROW_LIST)
445 DEF_LIB_BUILTIN(BUILT_IN_NANF,
447 BT_FN_FLOAT_CONST_STRING,
448 ATTR_CONST_NOTHROW_LIST)
449 DEF_LIB_BUILTIN(BUILT_IN_NANL,
451 BT_FN_LONG_DOUBLE_CONST_STRING,
452 ATTR_CONST_NOTHROW_LIST)
454 DEF_LIB_BUILTIN(BUILT_IN_NANS,
456 BT_FN_DOUBLE_CONST_STRING,
457 ATTR_CONST_NOTHROW_LIST)
458 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
460 BT_FN_FLOAT_CONST_STRING,
461 ATTR_CONST_NOTHROW_LIST)
462 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
464 BT_FN_LONG_DOUBLE_CONST_STRING,
465 ATTR_CONST_NOTHROW_LIST)
467 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
468 "__builtin_saveregs",
471 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
472 "__builtin_classify_type",
475 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
476 "__builtin_next_arg",
479 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
480 "__builtin_args_info",
483 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
484 "__builtin_constant_p",
487 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
488 "__builtin_frame_address",
491 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
492 "__builtin_return_address",
495 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
496 "__builtin_aggregate_incoming_address",
499 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
500 "__builtin_apply_args",
503 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
505 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
507 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
510 ATTR_NORETURN_NOTHROW_LIST)
511 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
515 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
518 ATTR_NORETURN_NOTHROW_LIST)
519 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
522 ATTR_NORETURN_NOTHROW_LIST)
523 DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
524 "__builtin_prefetch",
525 BT_FN_VOID_CONST_PTR_VAR,
528 /* stdio.h builtins (without FILE *). */
530 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
532 BT_FN_INT_CONST_STRING_VAR,
533 ATTR_FORMAT_PRINTF_1_2)
534 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
538 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
540 BT_FN_INT_CONST_STRING,
542 DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
543 "__builtin_snprintf",
544 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
545 ATTR_FORMAT_PRINTF_3_4)
546 DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
548 BT_FN_INT_STRING_CONST_STRING_VAR,
549 ATTR_FORMAT_PRINTF_2_3)
550 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
552 BT_FN_INT_CONST_STRING_VAR,
553 ATTR_FORMAT_SCANF_1_2)
554 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
556 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
557 ATTR_FORMAT_SCANF_2_3)
558 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
560 BT_FN_INT_CONST_STRING_VALIST_ARG,
561 ATTR_FORMAT_PRINTF_1_0)
562 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
564 BT_FN_INT_CONST_STRING_VALIST_ARG,
565 ATTR_FORMAT_SCANF_1_0)
566 DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
568 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
569 ATTR_FORMAT_SCANF_2_0)
570 DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
571 "__builtin_vsnprintf",
572 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
573 ATTR_FORMAT_PRINTF_3_0)
574 DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
575 "__builtin_vsprintf",
576 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
577 ATTR_FORMAT_PRINTF_2_0)
580 /* stdio.h builtins (with FILE *). */
582 /* Declare the __builtin_ style with arguments and the regular style
583 without them. We rely on stdio.h to supply the arguments for the
584 regular style declaration since we had to use void* instead of
585 FILE* in the __builtin_ prototype supplied here. */
587 DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
591 DEF_BUILTIN (BUILT_IN_FPUTS,
594 BT_FN_INT_CONST_STRING_PTR,
596 true, true, false, ATTR_NOTHROW_LIST)
597 DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
599 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
601 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
603 BT_FN_INT_PTR_CONST_STRING_VAR,
604 ATTR_FORMAT_PRINTF_2_3)
606 /* stdio unlocked builtins (without FILE *). */
608 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
609 "__builtin_putchar_unlocked",
611 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
612 "__builtin_puts_unlocked",
613 BT_FN_INT_CONST_STRING)
614 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
615 "__builtin_printf_unlocked",
616 BT_FN_INT_CONST_STRING_VAR,
617 ATTR_FORMAT_PRINTF_1_2)
619 /* stdio unlocked builtins (with FILE *). */
621 /* Declare the __builtin_ style with arguments and the regular style
622 without them. We rely on stdio.h to supply the arguments for the
623 regular style declaration since we had to use void* instead of
624 FILE* in the __builtin_ prototype supplied here. */
626 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
627 "__builtin_fputc_unlocked",
629 DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
630 "__builtin_fputs_unlocked",
632 BT_FN_INT_CONST_STRING_PTR,
634 true, true, true, ATTR_NOTHROW_LIST)
635 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
636 "__builtin_fwrite_unlocked",
637 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
638 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
639 "__builtin_fprintf_unlocked",
640 BT_FN_INT_PTR_CONST_STRING_VAR,
641 ATTR_FORMAT_PRINTF_2_3)
643 /* ISO C99 floating point unordered comparisons. */
644 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
645 "__builtin_isgreater",
647 ATTR_CONST_NOTHROW_LIST)
648 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
649 "__builtin_isgreaterequal",
651 ATTR_CONST_NOTHROW_LIST)
652 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
655 ATTR_CONST_NOTHROW_LIST)
656 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
657 "__builtin_islessequal",
659 ATTR_CONST_NOTHROW_LIST)
660 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
661 "__builtin_islessgreater",
663 ATTR_CONST_NOTHROW_LIST)
664 DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
665 "__builtin_isunordered",
667 ATTR_CONST_NOTHROW_LIST)
669 /* Various hooks for the DWARF 2 __throw routine. */
670 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
671 "__builtin_unwind_init",
674 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
675 "__builtin_dwarf_cfa",
678 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
679 "__builtin_dwarf_sp_column",
682 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
683 "__builtin_init_dwarf_reg_size_table",
686 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
687 "__builtin_frob_return_addr",
690 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
691 "__builtin_extract_return_addr",
694 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
695 "__builtin_eh_return",
696 BT_FN_VOID_PTRMODE_PTR,
697 ATTR_NORETURN_NOTHROW_LIST)
698 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
699 "__builtin_eh_return_data_regno",
703 /* Variable argument list (stdarg.h) support */
704 DEF_GCC_BUILTIN(BUILT_IN_VA_START,
705 "__builtin_va_start",
706 BT_FN_VOID_VALIST_REF_VAR,
708 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
709 "__builtin_stdarg_start",
710 BT_FN_VOID_VALIST_REF_VAR,
712 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
714 BT_FN_VOID_VALIST_REF,
716 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
718 BT_FN_VOID_VALIST_REF_VALIST_ARG,
721 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
723 BT_FN_LONG_LONG_LONG,
727 DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
728 DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
729 DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
730 DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
732 /* Declare abort, exit, _exit and _Exit */
733 DEF_BUILTIN (BUILT_IN_ABORT,
739 ATTR_NORETURN_NOTHROW_LIST)
741 DEF_BUILTIN (BUILT_IN_EXIT,
747 ATTR_NORETURN_NOTHROW_LIST)
749 DEF_BUILTIN (BUILT_IN__EXIT,
755 ATTR_NORETURN_NOTHROW_LIST)
757 DEF_BUILTIN (BUILT_IN__EXIT2,
763 ATTR_NORETURN_NOTHROW_LIST)