]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/gcc/builtins.def
This commit was generated by cvs2svn to compensate for changes in r131447,
[FreeBSD/FreeBSD.git] / contrib / gcc / builtins.def
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
5 This file is part of GCC.
6
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
10 version.
11
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
15 for more details.
16
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
20 02111-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  
144 DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
145                      "__builtin_alloca",
146                      BT_FN_PTR_SIZE,
147                      ATTR_MALLOC_NOTHROW_LIST)
148 #else
149 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
150                     "__builtin_alloca",
151                     BT_FN_PTR_SIZE,
152                     ATTR_MALLOC_NOTHROW_LIST)
153 #endif
154
155 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
156                        "__builtin_abs",
157                        BT_FN_INT_INT)
158 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
159                        "__builtin_labs",
160                        BT_FN_LONG_LONG)
161
162 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
163                        "__builtin_fabs",
164                        BT_FN_DOUBLE_DOUBLE)
165 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
166                        "__builtin_fabsf",
167                        BT_FN_FLOAT_FLOAT)
168 DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
169                        "__builtin_fabsl",
170                        BT_FN_LONG_DOUBLE_LONG_DOUBLE)
171
172 DEF_C99_BUILTIN(BUILT_IN_LLABS,
173                 "__builtin_llabs",
174                 BT_FN_LONGLONG_LONGLONG,
175                 ATTR_NOTHROW_LIST)
176 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
177                 "__builtin_imaxabs",
178                 BT_FN_INTMAX_INTMAX,
179                 ATTR_NOTHROW_LIST)
180 DEF_C99_BUILTIN(BUILT_IN_CONJ,
181                 "__builtin_conj",
182                 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
183                 ATTR_NOTHROW_LIST)
184 DEF_C99_BUILTIN(BUILT_IN_CONJF,
185                 "__builtin_conjf",
186                 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
187                 ATTR_NOTHROW_LIST)
188 DEF_C99_BUILTIN(BUILT_IN_CONJL,
189                 "__builtin_conjl",
190                 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
191                 ATTR_NOTHROW_LIST)
192 DEF_C99_BUILTIN(BUILT_IN_CREAL,
193                 "__builtin_creal",
194                 BT_FN_DOUBLE_COMPLEX_DOUBLE,
195                 ATTR_NOTHROW_LIST)
196 DEF_C99_BUILTIN(BUILT_IN_CREALF,
197                 "__builtin_crealf",
198                 BT_FN_FLOAT_COMPLEX_FLOAT,
199                 ATTR_NOTHROW_LIST)
200 DEF_C99_BUILTIN(BUILT_IN_CREALL,
201                 "__builtin_creall",
202                 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
203                 ATTR_NOTHROW_LIST)
204 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
205                 "__builtin_cimag",
206                 BT_FN_DOUBLE_COMPLEX_DOUBLE,
207                 ATTR_NOTHROW_LIST)
208 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
209                 "__builtin_cimagf",
210                 BT_FN_FLOAT_COMPLEX_FLOAT,
211                 ATTR_NOTHROW_LIST)
212 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
213                 "__builtin_cimagl",
214                 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
215                 ATTR_NOTHROW_LIST)
216
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)
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.  */
227 DEF_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)
234 DEF_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
242 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
243                     "__builtin_ffs",
244                     BT_FN_INT_INT,
245                     ATTR_CONST_NOTHROW_LIST)
246 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
247                     "__builtin_index",
248                     BT_FN_STRING_CONST_STRING_INT,
249                     ATTR_PURE_NOTHROW_LIST)
250 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
251                     "__builtin_rindex",
252                     BT_FN_STRING_CONST_STRING_INT,
253                     ATTR_PURE_NOTHROW_LIST)
254
255 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
256                 "__builtin_memcpy",
257                 BT_FN_PTR_PTR_CONST_PTR_SIZE,
258                 ATTR_NOTHROW_LIST)
259 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
260                 "__builtin_memcmp",
261                 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
262                 ATTR_PURE_NOTHROW_LIST)
263 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
264                 "__builtin_memset",
265                 BT_FN_PTR_PTR_INT_SIZE,
266                 ATTR_NOTHROW_LIST)
267
268 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
269                 "__builtin_strcat",
270                 BT_FN_STRING_STRING_CONST_STRING,
271                 ATTR_NOTHROW_LIST)
272 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
273                 "__builtin_strncat",
274                 BT_FN_STRING_STRING_CONST_STRING_SIZE,
275                 ATTR_NOTHROW_LIST)
276 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
277                 "__builtin_strcpy",
278                 BT_FN_STRING_STRING_CONST_STRING,
279                 ATTR_NOTHROW_LIST)
280 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
281                 "__builtin_strncpy",
282                 BT_FN_STRING_STRING_CONST_STRING_SIZE,
283                 ATTR_NOTHROW_LIST)
284 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
285                 "__builtin_strcmp",
286                 BT_FN_INT_CONST_STRING_CONST_STRING,
287                 ATTR_PURE_NOTHROW_LIST)
288 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
289                 "__builtin_strncmp",
290                 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
291                 ATTR_PURE_NOTHROW_LIST)
292 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
293                 "__builtin_strlen",
294                 BT_FN_SIZE_CONST_STRING,
295                 ATTR_PURE_NOTHROW_LIST)
296 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
297                 "__builtin_strstr",
298                 BT_FN_STRING_CONST_STRING_CONST_STRING,
299                 ATTR_PURE_NOTHROW_LIST)
300 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
301                 "__builtin_strpbrk",
302                 BT_FN_STRING_CONST_STRING_CONST_STRING,
303                 ATTR_PURE_NOTHROW_LIST)
304 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
305                 "__builtin_strspn",
306                 BT_FN_SIZE_CONST_STRING_CONST_STRING,
307                 ATTR_PURE_NOTHROW_LIST)
308 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
309                 "__builtin_strcspn",
310                 BT_FN_SIZE_CONST_STRING_CONST_STRING,
311                 ATTR_PURE_NOTHROW_LIST)
312 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
313                 "__builtin_strchr",
314                 BT_FN_STRING_CONST_STRING_INT,
315                 ATTR_PURE_NOTHROW_LIST)
316 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
317                 "__builtin_strrchr",
318                 BT_FN_STRING_CONST_STRING_INT,
319                 ATTR_PURE_NOTHROW_LIST)
320
321 DEF_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))
328 DEF_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)
333 DEF_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)
338 DEF_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))
345 DEF_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))
352 DEF_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))
359 DEF_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)
364 DEF_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)
369 DEF_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))
376 DEF_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))
383 DEF_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))
390 DEF_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)
395 DEF_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)
400 DEF_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))
407 DEF_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
415 DEF_GCC_BUILTIN(BUILT_IN_INF,
416                 "__builtin_inf",
417                 BT_FN_DOUBLE,
418                 ATTR_CONST_NOTHROW_LIST)
419 DEF_GCC_BUILTIN(BUILT_IN_INFF,
420                 "__builtin_inff",
421                 BT_FN_FLOAT,
422                 ATTR_CONST_NOTHROW_LIST)
423 DEF_GCC_BUILTIN(BUILT_IN_INFL,
424                 "__builtin_infl",
425                 BT_FN_LONG_DOUBLE,
426                 ATTR_CONST_NOTHROW_LIST)
427
428 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
429                 "__builtin_huge_val",
430                 BT_FN_DOUBLE,
431                 ATTR_CONST_NOTHROW_LIST)
432 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
433                 "__builtin_huge_valf",
434                 BT_FN_FLOAT,
435                 ATTR_CONST_NOTHROW_LIST)
436 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
437                 "__builtin_huge_vall",
438                 BT_FN_LONG_DOUBLE,
439                 ATTR_CONST_NOTHROW_LIST)
440
441 DEF_LIB_BUILTIN(BUILT_IN_NAN,
442                 "__builtin_nan",
443                 BT_FN_DOUBLE_CONST_STRING,
444                 ATTR_CONST_NOTHROW_LIST)
445 DEF_LIB_BUILTIN(BUILT_IN_NANF,
446                 "__builtin_nanf",
447                 BT_FN_FLOAT_CONST_STRING,
448                 ATTR_CONST_NOTHROW_LIST)
449 DEF_LIB_BUILTIN(BUILT_IN_NANL,
450                 "__builtin_nanl",
451                 BT_FN_LONG_DOUBLE_CONST_STRING,
452                 ATTR_CONST_NOTHROW_LIST)
453
454 DEF_LIB_BUILTIN(BUILT_IN_NANS,
455                 "__builtin_nans",
456                 BT_FN_DOUBLE_CONST_STRING,
457                 ATTR_CONST_NOTHROW_LIST)
458 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
459                 "__builtin_nansf",
460                 BT_FN_FLOAT_CONST_STRING,
461                 ATTR_CONST_NOTHROW_LIST)
462 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
463                 "__builtin_nansl",
464                 BT_FN_LONG_DOUBLE_CONST_STRING,
465                 ATTR_CONST_NOTHROW_LIST)
466
467 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
468                 "__builtin_saveregs",
469                 BT_FN_PTR_VAR,
470                 ATTR_NULL)
471 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
472                 "__builtin_classify_type",
473                 BT_FN_INT_VAR,
474                 ATTR_NULL)
475 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
476                 "__builtin_next_arg",
477                 BT_FN_PTR_VAR,
478                 ATTR_NULL)
479 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
480                 "__builtin_args_info",
481                 BT_FN_INT_INT,
482                 ATTR_NULL)
483 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 
484                 "__builtin_constant_p", 
485                 BT_FN_INT_VAR,
486                 ATTR_NULL)
487 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
488                 "__builtin_frame_address",
489                 BT_FN_PTR_UNSIGNED,
490                 ATTR_NULL)
491 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 
492                 "__builtin_return_address",
493                 BT_FN_PTR_UNSIGNED,
494                 ATTR_NULL)
495 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
496                 "__builtin_aggregate_incoming_address",
497                 BT_FN_PTR_VAR,
498                 ATTR_NULL)
499 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
500                 "__builtin_apply_args",
501                 BT_FN_PTR_VAR,
502                 ATTR_NULL)
503 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
504                 "__builtin_apply",
505                 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
506                 ATTR_NULL)
507 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
508                 "__builtin_return",
509                 BT_FN_VOID_PTR,
510                 ATTR_NORETURN_NOTHROW_LIST)
511 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
512                 "__builtin_setjmp",
513                 BT_FN_INT_PTR,
514                 ATTR_NULL)
515 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
516                 "__builtin_longjmp",
517                 BT_FN_VOID_PTR_INT,
518                 ATTR_NORETURN_NOTHROW_LIST)
519 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
520                 "__builtin_trap",
521                 BT_FN_VOID,
522                 ATTR_NORETURN_NOTHROW_LIST)
523 DEF_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
530 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
531                           "__builtin_printf",
532                           BT_FN_INT_CONST_STRING_VAR,
533                           ATTR_FORMAT_PRINTF_1_2)
534 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
535                 "__builtin_putchar",
536                 BT_FN_INT_INT,
537                 ATTR_NOTHROW_LIST)
538 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
539                 "__builtin_puts",
540                 BT_FN_INT_CONST_STRING,
541                 ATTR_NOTHROW_LIST)
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,
547                 "__builtin_sprintf",
548                 BT_FN_INT_STRING_CONST_STRING_VAR,
549                 ATTR_FORMAT_PRINTF_2_3)
550 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
551                 "__builtin_scanf",
552                 BT_FN_INT_CONST_STRING_VAR,
553                 ATTR_FORMAT_SCANF_1_2)
554 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
555                 "__builtin_sscanf",
556                 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
557                 ATTR_FORMAT_SCANF_2_3)
558 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
559                 "__builtin_vprintf",
560                 BT_FN_INT_CONST_STRING_VALIST_ARG,
561                 ATTR_FORMAT_PRINTF_1_0)
562 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
563                 "__builtin_vscanf",
564                 BT_FN_INT_CONST_STRING_VALIST_ARG,
565                 ATTR_FORMAT_SCANF_1_0)
566 DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
567                 "__builtin_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)
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
587 DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
588                      "__builtin_fputc",
589                      BT_FN_INT_INT_PTR,
590                      ATTR_NOTHROW_LIST)
591 DEF_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)
597 DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
598                      "__builtin_fwrite",
599                      BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
600                       ATTR_NOTHROW_LIST)
601 DEF_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
608 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
609                          "__builtin_putchar_unlocked",
610                          BT_FN_INT_INT)
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)
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
626 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
627                          "__builtin_fputc_unlocked",
628                          BT_FN_INT_INT_PTR)
629 DEF_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)
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)
642
643   /* ISO C99 floating point unordered comparisons.  */
644 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 
645                 "__builtin_isgreater",
646                 BT_FN_INT_VAR,
647                 ATTR_CONST_NOTHROW_LIST)
648 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
649                 "__builtin_isgreaterequal",
650                 BT_FN_INT_VAR,
651                 ATTR_CONST_NOTHROW_LIST)
652 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
653                 "__builtin_isless",
654                 BT_FN_INT_VAR,
655                 ATTR_CONST_NOTHROW_LIST)
656 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
657                 "__builtin_islessequal",
658                 BT_FN_INT_VAR,
659                 ATTR_CONST_NOTHROW_LIST)
660 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
661                 "__builtin_islessgreater",
662                 BT_FN_INT_VAR,
663                 ATTR_CONST_NOTHROW_LIST)
664 DEF_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.  */
670 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
671                 "__builtin_unwind_init",
672                 BT_FN_VOID,
673                 ATTR_NULL)
674 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
675                 "__builtin_dwarf_cfa",
676                 BT_FN_PTR,
677                 ATTR_NULL)
678 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
679                 "__builtin_dwarf_sp_column",
680                 BT_FN_UNSIGNED,
681                 ATTR_NULL)
682 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
683                 "__builtin_init_dwarf_reg_size_table",
684                 BT_FN_VOID_PTR,
685                 ATTR_NULL)
686 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
687                 "__builtin_frob_return_addr",
688                 BT_FN_PTR_PTR,
689                 ATTR_NULL)
690 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
691                 "__builtin_extract_return_addr",
692                 BT_FN_PTR_PTR,
693                 ATTR_NULL)
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",
700                 BT_FN_INT_INT,
701                 ATTR_NULL)
702
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,
707                 ATTR_NULL)
708 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START,          /* backward compat */
709                 "__builtin_stdarg_start",
710                 BT_FN_VOID_VALIST_REF_VAR,
711                 ATTR_NULL)
712 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
713                 "__builtin_va_end",
714                 BT_FN_VOID_VALIST_REF,
715                 ATTR_NULL)
716 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
717                 "__builtin_va_copy",
718                 BT_FN_VOID_VALIST_REF_VALIST_ARG,
719                 ATTR_NULL)
720
721 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
722                 "__builtin_expect",
723                 BT_FN_LONG_LONG_LONG,
724                 ATTR_NULL)
725
726 /* C++ extensions */
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)
731
732 /* Declare abort, exit, _exit and _Exit */
733 DEF_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
741 DEF_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
749 DEF_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
757 DEF_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