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_LIB_BUILTIN(BUILT_IN_ABORT,
112 ATTR_NORETURN_NOTHROW_LIST)
114 DEF_LIB_BUILTIN(BUILT_IN_ABS,
117 ATTR_CONST_NOTHROW_LIST)
119 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
120 "__builtin_aggregate_incoming_address",
124 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
127 ATTR_MALLOC_NOTHROW_LIST)
129 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
131 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
134 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
135 "__builtin_apply_args",
139 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
140 "__builtin_args_info",
144 DEF_LIB_BUILTIN(BUILT_IN_ATAN,
147 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
148 : ATTR_PURE_NOTHROW_LIST)
150 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF,
153 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
154 : ATTR_PURE_NOTHROW_LIST)
156 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL,
158 BT_FN_LONGDOUBLE_LONGDOUBLE,
159 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
160 : ATTR_PURE_NOTHROW_LIST)
162 DEF_LIB_BUILTIN(BUILT_IN_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))
170 DEF_C99_C90RES_BUILTIN(BUILT_IN_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))
178 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L,
180 BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
181 flag_errno_math ? ATTR_NOTHROW_LIST
182 : (flag_unsafe_math_optimizations
183 ? ATTR_CONST_NOTHROW_LIST
184 : ATTR_PURE_NOTHROW_LIST))
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,
190 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
191 ATTR_PURE_NOTHROW_LIST)
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,
197 BT_FN_VOID_CONST_PTR_PTR_SIZE,
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,
207 DEF_C99_BUILTIN(BUILT_IN_CABS,
209 BT_FN_DOUBLE_COMPLEX_DOUBLE,
210 ATTR_CONST_NOTHROW_LIST)
212 DEF_C99_BUILTIN(BUILT_IN_CABSF,
214 BT_FN_FLOAT_COMPLEX_FLOAT,
215 ATTR_CONST_NOTHROW_LIST)
217 DEF_C99_BUILTIN(BUILT_IN_CABSL,
219 BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
220 ATTR_CONST_NOTHROW_LIST)
222 DEF_LIB_BUILTIN(BUILT_IN_CALLOC,
225 ATTR_MALLOC_NOTHROW_LIST)
227 DEF_LIB_BUILTIN(BUILT_IN_CEIL,
230 ATTR_CONST_NOTHROW_LIST)
232 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF,
235 ATTR_CONST_NOTHROW_LIST)
237 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL,
239 BT_FN_LONGDOUBLE_LONGDOUBLE,
240 ATTR_CONST_NOTHROW_LIST)
242 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
244 BT_FN_DOUBLE_COMPLEX_DOUBLE,
245 ATTR_CONST_NOTHROW_LIST)
247 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
249 BT_FN_FLOAT_COMPLEX_FLOAT,
250 ATTR_CONST_NOTHROW_LIST)
252 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
254 BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
255 ATTR_CONST_NOTHROW_LIST)
257 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
258 "__builtin_classify_type",
262 DEF_GCC_BUILTIN(BUILT_IN_CLZ,
265 ATTR_CONST_NOTHROW_LIST)
267 DEF_GCC_BUILTIN(BUILT_IN_CLZL,
270 ATTR_CONST_NOTHROW_LIST)
272 DEF_GCC_BUILTIN(BUILT_IN_CLZLL,
275 ATTR_CONST_NOTHROW_LIST)
277 DEF_C99_BUILTIN(BUILT_IN_CONJ,
279 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
280 ATTR_CONST_NOTHROW_LIST)
282 DEF_C99_BUILTIN(BUILT_IN_CONJF,
284 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
285 ATTR_CONST_NOTHROW_LIST)
287 DEF_C99_BUILTIN(BUILT_IN_CONJL,
289 BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
290 ATTR_CONST_NOTHROW_LIST)
292 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
293 "__builtin_constant_p",
295 ATTR_CONST_NOTHROW_LIST)
297 DEF_LIB_BUILTIN(BUILT_IN_COS,
300 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
301 : ATTR_PURE_NOTHROW_LIST)
303 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
306 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
307 : ATTR_PURE_NOTHROW_LIST)
309 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
311 BT_FN_LONGDOUBLE_LONGDOUBLE,
312 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
313 : ATTR_PURE_NOTHROW_LIST)
315 DEF_C99_BUILTIN(BUILT_IN_CREAL,
317 BT_FN_DOUBLE_COMPLEX_DOUBLE,
318 ATTR_CONST_NOTHROW_LIST)
320 DEF_C99_BUILTIN(BUILT_IN_CREALF,
322 BT_FN_FLOAT_COMPLEX_FLOAT,
323 ATTR_CONST_NOTHROW_LIST)
325 DEF_C99_BUILTIN(BUILT_IN_CREALL,
327 BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
328 ATTR_CONST_NOTHROW_LIST)
330 DEF_GCC_BUILTIN(BUILT_IN_CTZ,
333 ATTR_CONST_NOTHROW_LIST)
335 DEF_GCC_BUILTIN(BUILT_IN_CTZL,
338 ATTR_CONST_NOTHROW_LIST)
340 DEF_GCC_BUILTIN(BUILT_IN_CTZLL,
343 ATTR_CONST_NOTHROW_LIST)
345 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
346 "__builtin_dwarf_cfa",
350 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
351 "__builtin_dwarf_sp_column",
355 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
356 "__builtin_eh_return",
357 BT_FN_VOID_PTRMODE_PTR,
358 ATTR_NORETURN_NOTHROW_LIST)
360 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
361 "__builtin_eh_return_data_regno",
365 DEF_LIB_BUILTIN(BUILT_IN_EXIT,
368 ATTR_NORETURN_NOTHROW_LIST)
370 DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
373 ATTR_NORETURN_NOTHROW_LIST)
375 DEF_C99_BUILTIN(BUILT_IN__EXIT2,
378 ATTR_NORETURN_NOTHROW_LIST)
380 DEF_LIB_BUILTIN(BUILT_IN_EXP,
383 flag_errno_math ? ATTR_NOTHROW_LIST
384 : (flag_unsafe_math_optimizations
385 ? ATTR_CONST_NOTHROW_LIST
386 : ATTR_PURE_NOTHROW_LIST))
388 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
391 flag_errno_math ? ATTR_NOTHROW_LIST
392 : (flag_unsafe_math_optimizations
393 ? ATTR_CONST_NOTHROW_LIST
394 : ATTR_PURE_NOTHROW_LIST))
396 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
398 BT_FN_LONGDOUBLE_LONGDOUBLE,
399 flag_errno_math ? ATTR_NOTHROW_LIST
400 : (flag_unsafe_math_optimizations
401 ? ATTR_CONST_NOTHROW_LIST
402 : ATTR_PURE_NOTHROW_LIST))
404 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
406 BT_FN_LONG_LONG_LONG,
409 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
410 "__builtin_extract_return_addr",
414 DEF_LIB_BUILTIN(BUILT_IN_FABS,
417 ATTR_CONST_NOTHROW_LIST)
419 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
422 ATTR_CONST_NOTHROW_LIST)
424 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
426 BT_FN_LONGDOUBLE_LONGDOUBLE,
427 ATTR_CONST_NOTHROW_LIST)
429 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
432 ATTR_CONST_NOTHROW_LIST)
434 DEF_GCC_BUILTIN(BUILT_IN_FFSL,
437 ATTR_CONST_NOTHROW_LIST)
439 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL,
442 ATTR_CONST_NOTHROW_LIST)
444 DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
447 ATTR_CONST_NOTHROW_LIST)
449 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF,
452 ATTR_CONST_NOTHROW_LIST)
454 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL,
456 BT_FN_LONGDOUBLE_LONGDOUBLE,
457 ATTR_CONST_NOTHROW_LIST)
459 DEF_LIB_BUILTIN(BUILT_IN_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))
467 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF,
469 BT_FN_FLOAT_FLOAT_FLOAT,
470 flag_errno_math ? ATTR_NOTHROW_LIST
471 : (flag_unsafe_math_optimizations
472 ? ATTR_CONST_NOTHROW_LIST
473 : ATTR_PURE_NOTHROW_LIST))
475 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL,
477 BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
478 flag_errno_math ? ATTR_NOTHROW_LIST
479 : (flag_unsafe_math_optimizations
480 ? ATTR_CONST_NOTHROW_LIST
481 : ATTR_PURE_NOTHROW_LIST))
483 DEF_LIB_BUILTIN(BUILT_IN_FPRINTF,
485 BT_FN_INT_PTR_CONST_STRING_VAR,
486 ATTR_FORMAT_PRINTF_2_3)
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)
493 DEF_LIB_BUILTIN(BUILT_IN_FPUTC,
496 ATTR_NOTHROW_NONNULL_2)
498 DEF_EXT_LIB_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
499 "__builtin_fputc_unlocked",
501 ATTR_NOTHROW_NONNULL_2)
503 DEF_LIB_BUILTIN(BUILT_IN_FPUTS,
505 BT_FN_INT_CONST_STRING_PTR,
506 ATTR_NOTHROW_NONNULL_1_2)
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)
513 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
514 "__builtin_frame_address",
518 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
519 "__builtin_frob_return_addr",
523 DEF_LIB_BUILTIN(BUILT_IN_FWRITE,
525 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
526 ATTR_NOTHROW_NONNULL_1_4)
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)
533 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
534 "__builtin_huge_val",
536 ATTR_CONST_NOTHROW_LIST)
538 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
539 "__builtin_huge_valf",
541 ATTR_CONST_NOTHROW_LIST)
543 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
544 "__builtin_huge_vall",
546 ATTR_CONST_NOTHROW_LIST)
548 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
551 ATTR_CONST_NOTHROW_LIST)
553 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
555 BT_FN_STRING_CONST_STRING_INT,
556 ATTR_PURE_NOTHROW_NONNULL_1)
558 DEF_GCC_BUILTIN(BUILT_IN_INF,
561 ATTR_CONST_NOTHROW_LIST)
563 DEF_GCC_BUILTIN(BUILT_IN_INFF,
566 ATTR_CONST_NOTHROW_LIST)
568 DEF_GCC_BUILTIN(BUILT_IN_INFL,
571 ATTR_CONST_NOTHROW_LIST)
573 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
574 "__builtin_init_dwarf_reg_size_table",
578 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
579 "__builtin_isgreater",
581 ATTR_CONST_NOTHROW_LIST)
583 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
584 "__builtin_isgreaterequal",
586 ATTR_CONST_NOTHROW_LIST)
588 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
591 ATTR_CONST_NOTHROW_LIST)
593 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
594 "__builtin_islessequal",
596 ATTR_CONST_NOTHROW_LIST)
598 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
599 "__builtin_islessgreater",
601 ATTR_CONST_NOTHROW_LIST)
603 DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
604 "__builtin_isunordered",
606 ATTR_CONST_NOTHROW_LIST)
608 DEF_LIB_BUILTIN(BUILT_IN_LABS,
611 ATTR_CONST_NOTHROW_LIST)
613 DEF_C99_BUILTIN(BUILT_IN_LLABS,
615 BT_FN_LONGLONG_LONGLONG,
616 ATTR_CONST_NOTHROW_LIST)
618 DEF_LIB_BUILTIN(BUILT_IN_LOG,
621 flag_errno_math ? ATTR_NOTHROW_LIST
622 : (flag_unsafe_math_optimizations
623 ? ATTR_CONST_NOTHROW_LIST
624 : ATTR_PURE_NOTHROW_LIST))
626 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
629 flag_errno_math ? ATTR_NOTHROW_LIST
630 : (flag_unsafe_math_optimizations
631 ? ATTR_CONST_NOTHROW_LIST
632 : ATTR_PURE_NOTHROW_LIST))
634 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
636 BT_FN_LONGDOUBLE_LONGDOUBLE,
637 flag_errno_math ? ATTR_NOTHROW_LIST
638 : (flag_unsafe_math_optimizations
639 ? ATTR_CONST_NOTHROW_LIST
640 : ATTR_PURE_NOTHROW_LIST))
642 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
645 ATTR_NORETURN_NOTHROW_LIST)
647 DEF_LIB_BUILTIN(BUILT_IN_MALLOC,
650 ATTR_MALLOC_NOTHROW_LIST)
652 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
654 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
655 ATTR_PURE_NOTHROW_NONNULL_1_2)
657 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
659 BT_FN_PTR_PTR_CONST_PTR_SIZE,
660 ATTR_NOTHROW_NONNULL_1_2)
662 DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE,
664 BT_FN_PTR_PTR_CONST_PTR_SIZE,
665 ATTR_NOTHROW_NONNULL_1_2)
667 DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY,
669 BT_FN_PTR_PTR_CONST_PTR_SIZE,
670 ATTR_NOTHROW_NONNULL_1_2)
672 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
674 BT_FN_PTR_PTR_INT_SIZE,
675 ATTR_NOTHROW_NONNULL_1)
677 DEF_LIB_BUILTIN(BUILT_IN_NAN,
679 BT_FN_DOUBLE_CONST_STRING,
680 ATTR_CONST_NOTHROW_NONNULL_1)
682 DEF_LIB_BUILTIN(BUILT_IN_NANF,
684 BT_FN_FLOAT_CONST_STRING,
685 ATTR_CONST_NOTHROW_NONNULL_1)
687 DEF_LIB_BUILTIN(BUILT_IN_NANL,
689 BT_FN_LONGDOUBLE_CONST_STRING,
690 ATTR_CONST_NOTHROW_NONNULL_1)
692 DEF_LIB_BUILTIN(BUILT_IN_NANS,
694 BT_FN_DOUBLE_CONST_STRING,
695 ATTR_CONST_NOTHROW_NONNULL_1)
697 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
699 BT_FN_FLOAT_CONST_STRING,
700 ATTR_CONST_NOTHROW_NONNULL_1)
702 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
704 BT_FN_LONGDOUBLE_CONST_STRING,
705 ATTR_CONST_NOTHROW_NONNULL_1)
707 DEF_C99_BUILTIN(BUILT_IN_NEARBYINT,
708 "__builtin_nearbyint",
710 ATTR_CONST_NOTHROW_LIST)
712 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF,
713 "__builtin_nearbyintf",
715 ATTR_CONST_NOTHROW_LIST)
717 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL,
718 "__builtin_nearbyintl",
719 BT_FN_LONGDOUBLE_LONGDOUBLE,
720 ATTR_CONST_NOTHROW_LIST)
722 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
723 "__builtin_next_arg",
727 DEF_GCC_BUILTIN(BUILT_IN_PARITY,
730 ATTR_CONST_NOTHROW_LIST)
732 DEF_GCC_BUILTIN(BUILT_IN_PARITYL,
735 ATTR_CONST_NOTHROW_LIST)
737 DEF_GCC_BUILTIN(BUILT_IN_PARITYLL,
738 "__builtin_parityll",
740 ATTR_CONST_NOTHROW_LIST)
742 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT,
743 "__builtin_popcount",
745 ATTR_CONST_NOTHROW_LIST)
747 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL,
748 "__builtin_popcountl",
750 ATTR_CONST_NOTHROW_LIST)
752 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL,
753 "__builtin_popcountll",
755 ATTR_CONST_NOTHROW_LIST)
757 DEF_LIB_BUILTIN(BUILT_IN_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))
765 DEF_C99_C90RES_BUILTIN(BUILT_IN_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))
773 DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL,
775 BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
776 flag_errno_math ? ATTR_NOTHROW_LIST
777 : (flag_unsafe_math_optimizations
778 ? ATTR_CONST_NOTHROW_LIST
779 : ATTR_PURE_NOTHROW_LIST))
781 DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
782 "__builtin_prefetch",
783 BT_FN_VOID_CONST_PTR_VAR,
786 DEF_LIB_BUILTIN(BUILT_IN_PRINTF,
788 BT_FN_INT_CONST_STRING_VAR,
789 ATTR_FORMAT_PRINTF_1_2)
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)
796 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
801 DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
802 "__builtin_putchar_unlocked",
806 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
808 BT_FN_INT_CONST_STRING,
809 ATTR_NOTHROW_NONNULL_1)
811 DEF_EXT_LIB_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
812 "__builtin_puts_unlocked",
813 BT_FN_INT_CONST_STRING,
814 ATTR_NOTHROW_NONNULL_1)
816 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
819 ATTR_NORETURN_NOTHROW_LIST)
821 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
822 "__builtin_return_address",
826 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
828 BT_FN_STRING_CONST_STRING_INT,
829 ATTR_PURE_NOTHROW_NONNULL_1)
831 DEF_C99_BUILTIN(BUILT_IN_ROUND,
834 ATTR_CONST_NOTHROW_LIST)
836 DEF_C99_BUILTIN(BUILT_IN_ROUNDF,
839 ATTR_CONST_NOTHROW_LIST)
841 DEF_C99_BUILTIN(BUILT_IN_ROUNDL,
843 BT_FN_LONGDOUBLE_LONGDOUBLE,
844 ATTR_CONST_NOTHROW_LIST)
846 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
847 "__builtin_saveregs",
851 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
853 BT_FN_INT_CONST_STRING_VAR,
854 ATTR_FORMAT_SCANF_1_2)
856 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
861 DEF_LIB_BUILTIN(BUILT_IN_SIN,
864 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
865 : ATTR_PURE_NOTHROW_LIST)
867 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
870 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
871 : ATTR_PURE_NOTHROW_LIST)
873 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
875 BT_FN_LONGDOUBLE_LONGDOUBLE,
876 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
877 : ATTR_PURE_NOTHROW_LIST)
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)
884 DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
886 BT_FN_INT_STRING_CONST_STRING_VAR,
887 ATTR_FORMAT_PRINTF_2_3)
889 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
891 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
892 ATTR_FORMAT_SCANF_2_3)
894 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
895 "__builtin_stdarg_start",
896 BT_FN_VOID_VALIST_REF_VAR,
899 DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY,
901 BT_FN_STRING_STRING_CONST_STRING,
902 ATTR_NOTHROW_NONNULL_1_2)
904 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
906 BT_FN_STRING_STRING_CONST_STRING,
907 ATTR_NOTHROW_NONNULL_1_2)
909 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
911 BT_FN_STRING_CONST_STRING_INT,
912 ATTR_PURE_NOTHROW_NONNULL_1)
914 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
916 BT_FN_INT_CONST_STRING_CONST_STRING,
917 ATTR_PURE_NOTHROW_NONNULL_1_2)
919 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
921 BT_FN_STRING_STRING_CONST_STRING,
922 ATTR_NOTHROW_NONNULL_1_2)
924 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
926 BT_FN_SIZE_CONST_STRING_CONST_STRING,
927 ATTR_PURE_NOTHROW_NONNULL_1_2)
929 DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP,
931 BT_FN_STRING_CONST_STRING,
932 ATTR_MALLOC_NOTHROW_NONNULL_1)
934 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
936 BT_FN_SIZE_CONST_STRING,
937 ATTR_PURE_NOTHROW_NONNULL_1)
939 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
941 BT_FN_STRING_STRING_CONST_STRING_SIZE,
942 ATTR_NOTHROW_NONNULL_1_2)
944 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
946 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
947 ATTR_PURE_NOTHROW_NONNULL_1_2)
949 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
951 BT_FN_STRING_STRING_CONST_STRING_SIZE,
952 ATTR_NOTHROW_NONNULL_1_2)
954 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
956 BT_FN_STRING_CONST_STRING_CONST_STRING,
957 ATTR_PURE_NOTHROW_NONNULL_1_2)
959 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
961 BT_FN_STRING_CONST_STRING_INT,
962 ATTR_PURE_NOTHROW_NONNULL_1)
964 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
966 BT_FN_SIZE_CONST_STRING_CONST_STRING,
967 ATTR_PURE_NOTHROW_NONNULL_1_2)
969 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
971 BT_FN_STRING_CONST_STRING_CONST_STRING,
972 ATTR_PURE_NOTHROW_NONNULL_1_2)
974 DEF_LIB_BUILTIN(BUILT_IN_SQRT,
977 flag_errno_math ? ATTR_NOTHROW_LIST
978 : (flag_unsafe_math_optimizations
979 ? ATTR_CONST_NOTHROW_LIST
980 : ATTR_PURE_NOTHROW_LIST))
982 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
985 flag_errno_math ? ATTR_NOTHROW_LIST
986 : (flag_unsafe_math_optimizations
987 ? ATTR_CONST_NOTHROW_LIST
988 : ATTR_PURE_NOTHROW_LIST))
990 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
992 BT_FN_LONGDOUBLE_LONGDOUBLE,
993 flag_errno_math ? ATTR_NOTHROW_LIST
994 : (flag_unsafe_math_optimizations
995 ? ATTR_CONST_NOTHROW_LIST
996 : ATTR_PURE_NOTHROW_LIST))
998 DEF_LIB_BUILTIN(BUILT_IN_TAN,
1000 BT_FN_DOUBLE_DOUBLE,
1001 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
1002 : ATTR_PURE_NOTHROW_LIST)
1004 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
1007 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
1008 : ATTR_PURE_NOTHROW_LIST)
1010 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
1012 BT_FN_LONGDOUBLE_LONGDOUBLE,
1013 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
1014 : ATTR_PURE_NOTHROW_LIST)
1016 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
1019 ATTR_NORETURN_NOTHROW_LIST)
1021 DEF_C99_BUILTIN(BUILT_IN_TRUNC,
1023 BT_FN_DOUBLE_DOUBLE,
1024 ATTR_CONST_NOTHROW_LIST)
1026 DEF_C99_BUILTIN(BUILT_IN_TRUNCF,
1029 ATTR_CONST_NOTHROW_LIST)
1031 DEF_C99_BUILTIN(BUILT_IN_TRUNCL,
1033 BT_FN_LONGDOUBLE_LONGDOUBLE,
1034 ATTR_CONST_NOTHROW_LIST)
1036 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
1037 "__builtin_unwind_init",
1041 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
1042 "__builtin_va_copy",
1043 BT_FN_VOID_VALIST_REF_VALIST_ARG,
1046 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
1048 BT_FN_VOID_VALIST_REF,
1051 DEF_GCC_BUILTIN(BUILT_IN_VA_START,
1052 "__builtin_va_start",
1053 BT_FN_VOID_VALIST_REF_VAR,
1056 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
1057 "__builtin_vprintf",
1058 BT_FN_INT_CONST_STRING_VALIST_ARG,
1059 ATTR_FORMAT_PRINTF_1_0)
1061 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
1063 BT_FN_INT_CONST_STRING_VALIST_ARG,
1064 ATTR_FORMAT_SCANF_1_0)
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)
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)
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)