xref: /openbsd/gnu/usr.bin/gcc/gcc/builtins.def (revision 76d0caae)
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.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING.  If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA.  */
21
22/* Before including this file, you should define a macro:
23
24     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
25                  FALLBACK_P, NONANSI_P, ATTRS)
26
27   This macro will be called once for each builtin function.  The
28   ENUM will be of type `enum built_in_function', and will indicate
29   which builtin function is being processed.  The NAME of the builtin
30   function (which will always start with `__builtin_') is a string
31   literal.  The CLASS is of type `enum built_in_class' and indicates
32   what kind of builtin is being processed.
33
34   Some builtins are actually two separate functions.  For example,
35   for `strcmp' there are two builtin functions; `__builtin_strcmp'
36   and `strcmp' itself.  Both behave identically.  Other builtins
37   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
38   builtin has both variants; otherwise, it is has only the first
39   variant.
40
41   TYPE indicates the type of the function.  The symbols correspond to
42   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
43   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
44   should be ignored.
45
46   If FALLBACK_P is true then, if for some reason, the compiler cannot
47   expand the builtin function directly, it will call the
48   corresponding library function (which does not have the
49   `__builtin_' prefix.
50
51   If NONANSI_P is true, then the non-`__builtin_' variant is not an
52   ANSI/ISO library function, and so we should pretend it does not
53   exist when compiling in ANSI conformant mode.
54
55   ATTRs is an attribute list as defined in builtin-attrs.def that
56   describes the attributes of this builtin function.  */
57
58/* A GCC builtin (like __builtin_saveregs) is provided by the
59   compiler, but does not correspond to a function in the standard
60   library.  */
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)
65
66
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
70   the name.  */
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)
75
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
79   __builtin.  */
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)
84
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
90   version.  */
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)
95
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)
102
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
106   __builtin.  */
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)
111
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)
118
119/* Like DEF_LIB_BUILTIN, except that the function is expanded in the
120   front-end.  */
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)
125
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)
134
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)
140
141/* If SMALL_STACK is defined, then `alloca' is only defined in its
142   `__builtin' form.  */
143#if SMALL_STACK
144DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
145		     "__builtin_alloca",
146		     BT_FN_PTR_SIZE,
147		     ATTR_MALLOC_NOTHROW_LIST)
148#else
149DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
150		    "__builtin_alloca",
151		    BT_FN_PTR_SIZE,
152		    ATTR_MALLOC_NOTHROW_LIST)
153#endif
154
155DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
156		       "__builtin_abs",
157		       BT_FN_INT_INT)
158DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
159		       "__builtin_labs",
160		       BT_FN_LONG_LONG)
161
162#ifdef	__arm__
163DEF_FALLBACK_BUILTIN(BUILT_IN_FABS,
164		     "__builtin_fabs",
165		     BT_FN_DOUBLE_DOUBLE,
166		     ATTR_CONST_NOTHROW_LIST)
167DEF_FALLBACK_BUILTIN(BUILT_IN_FABSF,
168		     "__builtin_fabsf",
169		     BT_FN_FLOAT_FLOAT,
170		     ATTR_CONST_NOTHROW_LIST)
171DEF_FALLBACK_BUILTIN(BUILT_IN_FABSL,
172		     "__builtin_fabsl",
173		     BT_FN_LONG_DOUBLE_LONG_DOUBLE,
174		     ATTR_CONST_NOTHROW_LIST)
175#else	/* __arm__ */
176DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
177		       "__builtin_fabs",
178		       BT_FN_DOUBLE_DOUBLE)
179DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
180		       "__builtin_fabsf",
181		       BT_FN_FLOAT_FLOAT)
182DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
183		       "__builtin_fabsl",
184		       BT_FN_LONG_DOUBLE_LONG_DOUBLE)
185#endif	/* __arm__ */
186
187DEF_C99_BUILTIN(BUILT_IN_LLABS,
188		"__builtin_llabs",
189		BT_FN_LONGLONG_LONGLONG,
190		ATTR_NOTHROW_LIST)
191DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
192		"__builtin_imaxabs",
193		BT_FN_INTMAX_INTMAX,
194		ATTR_NOTHROW_LIST)
195DEF_C99_BUILTIN(BUILT_IN_CONJ,
196		"__builtin_conj",
197		BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
198		ATTR_NOTHROW_LIST)
199DEF_C99_BUILTIN(BUILT_IN_CONJF,
200		"__builtin_conjf",
201		BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
202		ATTR_NOTHROW_LIST)
203DEF_C99_BUILTIN(BUILT_IN_CONJL,
204		"__builtin_conjl",
205		BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
206		ATTR_NOTHROW_LIST)
207DEF_C99_BUILTIN(BUILT_IN_CREAL,
208		"__builtin_creal",
209		BT_FN_DOUBLE_COMPLEX_DOUBLE,
210		ATTR_NOTHROW_LIST)
211DEF_C99_BUILTIN(BUILT_IN_CREALF,
212		"__builtin_crealf",
213		BT_FN_FLOAT_COMPLEX_FLOAT,
214		ATTR_NOTHROW_LIST)
215DEF_C99_BUILTIN(BUILT_IN_CREALL,
216		"__builtin_creall",
217		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
218		ATTR_NOTHROW_LIST)
219DEF_C99_BUILTIN(BUILT_IN_CIMAG,
220		"__builtin_cimag",
221		BT_FN_DOUBLE_COMPLEX_DOUBLE,
222		ATTR_NOTHROW_LIST)
223DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
224		"__builtin_cimagf",
225		BT_FN_FLOAT_COMPLEX_FLOAT,
226		ATTR_NOTHROW_LIST)
227DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
228		"__builtin_cimagl",
229		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
230		ATTR_NOTHROW_LIST)
231
232DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
233DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
234DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
235DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
236DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
237DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
238
239/* The system prototypes for `bzero' and `bcmp' functions have many
240   variations, so don't specify parameters to avoid conflicts.  The
241   expand_* functions check the argument types anyway.  */
242DEF_BUILTIN (BUILT_IN_BZERO,
243	     "__builtin_bzero",
244	     BUILT_IN_NORMAL,
245	     BT_FN_VOID_PTR_SIZE,
246	     BT_FN_VOID_VAR,
247	     true, true, true,
248	     ATTR_NOTHROW_BOUNDED_BUFFER_1_2)
249DEF_BUILTIN (BUILT_IN_BCMP,
250	     "__builtin_bcmp",
251	     BUILT_IN_NORMAL,
252	     BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
253	     BT_FN_INT_VAR,
254	     true, true, true,
255	     ATTR_PURE_NOTHROW_LIST)
256
257DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
258		    "__builtin_ffs",
259		    BT_FN_INT_INT,
260		    ATTR_CONST_NOTHROW_LIST)
261DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
262		    "__builtin_index",
263		    BT_FN_STRING_CONST_STRING_INT,
264		    ATTR_PURE_NOTHROW_LIST)
265DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
266		    "__builtin_rindex",
267		    BT_FN_STRING_CONST_STRING_INT,
268		    ATTR_PURE_NOTHROW_LIST)
269
270DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
271		"__builtin_memcpy",
272		BT_FN_PTR_PTR_CONST_PTR_SIZE,
273		ATTR_NOTHROW_BOUNDED_BUFFER_2_3_1_3)
274DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
275		"__builtin_memcmp",
276		BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
277		ATTR_PURE_NOTHROW_LIST)
278DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
279		"__builtin_memset",
280		BT_FN_PTR_PTR_INT_SIZE,
281		ATTR_NOTHROW_BOUNDED_BUFFER_1_3)
282
283DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
284		"__builtin_strcat",
285		BT_FN_STRING_STRING_CONST_STRING,
286		ATTR_NOTHROW_LIST)
287DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
288		"__builtin_strncat",
289		BT_FN_STRING_STRING_CONST_STRING_SIZE,
290		ATTR_NOTHROW_BOUNDED_BUFFER_1_3)
291DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
292		"__builtin_strcpy",
293		BT_FN_STRING_STRING_CONST_STRING,
294		ATTR_NOTHROW_LIST)
295DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
296		"__builtin_strncpy",
297		BT_FN_STRING_STRING_CONST_STRING_SIZE,
298		ATTR_NOTHROW_BOUNDED_BUFFER_1_3)
299DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
300		"__builtin_strcmp",
301		BT_FN_INT_CONST_STRING_CONST_STRING,
302		ATTR_PURE_NOTHROW_LIST)
303DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
304		"__builtin_strncmp",
305		BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
306		ATTR_PURE_NOTHROW_LIST)
307DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
308		"__builtin_strlen",
309		BT_FN_SIZE_CONST_STRING,
310		ATTR_PURE_NOTHROW_LIST)
311DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
312		"__builtin_strstr",
313		BT_FN_STRING_CONST_STRING_CONST_STRING,
314		ATTR_PURE_NOTHROW_LIST)
315DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
316		"__builtin_strpbrk",
317		BT_FN_STRING_CONST_STRING_CONST_STRING,
318		ATTR_PURE_NOTHROW_LIST)
319DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
320		"__builtin_strspn",
321		BT_FN_SIZE_CONST_STRING_CONST_STRING,
322		ATTR_PURE_NOTHROW_LIST)
323DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
324		"__builtin_strcspn",
325		BT_FN_SIZE_CONST_STRING_CONST_STRING,
326		ATTR_PURE_NOTHROW_LIST)
327DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
328		"__builtin_strchr",
329		BT_FN_STRING_CONST_STRING_INT,
330		ATTR_PURE_NOTHROW_LIST)
331DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
332		"__builtin_strrchr",
333		BT_FN_STRING_CONST_STRING_INT,
334		ATTR_PURE_NOTHROW_LIST)
335
336DEF_LIB_BUILTIN(BUILT_IN_SQRT,
337		"__builtin_sqrt",
338		BT_FN_DOUBLE_DOUBLE,
339		flag_errno_math ? ATTR_NOTHROW_LIST
340				: (flag_unsafe_math_optimizations
341				   ? ATTR_CONST_NOTHROW_LIST
342				   : ATTR_PURE_NOTHROW_LIST))
343DEF_LIB_BUILTIN(BUILT_IN_SIN,
344		"__builtin_sin",
345		BT_FN_DOUBLE_DOUBLE,
346		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
347					       : ATTR_PURE_NOTHROW_LIST)
348DEF_LIB_BUILTIN(BUILT_IN_COS,
349		"__builtin_cos",
350		BT_FN_DOUBLE_DOUBLE,
351		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
352					       : ATTR_PURE_NOTHROW_LIST)
353DEF_LIB_BUILTIN(BUILT_IN_EXP,
354		"__builtin_exp",
355		BT_FN_DOUBLE_DOUBLE,
356		flag_errno_math ? ATTR_NOTHROW_LIST
357				: (flag_unsafe_math_optimizations
358				   ? ATTR_CONST_NOTHROW_LIST
359				   : ATTR_PURE_NOTHROW_LIST))
360DEF_LIB_BUILTIN(BUILT_IN_LOG,
361		"__builtin_log",
362		BT_FN_DOUBLE_DOUBLE,
363		flag_errno_math ? ATTR_NOTHROW_LIST
364				: (flag_unsafe_math_optimizations
365				   ? ATTR_CONST_NOTHROW_LIST
366				   : ATTR_PURE_NOTHROW_LIST))
367DEF_LIB_BUILTIN(BUILT_IN_SQRTF,
368		"__builtin_sqrtf",
369		BT_FN_FLOAT_FLOAT,
370		flag_errno_math ? ATTR_NOTHROW_LIST
371				: (flag_unsafe_math_optimizations
372				   ? ATTR_CONST_NOTHROW_LIST
373				   : ATTR_PURE_NOTHROW_LIST))
374DEF_LIB_BUILTIN(BUILT_IN_SINF,
375		"__builtin_sinf",
376		BT_FN_FLOAT_FLOAT,
377		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
378					       : ATTR_PURE_NOTHROW_LIST)
379DEF_LIB_BUILTIN(BUILT_IN_COSF,
380		"__builtin_cosf",
381		BT_FN_FLOAT_FLOAT,
382		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
383					       : ATTR_PURE_NOTHROW_LIST)
384DEF_LIB_BUILTIN(BUILT_IN_EXPF,
385		"__builtin_expf",
386		BT_FN_FLOAT_FLOAT,
387		flag_errno_math ? ATTR_NOTHROW_LIST
388				: (flag_unsafe_math_optimizations
389				   ? ATTR_CONST_NOTHROW_LIST
390				   : ATTR_PURE_NOTHROW_LIST))
391DEF_LIB_BUILTIN(BUILT_IN_LOGF,
392		"__builtin_logf",
393		BT_FN_FLOAT_FLOAT,
394		flag_errno_math ? ATTR_NOTHROW_LIST
395				: (flag_unsafe_math_optimizations
396				   ? ATTR_CONST_NOTHROW_LIST
397				   : ATTR_PURE_NOTHROW_LIST))
398DEF_LIB_BUILTIN(BUILT_IN_SQRTL,
399		"__builtin_sqrtl",
400		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
401		flag_errno_math ? ATTR_NOTHROW_LIST
402				: (flag_unsafe_math_optimizations
403				   ? ATTR_CONST_NOTHROW_LIST
404				   : ATTR_PURE_NOTHROW_LIST))
405DEF_LIB_BUILTIN(BUILT_IN_SINL,
406		"__builtin_sinl",
407		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
408		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
409					       : ATTR_PURE_NOTHROW_LIST)
410DEF_LIB_BUILTIN(BUILT_IN_COSL,
411		"__builtin_cosl",
412		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
413		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
414					       : ATTR_PURE_NOTHROW_LIST)
415DEF_LIB_BUILTIN(BUILT_IN_EXPL,
416		"__builtin_expl",
417		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
418		flag_errno_math ? ATTR_NOTHROW_LIST
419				: (flag_unsafe_math_optimizations
420				   ? ATTR_CONST_NOTHROW_LIST
421				   : ATTR_PURE_NOTHROW_LIST))
422DEF_LIB_BUILTIN(BUILT_IN_LOGL,
423		"__builtin_logl",
424		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
425		flag_errno_math ? ATTR_NOTHROW_LIST
426				: (flag_unsafe_math_optimizations
427				   ? ATTR_CONST_NOTHROW_LIST
428				   : ATTR_PURE_NOTHROW_LIST))
429
430DEF_GCC_BUILTIN(BUILT_IN_INF,
431		"__builtin_inf",
432		BT_FN_DOUBLE,
433		ATTR_CONST_NOTHROW_LIST)
434DEF_GCC_BUILTIN(BUILT_IN_INFF,
435		"__builtin_inff",
436		BT_FN_FLOAT,
437		ATTR_CONST_NOTHROW_LIST)
438DEF_GCC_BUILTIN(BUILT_IN_INFL,
439		"__builtin_infl",
440		BT_FN_LONG_DOUBLE,
441		ATTR_CONST_NOTHROW_LIST)
442
443DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
444		"__builtin_huge_val",
445		BT_FN_DOUBLE,
446		ATTR_CONST_NOTHROW_LIST)
447DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
448		"__builtin_huge_valf",
449		BT_FN_FLOAT,
450		ATTR_CONST_NOTHROW_LIST)
451DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
452		"__builtin_huge_vall",
453		BT_FN_LONG_DOUBLE,
454		ATTR_CONST_NOTHROW_LIST)
455
456DEF_LIB_BUILTIN(BUILT_IN_NAN,
457		"__builtin_nan",
458		BT_FN_DOUBLE_CONST_STRING,
459		ATTR_CONST_NOTHROW_LIST)
460DEF_LIB_BUILTIN(BUILT_IN_NANF,
461		"__builtin_nanf",
462		BT_FN_FLOAT_CONST_STRING,
463		ATTR_CONST_NOTHROW_LIST)
464DEF_LIB_BUILTIN(BUILT_IN_NANL,
465		"__builtin_nanl",
466		BT_FN_LONG_DOUBLE_CONST_STRING,
467		ATTR_CONST_NOTHROW_LIST)
468
469DEF_LIB_BUILTIN(BUILT_IN_NANS,
470		"__builtin_nans",
471		BT_FN_DOUBLE_CONST_STRING,
472		ATTR_CONST_NOTHROW_LIST)
473DEF_LIB_BUILTIN(BUILT_IN_NANSF,
474		"__builtin_nansf",
475		BT_FN_FLOAT_CONST_STRING,
476		ATTR_CONST_NOTHROW_LIST)
477DEF_LIB_BUILTIN(BUILT_IN_NANSL,
478		"__builtin_nansl",
479		BT_FN_LONG_DOUBLE_CONST_STRING,
480		ATTR_CONST_NOTHROW_LIST)
481
482DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
483		"__builtin_saveregs",
484		BT_FN_PTR_VAR,
485		ATTR_NULL)
486DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
487		"__builtin_classify_type",
488		BT_FN_INT_VAR,
489		ATTR_NULL)
490DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
491		"__builtin_next_arg",
492		BT_FN_PTR_VAR,
493		ATTR_NULL)
494DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
495		"__builtin_args_info",
496		BT_FN_INT_INT,
497		ATTR_NULL)
498DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
499		"__builtin_constant_p",
500		BT_FN_INT_VAR,
501		ATTR_NULL)
502DEF_EXT_LIB_BUILTIN(BUILT_IN_DCGETTEXT,
503		"__builtin_dcgettext",
504		BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
505		ATTR_FORMAT_ARG_2)
506DEF_EXT_LIB_BUILTIN(BUILT_IN_DGETTEXT,
507		"__builtin_dgettext",
508		BT_FN_STRING_CONST_STRING_CONST_STRING,
509		ATTR_FORMAT_ARG_2)
510DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
511		"__builtin_frame_address",
512		BT_FN_PTR_UNSIGNED,
513		ATTR_NULL)
514DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
515		"__builtin_return_address",
516		BT_FN_PTR_UNSIGNED,
517		ATTR_NULL)
518DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
519		"__builtin_aggregate_incoming_address",
520		BT_FN_PTR_VAR,
521		ATTR_NULL)
522DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
523		"__builtin_apply_args",
524		BT_FN_PTR_VAR,
525		ATTR_NULL)
526DEF_GCC_BUILTIN(BUILT_IN_APPLY,
527		"__builtin_apply",
528		BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
529		ATTR_NULL)
530DEF_GCC_BUILTIN(BUILT_IN_RETURN,
531		"__builtin_return",
532		BT_FN_VOID_PTR,
533		ATTR_NORETURN_NOTHROW_LIST)
534DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
535		"__builtin_setjmp",
536		BT_FN_INT_PTR,
537		ATTR_NULL)
538DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
539		"__builtin_longjmp",
540		BT_FN_VOID_PTR_INT,
541		ATTR_NORETURN_NOTHROW_LIST)
542DEF_GCC_BUILTIN(BUILT_IN_TRAP,
543		"__builtin_trap",
544		BT_FN_VOID,
545		ATTR_NORETURN_NOTHROW_LIST)
546DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
547		"__builtin_prefetch",
548		BT_FN_VOID_CONST_PTR_VAR,
549		ATTR_NULL)
550
551/* stdio.h builtins (without FILE *).  */
552
553DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
554			  "__builtin_printf",
555			  BT_FN_INT_CONST_STRING_VAR,
556			  ATTR_FORMAT_PRINTF_1_2)
557DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
558		"__builtin_putchar",
559		BT_FN_INT_INT,
560		ATTR_NOTHROW_LIST)
561DEF_LIB_BUILTIN(BUILT_IN_PUTS,
562		"__builtin_puts",
563		BT_FN_INT_CONST_STRING,
564		ATTR_NOTHROW_LIST)
565DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
566		"__builtin_snprintf",
567		BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
568		ATTR_PRINTF_3_4_BOUNDED_STRING_1_2)
569DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
570		"__builtin_sprintf",
571		BT_FN_INT_STRING_CONST_STRING_VAR,
572		ATTR_FORMAT_PRINTF_2_3)
573DEF_LIB_BUILTIN(BUILT_IN_SCANF,
574		"__builtin_scanf",
575		BT_FN_INT_CONST_STRING_VAR,
576		ATTR_FORMAT_SCANF_1_2)
577DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
578		"__builtin_sscanf",
579		BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
580		ATTR_FORMAT_SCANF_2_3)
581DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
582		"__builtin_vprintf",
583		BT_FN_INT_CONST_STRING_VALIST_ARG,
584		ATTR_FORMAT_PRINTF_1_0)
585DEF_C99_BUILTIN(BUILT_IN_VSCANF,
586		"__builtin_vscanf",
587		BT_FN_INT_CONST_STRING_VALIST_ARG,
588		ATTR_FORMAT_SCANF_1_0)
589DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
590		"__builtin_vsscanf",
591		BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
592		ATTR_FORMAT_SCANF_2_0)
593DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
594		"__builtin_vsnprintf",
595		BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
596		ATTR_PRINTF_3_0_BOUNDED_STRING_1_2)
597DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
598		"__builtin_vsprintf",
599		BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
600		ATTR_FORMAT_PRINTF_2_0)
601
602
603/* stdio.h builtins (with FILE *).  */
604
605/* Declare the __builtin_ style with arguments and the regular style
606   without them.  We rely on stdio.h to supply the arguments for the
607   regular style declaration since we had to use void* instead of
608   FILE* in the __builtin_ prototype supplied here.  */
609
610DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
611		     "__builtin_fputc",
612		     BT_FN_INT_INT_PTR,
613		     ATTR_NOTHROW_LIST)
614DEF_BUILTIN (BUILT_IN_FPUTS,
615	     "__builtin_fputs",
616	     BUILT_IN_NORMAL,
617	     BT_FN_INT_CONST_STRING_PTR,
618	     BT_FN_INT_VAR,
619	     true, true, false, ATTR_NOTHROW_LIST)
620DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
621		     "__builtin_fwrite",
622		     BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
623		     ATTR_NOTHROW_BOUNDED_SIZE_1_3_2)
624DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
625			 "__builtin_fprintf",
626			 BT_FN_INT_PTR_CONST_STRING_VAR,
627			 ATTR_FORMAT_PRINTF_2_3)
628
629/* stdio unlocked builtins (without FILE *).  */
630
631DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
632			 "__builtin_putchar_unlocked",
633			 BT_FN_INT_INT)
634DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
635			 "__builtin_puts_unlocked",
636			 BT_FN_INT_CONST_STRING)
637DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
638			      "__builtin_printf_unlocked",
639			      BT_FN_INT_CONST_STRING_VAR,
640			      ATTR_FORMAT_PRINTF_1_2)
641
642/* stdio unlocked builtins (with FILE *).  */
643
644/* Declare the __builtin_ style with arguments and the regular style
645   without them.  We rely on stdio.h to supply the arguments for the
646   regular style declaration since we had to use void* instead of
647   FILE* in the __builtin_ prototype supplied here.  */
648
649DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
650			 "__builtin_fputc_unlocked",
651			 BT_FN_INT_INT_PTR)
652DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
653	     "__builtin_fputs_unlocked",
654	     BUILT_IN_NORMAL,
655	     BT_FN_INT_CONST_STRING_PTR,
656	     BT_FN_INT_VAR,
657	     true, true, true, ATTR_NOTHROW_LIST)
658DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
659			 "__builtin_fwrite_unlocked",
660			 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
661DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
662			      "__builtin_fprintf_unlocked",
663			      BT_FN_INT_PTR_CONST_STRING_VAR,
664			      ATTR_FORMAT_PRINTF_2_3)
665
666  /* ISO C99 floating point unordered comparisons.  */
667DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
668		"__builtin_isgreater",
669		BT_FN_INT_VAR,
670		ATTR_CONST_NOTHROW_LIST)
671DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
672		"__builtin_isgreaterequal",
673		BT_FN_INT_VAR,
674		ATTR_CONST_NOTHROW_LIST)
675DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
676		"__builtin_isless",
677		BT_FN_INT_VAR,
678		ATTR_CONST_NOTHROW_LIST)
679DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
680		"__builtin_islessequal",
681		BT_FN_INT_VAR,
682		ATTR_CONST_NOTHROW_LIST)
683DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
684		"__builtin_islessgreater",
685		BT_FN_INT_VAR,
686		ATTR_CONST_NOTHROW_LIST)
687DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
688		"__builtin_isunordered",
689		BT_FN_INT_VAR,
690		ATTR_CONST_NOTHROW_LIST)
691
692/* Various hooks for the DWARF 2 __throw routine.  */
693DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
694		"__builtin_unwind_init",
695		BT_FN_VOID,
696		ATTR_NULL)
697DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
698		"__builtin_dwarf_cfa",
699		BT_FN_PTR,
700		ATTR_NULL)
701DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
702		"__builtin_dwarf_sp_column",
703		BT_FN_UNSIGNED,
704		ATTR_NULL)
705DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
706		"__builtin_init_dwarf_reg_size_table",
707		BT_FN_VOID_PTR,
708		ATTR_NULL)
709DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
710		"__builtin_frob_return_addr",
711		BT_FN_PTR_PTR,
712		ATTR_NULL)
713DEF_EXT_LIB_BUILTIN(BUILT_IN_GETTEXT,
714		"__builtin_gettext",
715		BT_FN_STRING_CONST_STRING,
716		ATTR_FORMAT_ARG_1)
717DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
718		"__builtin_extract_return_addr",
719		BT_FN_PTR_PTR,
720		ATTR_NULL)
721DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
722		"__builtin_eh_return",
723		BT_FN_VOID_PTRMODE_PTR,
724		ATTR_NORETURN_NOTHROW_LIST)
725DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
726		"__builtin_eh_return_data_regno",
727		BT_FN_INT_INT,
728		ATTR_NULL)
729
730/* Variable argument list (stdarg.h) support */
731DEF_GCC_BUILTIN(BUILT_IN_VA_START,
732		"__builtin_va_start",
733		BT_FN_VOID_VALIST_REF_VAR,
734		ATTR_NULL)
735DEF_GCC_BUILTIN(BUILT_IN_STDARG_START,		/* backward compat */
736		"__builtin_stdarg_start",
737		BT_FN_VOID_VALIST_REF_VAR,
738		ATTR_NULL)
739DEF_EXT_LIB_BUILTIN(BUILT_IN_STRFMON,
740		"__builtin_strfmon",
741		BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR,
742		ATTR_FORMAT_STRFMON_3_4)
743DEF_GCC_BUILTIN(BUILT_IN_VA_END,
744		"__builtin_va_end",
745		BT_FN_VOID_VALIST_REF,
746		ATTR_NULL)
747DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
748		"__builtin_va_copy",
749		BT_FN_VOID_VALIST_REF_VALIST_ARG,
750		ATTR_NULL)
751
752DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
753		"__builtin_expect",
754		BT_FN_LONG_LONG_LONG,
755		ATTR_NULL)
756
757/* C++ extensions */
758DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
759DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
760DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
761DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
762
763/* Declare abort, exit, _exit and _Exit */
764DEF_BUILTIN (BUILT_IN_ABORT,
765	     "__builtin_abort",
766	     NOT_BUILT_IN,
767	     BT_FN_VOID,
768	     BT_FN_VOID,
769	     1, 0, 0,
770	     ATTR_NORETURN_NOTHROW_LIST)
771
772DEF_BUILTIN (BUILT_IN_EXIT,
773	     "__builtin_exit",
774	     NOT_BUILT_IN,
775	     BT_FN_VOID_INT,
776	     BT_FN_VOID_INT,
777	     1, 0, 0,
778	     ATTR_NORETURN_NOTHROW_LIST)
779
780DEF_BUILTIN (BUILT_IN__EXIT,
781	     "__builtin__exit",
782	     NOT_BUILT_IN,
783	     BT_FN_VOID_INT,
784	     BT_FN_VOID_INT,
785	     1, 0, 1,
786	     ATTR_NORETURN_NOTHROW_LIST)
787
788DEF_BUILTIN (BUILT_IN__EXIT2,
789	     "__builtin__Exit",
790	     NOT_BUILT_IN,
791	     BT_FN_VOID_INT,
792	     BT_FN_VOID_INT,
793	     1, 0, !flag_isoc99,
794	     ATTR_NORETURN_NOTHROW_LIST)
795
796