builtins.def revision 117395
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
162DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
163		       "__builtin_fabs",
164		       BT_FN_DOUBLE_DOUBLE)
165DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
166		       "__builtin_fabsf",
167		       BT_FN_FLOAT_FLOAT)
168DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
169		       "__builtin_fabsl",
170		       BT_FN_LONG_DOUBLE_LONG_DOUBLE)
171
172DEF_C99_BUILTIN(BUILT_IN_LLABS,
173		"__builtin_llabs",
174		BT_FN_LONGLONG_LONGLONG,
175		ATTR_NOTHROW_LIST)
176DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
177		"__builtin_imaxabs",
178		BT_FN_INTMAX_INTMAX,
179		ATTR_NOTHROW_LIST)
180DEF_C99_BUILTIN(BUILT_IN_CONJ,
181		"__builtin_conj",
182		BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
183		ATTR_NOTHROW_LIST)
184DEF_C99_BUILTIN(BUILT_IN_CONJF,
185		"__builtin_conjf",
186		BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
187		ATTR_NOTHROW_LIST)
188DEF_C99_BUILTIN(BUILT_IN_CONJL,
189		"__builtin_conjl",
190		BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
191		ATTR_NOTHROW_LIST)
192DEF_C99_BUILTIN(BUILT_IN_CREAL,
193		"__builtin_creal",
194		BT_FN_DOUBLE_COMPLEX_DOUBLE,
195		ATTR_NOTHROW_LIST)
196DEF_C99_BUILTIN(BUILT_IN_CREALF,
197		"__builtin_crealf",
198		BT_FN_FLOAT_COMPLEX_FLOAT,
199		ATTR_NOTHROW_LIST)
200DEF_C99_BUILTIN(BUILT_IN_CREALL,
201		"__builtin_creall",
202		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
203		ATTR_NOTHROW_LIST)
204DEF_C99_BUILTIN(BUILT_IN_CIMAG,
205		"__builtin_cimag",
206		BT_FN_DOUBLE_COMPLEX_DOUBLE,
207		ATTR_NOTHROW_LIST)
208DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
209		"__builtin_cimagf",
210		BT_FN_FLOAT_COMPLEX_FLOAT,
211		ATTR_NOTHROW_LIST)
212DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
213		"__builtin_cimagl",
214		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
215		ATTR_NOTHROW_LIST)
216
217DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
218DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
219DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
220DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
221DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
222DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
223
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.  */
227DEF_BUILTIN (BUILT_IN_BZERO,
228	     "__builtin_bzero",
229	     BUILT_IN_NORMAL,
230	     BT_FN_VOID_PTR_SIZE, 
231	     BT_FN_VOID_VAR,
232	     true, true, true,
233	     ATTR_NOTHROW_LIST)
234DEF_BUILTIN (BUILT_IN_BCMP,
235	     "__builtin_bcmp",
236	     BUILT_IN_NORMAL,
237	     BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
238	     BT_FN_INT_VAR,
239	     true, true, true,
240	     ATTR_PURE_NOTHROW_LIST)
241
242DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
243		    "__builtin_ffs",
244		    BT_FN_INT_INT,
245		    ATTR_CONST_NOTHROW_LIST)
246DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
247		    "__builtin_index",
248		    BT_FN_STRING_CONST_STRING_INT,
249		    ATTR_PURE_NOTHROW_LIST)
250DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
251		    "__builtin_rindex",
252		    BT_FN_STRING_CONST_STRING_INT,
253		    ATTR_PURE_NOTHROW_LIST)
254
255DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
256		"__builtin_memcpy",
257		BT_FN_PTR_PTR_CONST_PTR_SIZE,
258		ATTR_NOTHROW_LIST)
259DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
260		"__builtin_memcmp",
261		BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
262		ATTR_PURE_NOTHROW_LIST)
263DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
264		"__builtin_memset",
265		BT_FN_PTR_PTR_INT_SIZE,
266		ATTR_NOTHROW_LIST)
267
268DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
269		"__builtin_strcat",
270		BT_FN_STRING_STRING_CONST_STRING,
271		ATTR_NOTHROW_LIST)
272DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
273		"__builtin_strncat",
274		BT_FN_STRING_STRING_CONST_STRING_SIZE,
275		ATTR_NOTHROW_LIST)
276DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
277		"__builtin_strcpy",
278		BT_FN_STRING_STRING_CONST_STRING,
279		ATTR_NOTHROW_LIST)
280DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
281		"__builtin_strncpy",
282		BT_FN_STRING_STRING_CONST_STRING_SIZE,
283		ATTR_NOTHROW_LIST)
284DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
285		"__builtin_strcmp",
286		BT_FN_INT_CONST_STRING_CONST_STRING,
287		ATTR_PURE_NOTHROW_LIST)
288DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
289		"__builtin_strncmp",
290		BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
291		ATTR_PURE_NOTHROW_LIST)
292DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
293		"__builtin_strlen",
294		BT_FN_SIZE_CONST_STRING,
295		ATTR_PURE_NOTHROW_LIST)
296DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
297		"__builtin_strstr",
298		BT_FN_STRING_CONST_STRING_CONST_STRING,
299		ATTR_PURE_NOTHROW_LIST)
300DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
301		"__builtin_strpbrk",
302		BT_FN_STRING_CONST_STRING_CONST_STRING,
303		ATTR_PURE_NOTHROW_LIST)
304DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
305		"__builtin_strspn",
306		BT_FN_SIZE_CONST_STRING_CONST_STRING,
307		ATTR_PURE_NOTHROW_LIST)
308DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
309		"__builtin_strcspn",
310		BT_FN_SIZE_CONST_STRING_CONST_STRING,
311		ATTR_PURE_NOTHROW_LIST)
312DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
313		"__builtin_strchr",
314		BT_FN_STRING_CONST_STRING_INT,
315		ATTR_PURE_NOTHROW_LIST)
316DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
317		"__builtin_strrchr",
318		BT_FN_STRING_CONST_STRING_INT,
319		ATTR_PURE_NOTHROW_LIST)
320
321DEF_LIB_BUILTIN(BUILT_IN_SQRT,
322		"__builtin_sqrt",
323		BT_FN_DOUBLE_DOUBLE,
324		flag_errno_math ? ATTR_NOTHROW_LIST
325				: (flag_unsafe_math_optimizations
326				   ? ATTR_CONST_NOTHROW_LIST
327				   : ATTR_PURE_NOTHROW_LIST))
328DEF_LIB_BUILTIN(BUILT_IN_SIN,
329		"__builtin_sin",
330		BT_FN_DOUBLE_DOUBLE,
331		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
332					       : ATTR_PURE_NOTHROW_LIST)
333DEF_LIB_BUILTIN(BUILT_IN_COS,
334		"__builtin_cos",
335		BT_FN_DOUBLE_DOUBLE,
336		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
337					       : ATTR_PURE_NOTHROW_LIST)
338DEF_LIB_BUILTIN(BUILT_IN_EXP,
339		"__builtin_exp",
340		BT_FN_DOUBLE_DOUBLE,
341		flag_errno_math ? ATTR_NOTHROW_LIST
342				: (flag_unsafe_math_optimizations
343				   ? ATTR_CONST_NOTHROW_LIST
344				   : ATTR_PURE_NOTHROW_LIST))
345DEF_LIB_BUILTIN(BUILT_IN_LOG,
346		"__builtin_log",
347		BT_FN_DOUBLE_DOUBLE,
348		flag_errno_math ? ATTR_NOTHROW_LIST
349				: (flag_unsafe_math_optimizations
350				   ? ATTR_CONST_NOTHROW_LIST
351				   : ATTR_PURE_NOTHROW_LIST))
352DEF_LIB_BUILTIN(BUILT_IN_SQRTF,
353		"__builtin_sqrtf",
354		BT_FN_FLOAT_FLOAT,
355		flag_errno_math ? ATTR_NOTHROW_LIST
356				: (flag_unsafe_math_optimizations
357				   ? ATTR_CONST_NOTHROW_LIST
358				   : ATTR_PURE_NOTHROW_LIST))
359DEF_LIB_BUILTIN(BUILT_IN_SINF,
360		"__builtin_sinf",
361		BT_FN_FLOAT_FLOAT,
362		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
363					       : ATTR_PURE_NOTHROW_LIST)
364DEF_LIB_BUILTIN(BUILT_IN_COSF,
365		"__builtin_cosf",
366		BT_FN_FLOAT_FLOAT,
367		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
368					       : ATTR_PURE_NOTHROW_LIST)
369DEF_LIB_BUILTIN(BUILT_IN_EXPF,
370		"__builtin_expf",
371		BT_FN_FLOAT_FLOAT,
372		flag_errno_math ? ATTR_NOTHROW_LIST
373				: (flag_unsafe_math_optimizations
374				   ? ATTR_CONST_NOTHROW_LIST
375				   : ATTR_PURE_NOTHROW_LIST))
376DEF_LIB_BUILTIN(BUILT_IN_LOGF,
377		"__builtin_logf",
378		BT_FN_FLOAT_FLOAT,
379		flag_errno_math ? ATTR_NOTHROW_LIST
380				: (flag_unsafe_math_optimizations
381				   ? ATTR_CONST_NOTHROW_LIST
382				   : ATTR_PURE_NOTHROW_LIST))
383DEF_LIB_BUILTIN(BUILT_IN_SQRTL,
384		"__builtin_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))
390DEF_LIB_BUILTIN(BUILT_IN_SINL,
391		"__builtin_sinl",
392		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
393		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
394					       : ATTR_PURE_NOTHROW_LIST)
395DEF_LIB_BUILTIN(BUILT_IN_COSL,
396		"__builtin_cosl",
397		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
398		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
399					       : ATTR_PURE_NOTHROW_LIST)
400DEF_LIB_BUILTIN(BUILT_IN_EXPL,
401		"__builtin_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))
407DEF_LIB_BUILTIN(BUILT_IN_LOGL,
408		"__builtin_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))
414
415DEF_GCC_BUILTIN(BUILT_IN_INF,
416		"__builtin_inf",
417		BT_FN_DOUBLE,
418		ATTR_CONST_NOTHROW_LIST)
419DEF_GCC_BUILTIN(BUILT_IN_INFF,
420		"__builtin_inff",
421		BT_FN_FLOAT,
422		ATTR_CONST_NOTHROW_LIST)
423DEF_GCC_BUILTIN(BUILT_IN_INFL,
424		"__builtin_infl",
425		BT_FN_LONG_DOUBLE,
426		ATTR_CONST_NOTHROW_LIST)
427
428DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
429		"__builtin_huge_val",
430		BT_FN_DOUBLE,
431		ATTR_CONST_NOTHROW_LIST)
432DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
433		"__builtin_huge_valf",
434		BT_FN_FLOAT,
435		ATTR_CONST_NOTHROW_LIST)
436DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
437		"__builtin_huge_vall",
438		BT_FN_LONG_DOUBLE,
439		ATTR_CONST_NOTHROW_LIST)
440
441DEF_LIB_BUILTIN(BUILT_IN_NAN,
442		"__builtin_nan",
443		BT_FN_DOUBLE_CONST_STRING,
444		ATTR_CONST_NOTHROW_LIST)
445DEF_LIB_BUILTIN(BUILT_IN_NANF,
446		"__builtin_nanf",
447		BT_FN_FLOAT_CONST_STRING,
448		ATTR_CONST_NOTHROW_LIST)
449DEF_LIB_BUILTIN(BUILT_IN_NANL,
450		"__builtin_nanl",
451		BT_FN_LONG_DOUBLE_CONST_STRING,
452		ATTR_CONST_NOTHROW_LIST)
453
454DEF_LIB_BUILTIN(BUILT_IN_NANS,
455		"__builtin_nans",
456		BT_FN_DOUBLE_CONST_STRING,
457		ATTR_CONST_NOTHROW_LIST)
458DEF_LIB_BUILTIN(BUILT_IN_NANSF,
459		"__builtin_nansf",
460		BT_FN_FLOAT_CONST_STRING,
461		ATTR_CONST_NOTHROW_LIST)
462DEF_LIB_BUILTIN(BUILT_IN_NANSL,
463		"__builtin_nansl",
464		BT_FN_LONG_DOUBLE_CONST_STRING,
465		ATTR_CONST_NOTHROW_LIST)
466
467DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
468		"__builtin_saveregs",
469		BT_FN_PTR_VAR,
470		ATTR_NULL)
471DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
472		"__builtin_classify_type",
473		BT_FN_INT_VAR,
474		ATTR_NULL)
475DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
476		"__builtin_next_arg",
477		BT_FN_PTR_VAR,
478		ATTR_NULL)
479DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
480		"__builtin_args_info",
481		BT_FN_INT_INT,
482		ATTR_NULL)
483DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 
484		"__builtin_constant_p", 
485		BT_FN_INT_VAR,
486		ATTR_NULL)
487DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
488		"__builtin_frame_address",
489		BT_FN_PTR_UNSIGNED,
490		ATTR_NULL)
491DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 
492		"__builtin_return_address",
493		BT_FN_PTR_UNSIGNED,
494		ATTR_NULL)
495DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
496		"__builtin_aggregate_incoming_address",
497		BT_FN_PTR_VAR,
498		ATTR_NULL)
499DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
500		"__builtin_apply_args",
501		BT_FN_PTR_VAR,
502		ATTR_NULL)
503DEF_GCC_BUILTIN(BUILT_IN_APPLY,
504		"__builtin_apply",
505		BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
506		ATTR_NULL)
507DEF_GCC_BUILTIN(BUILT_IN_RETURN,
508		"__builtin_return",
509		BT_FN_VOID_PTR,
510		ATTR_NORETURN_NOTHROW_LIST)
511DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
512		"__builtin_setjmp",
513		BT_FN_INT_PTR,
514		ATTR_NULL)
515DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
516		"__builtin_longjmp",
517		BT_FN_VOID_PTR_INT,
518		ATTR_NORETURN_NOTHROW_LIST)
519DEF_GCC_BUILTIN(BUILT_IN_TRAP,
520		"__builtin_trap",
521		BT_FN_VOID,
522		ATTR_NORETURN_NOTHROW_LIST)
523DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
524		"__builtin_prefetch",
525		BT_FN_VOID_CONST_PTR_VAR,
526		ATTR_NULL)
527
528/* stdio.h builtins (without FILE *).  */
529
530DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
531			  "__builtin_printf",
532			  BT_FN_INT_CONST_STRING_VAR,
533			  ATTR_FORMAT_PRINTF_1_2)
534DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
535		"__builtin_putchar",
536		BT_FN_INT_INT,
537		ATTR_NOTHROW_LIST)
538DEF_LIB_BUILTIN(BUILT_IN_PUTS,
539		"__builtin_puts",
540		BT_FN_INT_CONST_STRING,
541		ATTR_NOTHROW_LIST)
542DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
543		"__builtin_snprintf",
544		BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
545		ATTR_FORMAT_PRINTF_3_4)
546DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
547		"__builtin_sprintf",
548		BT_FN_INT_STRING_CONST_STRING_VAR,
549		ATTR_FORMAT_PRINTF_2_3)
550DEF_LIB_BUILTIN(BUILT_IN_SCANF,
551		"__builtin_scanf",
552		BT_FN_INT_CONST_STRING_VAR,
553		ATTR_FORMAT_SCANF_1_2)
554DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
555		"__builtin_sscanf",
556		BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
557		ATTR_FORMAT_SCANF_2_3)
558DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
559		"__builtin_vprintf",
560		BT_FN_INT_CONST_STRING_VALIST_ARG,
561		ATTR_FORMAT_PRINTF_1_0)
562DEF_C99_BUILTIN(BUILT_IN_VSCANF,
563		"__builtin_vscanf",
564		BT_FN_INT_CONST_STRING_VALIST_ARG,
565		ATTR_FORMAT_SCANF_1_0)
566DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
567		"__builtin_vsscanf",
568		BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
569		ATTR_FORMAT_SCANF_2_0)
570DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
571		"__builtin_vsnprintf",
572		BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
573		ATTR_FORMAT_PRINTF_3_0)
574DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
575		"__builtin_vsprintf",
576		BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
577		ATTR_FORMAT_PRINTF_2_0)
578
579
580/* stdio.h builtins (with FILE *).  */
581
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.  */
586
587DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
588		     "__builtin_fputc",
589		     BT_FN_INT_INT_PTR,
590		     ATTR_NOTHROW_LIST)
591DEF_BUILTIN (BUILT_IN_FPUTS,
592	     "__builtin_fputs",
593	     BUILT_IN_NORMAL,
594	     BT_FN_INT_CONST_STRING_PTR,
595	     BT_FN_INT_VAR,
596	     true, true, false, ATTR_NOTHROW_LIST)
597DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
598		     "__builtin_fwrite",
599		     BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
600		      ATTR_NOTHROW_LIST)
601DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
602			 "__builtin_fprintf",
603			 BT_FN_INT_PTR_CONST_STRING_VAR,
604			 ATTR_FORMAT_PRINTF_2_3)
605
606/* stdio unlocked builtins (without FILE *).  */
607
608DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
609			 "__builtin_putchar_unlocked",
610			 BT_FN_INT_INT)
611DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
612			 "__builtin_puts_unlocked",
613			 BT_FN_INT_CONST_STRING)
614DEF_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)
618
619/* stdio unlocked builtins (with FILE *).  */
620
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.  */
625
626DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
627			 "__builtin_fputc_unlocked",
628			 BT_FN_INT_INT_PTR)
629DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
630	     "__builtin_fputs_unlocked",
631	     BUILT_IN_NORMAL,
632	     BT_FN_INT_CONST_STRING_PTR,
633	     BT_FN_INT_VAR,
634	     true, true, true, ATTR_NOTHROW_LIST)
635DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
636			 "__builtin_fwrite_unlocked",
637			 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
638DEF_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)
642
643  /* ISO C99 floating point unordered comparisons.  */
644DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 
645		"__builtin_isgreater",
646		BT_FN_INT_VAR,
647		ATTR_CONST_NOTHROW_LIST)
648DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
649		"__builtin_isgreaterequal",
650		BT_FN_INT_VAR,
651		ATTR_CONST_NOTHROW_LIST)
652DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
653		"__builtin_isless",
654		BT_FN_INT_VAR,
655		ATTR_CONST_NOTHROW_LIST)
656DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
657		"__builtin_islessequal",
658		BT_FN_INT_VAR,
659		ATTR_CONST_NOTHROW_LIST)
660DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
661		"__builtin_islessgreater",
662		BT_FN_INT_VAR,
663		ATTR_CONST_NOTHROW_LIST)
664DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
665		"__builtin_isunordered",
666		BT_FN_INT_VAR,
667		ATTR_CONST_NOTHROW_LIST)
668
669/* Various hooks for the DWARF 2 __throw routine.  */
670DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
671		"__builtin_unwind_init",
672		BT_FN_VOID,
673		ATTR_NULL)
674DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
675		"__builtin_dwarf_cfa",
676		BT_FN_PTR,
677		ATTR_NULL)
678DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
679		"__builtin_dwarf_sp_column",
680		BT_FN_UNSIGNED,
681		ATTR_NULL)
682DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
683		"__builtin_init_dwarf_reg_size_table",
684		BT_FN_VOID_PTR,
685		ATTR_NULL)
686DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
687		"__builtin_frob_return_addr",
688		BT_FN_PTR_PTR,
689		ATTR_NULL)
690DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
691		"__builtin_extract_return_addr",
692		BT_FN_PTR_PTR,
693		ATTR_NULL)
694DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
695		"__builtin_eh_return",
696		BT_FN_VOID_PTRMODE_PTR,
697		ATTR_NORETURN_NOTHROW_LIST)
698DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
699		"__builtin_eh_return_data_regno",
700		BT_FN_INT_INT,
701		ATTR_NULL)
702
703/* Variable argument list (stdarg.h) support */
704DEF_GCC_BUILTIN(BUILT_IN_VA_START,
705		"__builtin_va_start",
706		BT_FN_VOID_VALIST_REF_VAR,
707		ATTR_NULL)
708DEF_GCC_BUILTIN(BUILT_IN_STDARG_START,		/* backward compat */
709		"__builtin_stdarg_start",
710		BT_FN_VOID_VALIST_REF_VAR,
711		ATTR_NULL)
712DEF_GCC_BUILTIN(BUILT_IN_VA_END,
713		"__builtin_va_end",
714		BT_FN_VOID_VALIST_REF,
715		ATTR_NULL)
716DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
717		"__builtin_va_copy",
718		BT_FN_VOID_VALIST_REF_VALIST_ARG,
719		ATTR_NULL)
720
721DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
722		"__builtin_expect",
723		BT_FN_LONG_LONG_LONG,
724		ATTR_NULL)
725
726/* C++ extensions */
727DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
728DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
729DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
730DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
731
732/* Declare abort, exit, _exit and _Exit */
733DEF_BUILTIN (BUILT_IN_ABORT,
734	     "__builtin_abort",
735	     NOT_BUILT_IN,
736	     BT_FN_VOID,
737	     BT_FN_VOID,
738	     1, 0, 0,
739	     ATTR_NORETURN_NOTHROW_LIST)
740
741DEF_BUILTIN (BUILT_IN_EXIT,
742	     "__builtin_exit",
743	     NOT_BUILT_IN,
744	     BT_FN_VOID_INT,
745	     BT_FN_VOID_INT,
746	     1, 0, 0,
747	     ATTR_NORETURN_NOTHROW_LIST)
748
749DEF_BUILTIN (BUILT_IN__EXIT,
750	     "__builtin__exit",
751	     NOT_BUILT_IN,
752	     BT_FN_VOID_INT,
753	     BT_FN_VOID_INT,
754	     1, 0, 1,
755	     ATTR_NORETURN_NOTHROW_LIST)
756
757DEF_BUILTIN (BUILT_IN__EXIT2,
758	     "__builtin__Exit",
759	     NOT_BUILT_IN,
760	     BT_FN_VOID_INT,
761	     BT_FN_VOID_INT,
762	     1, 0, !flag_isoc99,
763	     ATTR_NORETURN_NOTHROW_LIST)
764
765