builtins.def: Defome atan...
[platform/upstream/gcc.git] / 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, 2002, 2003 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, IMPLICIT)
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    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
63    it.  */
64    
65 /* A GCC builtin (like __builtin_saveregs) is provided by the
66    compiler, but does not correspond to a function in the standard
67    library.  */
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)
72
73
74 /* A fallback builtin is a builtin (like __builtin_puts) that falls
75    back to the corresopnding library function if necessary -- but
76    for which we should not introduce the non-`__builtin' variant of
77    the name.  */
78 #undef DEF_FALLBACK_BUILTIN                             
79 #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS)   \
80   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
81                false, true, false, ATTRS, true)
82
83 /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
84    is specified by ANSI/ISO C.  So, when we're being fully conformant
85    we ignore the version of these builtins that does not begin with
86    __builtin.  */
87 #undef DEF_EXT_FALLBACK_BUILTIN
88 #define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS)       \
89   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
90                false, true, true, ATTRS, true)
91
92 /* A library builtin (like __builtin_strchr) is a builtin equivalent
93    of an ANSI/ISO standard library function.  In addition to the
94    `__builtin' version, we will create an ordinary version (e.g,
95    `strchr') as well.  If we cannot compute the answer using the
96    builtin function, we will fall back to the standard library
97    version.  */
98 #undef DEF_LIB_BUILTIN                                  
99 #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
100   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
101                true, true, false, ATTRS, true)
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, false)
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, TARGET_C99_FUNCTIONS)
118
119 /* Builtin that is specified by C99 and C90 reserve the name for future use.
120    We can still recognize the builtin in C90 mode but we can't produce it
121    implicitly.  */
122 #undef DEF_C99_C90RES_BUILTIN                                   
123 #define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
124   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
125                true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
126
127 /* Like DEF_LIB_BUILTIN, except that the function is expanded in the
128    front-end.  */
129 #undef DEF_FRONT_END_LIB_BUILTIN                        
130 #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)      \
131   DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,       \
132                true, true, false, ATTRS, true)
133
134 /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
135    that is specified by ANSI/ISO C.  So, when we're being fully
136    conformant we ignore the version of these builtins that does not
137    begin with __builtin.  */
138 #undef DEF_EXT_FRONT_END_LIB_BUILTIN                    
139 #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
140   DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,       \
141                true, true, true, ATTRS, true)
142
143 /* If SMALL_STACK is defined, then `alloca' is only defined in its
144    `__builtin' form.  */
145 #if SMALL_STACK  
146 DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
147                      "__builtin_alloca",
148                      BT_FN_PTR_SIZE,
149                      ATTR_MALLOC_NOTHROW_LIST)
150 #else
151 DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
152                     "__builtin_alloca",
153                     BT_FN_PTR_SIZE,
154                     ATTR_MALLOC_NOTHROW_LIST)
155 #endif
156
157 DEF_LIB_BUILTIN(BUILT_IN_ABS,
158                 "__builtin_abs",
159                 BT_FN_INT_INT,
160                 ATTR_CONST_NOTHROW_LIST)
161 DEF_LIB_BUILTIN(BUILT_IN_LABS,
162                 "__builtin_labs",
163                 BT_FN_LONG_LONG,
164                 ATTR_CONST_NOTHROW_LIST)
165
166 DEF_LIB_BUILTIN(BUILT_IN_FABS,
167                 "__builtin_fabs",
168                 BT_FN_DOUBLE_DOUBLE,
169                 ATTR_CONST_NOTHROW_LIST)
170 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
171                        "__builtin_fabsf",
172                        BT_FN_FLOAT_FLOAT,
173                        ATTR_CONST_NOTHROW_LIST)
174 DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
175                        "__builtin_fabsl",
176                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
177                        ATTR_CONST_NOTHROW_LIST)
178
179 DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
180                 "__builtin_floor",
181                 BT_FN_DOUBLE_DOUBLE,
182                 ATTR_CONST_NOTHROW_LIST)
183 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF,
184                        "__builtin_floorf",
185                        BT_FN_FLOAT_FLOAT,
186                        ATTR_CONST_NOTHROW_LIST)
187 DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL,
188                        "__builtin_floorl",
189                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
190                        ATTR_CONST_NOTHROW_LIST)
191
192 DEF_LIB_BUILTIN(BUILT_IN_CEIL,
193                 "__builtin_ceil",
194                 BT_FN_DOUBLE_DOUBLE,
195                 ATTR_CONST_NOTHROW_LIST)
196 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF,
197                        "__builtin_ceilf",
198                        BT_FN_FLOAT_FLOAT,
199                        ATTR_CONST_NOTHROW_LIST)
200 DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL,
201                        "__builtin_ceill",
202                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
203                        ATTR_CONST_NOTHROW_LIST)
204
205 DEF_C99_BUILTIN(BUILT_IN_ROUND,
206                 "__builtin_round",
207                 BT_FN_DOUBLE_DOUBLE,
208                 ATTR_CONST_NOTHROW_LIST)
209 DEF_C99_BUILTIN(BUILT_IN_ROUNDF,
210                 "__builtin_roundf",
211                 BT_FN_FLOAT_FLOAT,
212                 ATTR_CONST_NOTHROW_LIST)
213 DEF_C99_BUILTIN(BUILT_IN_ROUNDL,
214                 "__builtin_roundl",
215                 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
216                 ATTR_CONST_NOTHROW_LIST)
217
218 DEF_C99_BUILTIN(BUILT_IN_TRUNC,
219                 "__builtin_trunc",
220                 BT_FN_DOUBLE_DOUBLE,
221                 ATTR_CONST_NOTHROW_LIST)
222 DEF_C99_BUILTIN(BUILT_IN_TRUNCF,
223                 "__builtin_truncf",
224                 BT_FN_FLOAT_FLOAT,
225                 ATTR_CONST_NOTHROW_LIST)
226 DEF_C99_BUILTIN(BUILT_IN_TRUNCL,
227                 "__builtin_truncl",
228                 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
229                 ATTR_CONST_NOTHROW_LIST)
230
231 DEF_C99_BUILTIN(BUILT_IN_NEARBYINT,
232                 "__builtin_nearbyint",
233                 BT_FN_DOUBLE_DOUBLE,
234                 ATTR_CONST_NOTHROW_LIST)
235 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF,
236                 "__builtin_nearbyintf",
237                 BT_FN_FLOAT_FLOAT,
238                 ATTR_CONST_NOTHROW_LIST)
239 DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL,
240                 "__builtin_nearbyintl",
241                 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
242                 ATTR_CONST_NOTHROW_LIST)
243
244 DEF_C99_BUILTIN(BUILT_IN_LLABS,
245                 "__builtin_llabs",
246                 BT_FN_LONGLONG_LONGLONG,
247                 ATTR_CONST_NOTHROW_LIST)
248 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
249                 "__builtin_imaxabs",
250                 BT_FN_INTMAX_INTMAX,
251                 ATTR_CONST_NOTHROW_LIST)
252 DEF_C99_BUILTIN(BUILT_IN_CONJ,
253                 "__builtin_conj",
254                 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
255                 ATTR_CONST_NOTHROW_LIST)
256 DEF_C99_BUILTIN(BUILT_IN_CONJF,
257                 "__builtin_conjf",
258                 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
259                 ATTR_CONST_NOTHROW_LIST)
260 DEF_C99_BUILTIN(BUILT_IN_CONJL,
261                 "__builtin_conjl",
262                 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
263                 ATTR_CONST_NOTHROW_LIST)
264 DEF_C99_BUILTIN(BUILT_IN_CREAL,
265                 "__builtin_creal",
266                 BT_FN_DOUBLE_COMPLEX_DOUBLE,
267                 ATTR_CONST_NOTHROW_LIST)
268 DEF_C99_BUILTIN(BUILT_IN_CREALF,
269                 "__builtin_crealf",
270                 BT_FN_FLOAT_COMPLEX_FLOAT,
271                 ATTR_CONST_NOTHROW_LIST)
272 DEF_C99_BUILTIN(BUILT_IN_CREALL,
273                 "__builtin_creall",
274                 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
275                 ATTR_CONST_NOTHROW_LIST)
276 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
277                 "__builtin_cimag",
278                 BT_FN_DOUBLE_COMPLEX_DOUBLE,
279                 ATTR_CONST_NOTHROW_LIST)
280 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
281                 "__builtin_cimagf",
282                 BT_FN_FLOAT_COMPLEX_FLOAT,
283                 ATTR_CONST_NOTHROW_LIST)
284 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
285                 "__builtin_cimagl",
286                 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
287                 ATTR_CONST_NOTHROW_LIST)
288
289 /* The system prototypes for `bzero', 'bcopy' and `bcmp' functions
290    have many variations, so don't specify parameters to avoid
291    conflicts.  The expand_* functions check the argument types anyway.
292    In addition, these functions have traditionally accepted NULL
293    pointers when the length parameter is zero, so don't apply
294    attribute "nonnull".  */
295 DEF_BUILTIN (BUILT_IN_BZERO,
296              "__builtin_bzero",
297              BUILT_IN_NORMAL,
298              BT_FN_VOID_PTR_SIZE, 
299              BT_FN_VOID_VAR,
300              true, true, true,
301              ATTR_NOTHROW_LIST, false)
302 DEF_BUILTIN (BUILT_IN_BCOPY,
303              "__builtin_bcopy",
304              BUILT_IN_NORMAL,
305              BT_FN_VOID_CONST_PTR_PTR_SIZE, 
306              BT_FN_VOID_VAR,
307              true, true, true,
308              ATTR_NOTHROW_LIST, false)
309 DEF_BUILTIN (BUILT_IN_BCMP,
310              "__builtin_bcmp",
311              BUILT_IN_NORMAL,
312              BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
313              BT_FN_INT_VAR,
314              true, true, true,
315              ATTR_PURE_NOTHROW_LIST, false)
316
317 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
318                     "__builtin_ffs",
319                     BT_FN_INT_INT,
320                     ATTR_CONST_NOTHROW_LIST)
321 DEF_GCC_BUILTIN(BUILT_IN_CLZ,
322                     "__builtin_clz",
323                     BT_FN_INT_INT,
324                     ATTR_CONST_NOTHROW_LIST)
325 DEF_GCC_BUILTIN(BUILT_IN_CTZ,
326                     "__builtin_ctz",
327                     BT_FN_INT_INT,
328                     ATTR_CONST_NOTHROW_LIST)
329 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT,
330                     "__builtin_popcount",
331                     BT_FN_INT_INT,
332                     ATTR_CONST_NOTHROW_LIST)
333 DEF_GCC_BUILTIN(BUILT_IN_PARITY,
334                     "__builtin_parity",
335                     BT_FN_INT_INT,
336                     ATTR_CONST_NOTHROW_LIST)
337
338 DEF_GCC_BUILTIN(BUILT_IN_FFSL,
339                     "__builtin_ffsl",
340                     BT_FN_INT_LONG,
341                     ATTR_CONST_NOTHROW_LIST)
342 DEF_GCC_BUILTIN(BUILT_IN_CLZL,
343                     "__builtin_clzl",
344                     BT_FN_INT_LONG,
345                     ATTR_CONST_NOTHROW_LIST)
346 DEF_GCC_BUILTIN(BUILT_IN_CTZL,
347                     "__builtin_ctzl",
348                     BT_FN_INT_LONG,
349                     ATTR_CONST_NOTHROW_LIST)
350 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL,
351                     "__builtin_popcountl",
352                     BT_FN_INT_LONG,
353                     ATTR_CONST_NOTHROW_LIST)
354 DEF_GCC_BUILTIN(BUILT_IN_PARITYL,
355                     "__builtin_parityl",
356                     BT_FN_INT_LONG,
357                     ATTR_CONST_NOTHROW_LIST)
358
359 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL,
360                     "__builtin_ffsll",
361                     BT_FN_INT_LONGLONG,
362                     ATTR_CONST_NOTHROW_LIST)
363 DEF_GCC_BUILTIN(BUILT_IN_CLZLL,
364                     "__builtin_clzll",
365                     BT_FN_INT_LONGLONG,
366                     ATTR_CONST_NOTHROW_LIST)
367 DEF_GCC_BUILTIN(BUILT_IN_CTZLL,
368                     "__builtin_ctzll",
369                     BT_FN_INT_LONGLONG,
370                     ATTR_CONST_NOTHROW_LIST)
371 DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL,
372                     "__builtin_popcountll",
373                     BT_FN_INT_LONGLONG,
374                     ATTR_CONST_NOTHROW_LIST)
375 DEF_GCC_BUILTIN(BUILT_IN_PARITYLL,
376                     "__builtin_parityll",
377                     BT_FN_INT_LONGLONG,
378                     ATTR_CONST_NOTHROW_LIST)
379
380 DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
381                     "__builtin_index",
382                     BT_FN_STRING_CONST_STRING_INT,
383                     ATTR_PURE_NOTHROW_NONNULL_1)
384 DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
385                     "__builtin_rindex",
386                     BT_FN_STRING_CONST_STRING_INT,
387                     ATTR_PURE_NOTHROW_NONNULL_1)
388
389 DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
390                 "__builtin_memcpy",
391                 BT_FN_PTR_PTR_CONST_PTR_SIZE,
392                 ATTR_NOTHROW_NONNULL_1_2)
393 DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE,
394                 "__builtin_memmove",
395                 BT_FN_PTR_PTR_CONST_PTR_SIZE,
396                 ATTR_NOTHROW_NONNULL_1_2)
397 DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
398                 "__builtin_memcmp",
399                 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
400                 ATTR_PURE_NOTHROW_NONNULL_1_2)
401 DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
402                 "__builtin_memset",
403                 BT_FN_PTR_PTR_INT_SIZE,
404                 ATTR_NOTHROW_NONNULL_1)
405 DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY,
406                 "__builtin_mempcpy",
407                 BT_FN_PTR_PTR_CONST_PTR_SIZE,
408                 ATTR_NOTHROW_NONNULL_1_2)
409
410 DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
411                 "__builtin_strcat",
412                 BT_FN_STRING_STRING_CONST_STRING,
413                 ATTR_NOTHROW_NONNULL_1_2)
414 DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
415                 "__builtin_strncat",
416                 BT_FN_STRING_STRING_CONST_STRING_SIZE,
417                 ATTR_NOTHROW_NONNULL_1_2)
418 DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY,
419                 "__builtin_stpcpy",
420                 BT_FN_STRING_STRING_CONST_STRING,
421                 ATTR_NOTHROW_NONNULL_1_2)
422 DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
423                 "__builtin_strcpy",
424                 BT_FN_STRING_STRING_CONST_STRING,
425                 ATTR_NOTHROW_NONNULL_1_2)
426 DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
427                 "__builtin_strncpy",
428                 BT_FN_STRING_STRING_CONST_STRING_SIZE,
429                 ATTR_NOTHROW_NONNULL_1_2)
430 DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
431                 "__builtin_strcmp",
432                 BT_FN_INT_CONST_STRING_CONST_STRING,
433                 ATTR_PURE_NOTHROW_NONNULL_1_2)
434 DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
435                 "__builtin_strncmp",
436                 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
437                 ATTR_PURE_NOTHROW_NONNULL_1_2)
438 DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
439                 "__builtin_strlen",
440                 BT_FN_SIZE_CONST_STRING,
441                 ATTR_PURE_NOTHROW_NONNULL_1)
442 DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
443                 "__builtin_strstr",
444                 BT_FN_STRING_CONST_STRING_CONST_STRING,
445                 ATTR_PURE_NOTHROW_NONNULL_1_2)
446 DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
447                 "__builtin_strpbrk",
448                 BT_FN_STRING_CONST_STRING_CONST_STRING,
449                 ATTR_PURE_NOTHROW_NONNULL_1_2)
450 DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
451                 "__builtin_strspn",
452                 BT_FN_SIZE_CONST_STRING_CONST_STRING,
453                 ATTR_PURE_NOTHROW_NONNULL_1_2)
454 DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
455                 "__builtin_strcspn",
456                 BT_FN_SIZE_CONST_STRING_CONST_STRING,
457                 ATTR_PURE_NOTHROW_NONNULL_1_2)
458 DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
459                 "__builtin_strchr",
460                 BT_FN_STRING_CONST_STRING_INT,
461                 ATTR_PURE_NOTHROW_NONNULL_1)
462 DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
463                 "__builtin_strrchr",
464                 BT_FN_STRING_CONST_STRING_INT,
465                 ATTR_PURE_NOTHROW_NONNULL_1)
466
467 DEF_LIB_BUILTIN(BUILT_IN_SQRT,
468                 "__builtin_sqrt",
469                 BT_FN_DOUBLE_DOUBLE,
470                 flag_errno_math ? ATTR_NOTHROW_LIST
471                                 : (flag_unsafe_math_optimizations
472                                    ? ATTR_CONST_NOTHROW_LIST
473                                    : ATTR_PURE_NOTHROW_LIST))
474 DEF_LIB_BUILTIN(BUILT_IN_SIN,
475                 "__builtin_sin",
476                 BT_FN_DOUBLE_DOUBLE,
477                 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
478                                                : ATTR_PURE_NOTHROW_LIST)
479 DEF_LIB_BUILTIN(BUILT_IN_COS,
480                 "__builtin_cos",
481                 BT_FN_DOUBLE_DOUBLE,
482                 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
483                                                : ATTR_PURE_NOTHROW_LIST)
484 DEF_LIB_BUILTIN(BUILT_IN_EXP,
485                 "__builtin_exp",
486                 BT_FN_DOUBLE_DOUBLE,
487                 flag_errno_math ? ATTR_NOTHROW_LIST
488                                 : (flag_unsafe_math_optimizations
489                                    ? ATTR_CONST_NOTHROW_LIST
490                                    : ATTR_PURE_NOTHROW_LIST))
491 DEF_LIB_BUILTIN(BUILT_IN_LOG,
492                 "__builtin_log",
493                 BT_FN_DOUBLE_DOUBLE,
494                 flag_errno_math ? ATTR_NOTHROW_LIST
495                                 : (flag_unsafe_math_optimizations
496                                    ? ATTR_CONST_NOTHROW_LIST
497                                    : ATTR_PURE_NOTHROW_LIST))
498 DEF_LIB_BUILTIN(BUILT_IN_TAN,
499                 "__builtin_tan",
500                 BT_FN_DOUBLE_DOUBLE,
501                 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
502                                                : ATTR_PURE_NOTHROW_LIST)
503 DEF_LIB_BUILTIN(BUILT_IN_ATAN,
504                 "__builtin_atan",
505                 BT_FN_DOUBLE_DOUBLE,
506                 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
507                                                : ATTR_PURE_NOTHROW_LIST)
508 DEF_LIB_BUILTIN(BUILT_IN_POW,
509                 "__builtin_pow",
510                 BT_FN_DOUBLE_DOUBLE_DOUBLE,
511                 flag_errno_math ? ATTR_NOTHROW_LIST
512                                 : (flag_unsafe_math_optimizations
513                                    ? ATTR_CONST_NOTHROW_LIST
514                                    : ATTR_PURE_NOTHROW_LIST))
515 DEF_LIB_BUILTIN(BUILT_IN_ATAN2,
516                 "__builtin_atan2",
517                 BT_FN_DOUBLE_DOUBLE_DOUBLE,
518                 flag_errno_math ? ATTR_NOTHROW_LIST
519                                 : (flag_unsafe_math_optimizations
520                                    ? ATTR_CONST_NOTHROW_LIST
521                                    : ATTR_PURE_NOTHROW_LIST))
522 DEF_LIB_BUILTIN(BUILT_IN_FMOD,
523                 "__builtin_fmod",
524                 BT_FN_DOUBLE_DOUBLE_DOUBLE,
525                 flag_errno_math ? ATTR_NOTHROW_LIST
526                                 : (flag_unsafe_math_optimizations
527                                    ? ATTR_CONST_NOTHROW_LIST
528                                    : ATTR_PURE_NOTHROW_LIST))
529 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
530                        "__builtin_sqrtf",
531                        BT_FN_FLOAT_FLOAT,
532                        flag_errno_math ? ATTR_NOTHROW_LIST
533                                        : (flag_unsafe_math_optimizations
534                                           ? ATTR_CONST_NOTHROW_LIST
535                                           : ATTR_PURE_NOTHROW_LIST))
536 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
537                        "__builtin_sinf",
538                        BT_FN_FLOAT_FLOAT,
539                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
540                                                       : ATTR_PURE_NOTHROW_LIST)
541 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
542                        "__builtin_cosf",
543                        BT_FN_FLOAT_FLOAT,
544                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
545                                                       : ATTR_PURE_NOTHROW_LIST)
546 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
547                        "__builtin_expf",
548                        BT_FN_FLOAT_FLOAT,
549                        flag_errno_math ? ATTR_NOTHROW_LIST
550                                        : (flag_unsafe_math_optimizations
551                                           ? ATTR_CONST_NOTHROW_LIST
552                                           : ATTR_PURE_NOTHROW_LIST))
553 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
554                        "__builtin_logf",
555                        BT_FN_FLOAT_FLOAT,
556                        flag_errno_math ? ATTR_NOTHROW_LIST
557                                        : (flag_unsafe_math_optimizations
558                                           ? ATTR_CONST_NOTHROW_LIST
559                                           : ATTR_PURE_NOTHROW_LIST))
560 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
561                        "__builtin_tanf",
562                        BT_FN_FLOAT_FLOAT,
563                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
564                                                       : ATTR_PURE_NOTHROW_LIST)
565 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF,
566                        "__builtin_atanf",
567                        BT_FN_FLOAT_FLOAT,
568                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
569                                                       : ATTR_PURE_NOTHROW_LIST)
570 DEF_C99_C90RES_BUILTIN(BUILT_IN_POWF,
571                        "__builtin_powf",
572                        BT_FN_FLOAT_FLOAT_FLOAT,
573                        flag_errno_math ? ATTR_NOTHROW_LIST
574                                        : (flag_unsafe_math_optimizations
575                                           ? ATTR_CONST_NOTHROW_LIST
576                                           : ATTR_PURE_NOTHROW_LIST))
577 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2F,
578                        "__builtin_atan2f",
579                        BT_FN_FLOAT_FLOAT_FLOAT,
580                        flag_errno_math ? ATTR_NOTHROW_LIST
581                                        : (flag_unsafe_math_optimizations
582                                           ? ATTR_CONST_NOTHROW_LIST
583                                           : ATTR_PURE_NOTHROW_LIST))
584 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF,
585                        "__builtin_fmodf",
586                        BT_FN_FLOAT_FLOAT_FLOAT,
587                        flag_errno_math ? ATTR_NOTHROW_LIST
588                                        : (flag_unsafe_math_optimizations
589                                           ? ATTR_CONST_NOTHROW_LIST
590                                           : ATTR_PURE_NOTHROW_LIST))
591 DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
592                        "__builtin_sqrtl",
593                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
594                        flag_errno_math ? ATTR_NOTHROW_LIST
595                                        : (flag_unsafe_math_optimizations
596                                           ? ATTR_CONST_NOTHROW_LIST
597                                           : ATTR_PURE_NOTHROW_LIST))
598 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
599                        "__builtin_sinl",
600                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
601                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
602                                                       : ATTR_PURE_NOTHROW_LIST)
603 DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
604                        "__builtin_cosl",
605                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
606                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
607                                                       : ATTR_PURE_NOTHROW_LIST)
608 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
609                        "__builtin_expl",
610                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
611                        flag_errno_math ? ATTR_NOTHROW_LIST
612                                        : (flag_unsafe_math_optimizations
613                                           ? ATTR_CONST_NOTHROW_LIST
614                                           : ATTR_PURE_NOTHROW_LIST))
615 DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
616                        "__builtin_logl",
617                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
618                        flag_errno_math ? ATTR_NOTHROW_LIST
619                                        : (flag_unsafe_math_optimizations
620                                           ? ATTR_CONST_NOTHROW_LIST
621                                           : ATTR_PURE_NOTHROW_LIST))
622 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
623                        "__builtin_tanl",
624                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
625                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
626                                                       : ATTR_PURE_NOTHROW_LIST)
627 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL,
628                        "__builtin_atanl",
629                        BT_FN_LONG_DOUBLE_LONG_DOUBLE,
630                        flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
631                                                       : ATTR_PURE_NOTHROW_LIST)
632 DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL,
633                        "__builtin_powl",
634                        BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
635                        flag_errno_math ? ATTR_NOTHROW_LIST
636                                        : (flag_unsafe_math_optimizations
637                                           ? ATTR_CONST_NOTHROW_LIST
638                                           : ATTR_PURE_NOTHROW_LIST))
639 DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L,
640                        "__builtin_atan2l",
641                        BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
642                        flag_errno_math ? ATTR_NOTHROW_LIST
643                                        : (flag_unsafe_math_optimizations
644                                           ? ATTR_CONST_NOTHROW_LIST
645                                           : ATTR_PURE_NOTHROW_LIST))
646 DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL,
647                        "__builtin_fmodl",
648                        BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
649                        flag_errno_math ? ATTR_NOTHROW_LIST
650                                        : (flag_unsafe_math_optimizations
651                                           ? ATTR_CONST_NOTHROW_LIST
652                                           : ATTR_PURE_NOTHROW_LIST))
653
654 DEF_GCC_BUILTIN(BUILT_IN_INF,
655                 "__builtin_inf",
656                 BT_FN_DOUBLE,
657                 ATTR_CONST_NOTHROW_LIST)
658 DEF_GCC_BUILTIN(BUILT_IN_INFF,
659                 "__builtin_inff",
660                 BT_FN_FLOAT,
661                 ATTR_CONST_NOTHROW_LIST)
662 DEF_GCC_BUILTIN(BUILT_IN_INFL,
663                 "__builtin_infl",
664                 BT_FN_LONG_DOUBLE,
665                 ATTR_CONST_NOTHROW_LIST)
666
667 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
668                 "__builtin_huge_val",
669                 BT_FN_DOUBLE,
670                 ATTR_CONST_NOTHROW_LIST)
671 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
672                 "__builtin_huge_valf",
673                 BT_FN_FLOAT,
674                 ATTR_CONST_NOTHROW_LIST)
675 DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
676                 "__builtin_huge_vall",
677                 BT_FN_LONG_DOUBLE,
678                 ATTR_CONST_NOTHROW_LIST)
679
680 DEF_LIB_BUILTIN(BUILT_IN_NAN,
681                 "__builtin_nan",
682                 BT_FN_DOUBLE_CONST_STRING,
683                 ATTR_CONST_NOTHROW_NONNULL_1)
684 DEF_LIB_BUILTIN(BUILT_IN_NANF,
685                 "__builtin_nanf",
686                 BT_FN_FLOAT_CONST_STRING,
687                 ATTR_CONST_NOTHROW_NONNULL_1)
688 DEF_LIB_BUILTIN(BUILT_IN_NANL,
689                 "__builtin_nanl",
690                 BT_FN_LONG_DOUBLE_CONST_STRING,
691                 ATTR_CONST_NOTHROW_NONNULL_1)
692
693 DEF_LIB_BUILTIN(BUILT_IN_NANS,
694                 "__builtin_nans",
695                 BT_FN_DOUBLE_CONST_STRING,
696                 ATTR_CONST_NOTHROW_NONNULL_1)
697 DEF_LIB_BUILTIN(BUILT_IN_NANSF,
698                 "__builtin_nansf",
699                 BT_FN_FLOAT_CONST_STRING,
700                 ATTR_CONST_NOTHROW_NONNULL_1)
701 DEF_LIB_BUILTIN(BUILT_IN_NANSL,
702                 "__builtin_nansl",
703                 BT_FN_LONG_DOUBLE_CONST_STRING,
704                 ATTR_CONST_NOTHROW_NONNULL_1)
705
706 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
707                 "__builtin_saveregs",
708                 BT_FN_PTR_VAR,
709                 ATTR_NULL)
710 DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
711                 "__builtin_classify_type",
712                 BT_FN_INT_VAR,
713                 ATTR_NULL)
714 DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
715                 "__builtin_next_arg",
716                 BT_FN_PTR_VAR,
717                 ATTR_NULL)
718 DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
719                 "__builtin_args_info",
720                 BT_FN_INT_INT,
721                 ATTR_NULL)
722 DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 
723                 "__builtin_constant_p", 
724                 BT_FN_INT_VAR,
725                 ATTR_CONST_NOTHROW_LIST)
726 DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
727                 "__builtin_frame_address",
728                 BT_FN_PTR_UNSIGNED,
729                 ATTR_NULL)
730 DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 
731                 "__builtin_return_address",
732                 BT_FN_PTR_UNSIGNED,
733                 ATTR_NULL)
734 DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
735                 "__builtin_aggregate_incoming_address",
736                 BT_FN_PTR_VAR,
737                 ATTR_NULL)
738 DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
739                 "__builtin_apply_args",
740                 BT_FN_PTR_VAR,
741                 ATTR_NULL)
742 DEF_GCC_BUILTIN(BUILT_IN_APPLY,
743                 "__builtin_apply",
744                 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
745                 ATTR_NULL)
746 DEF_GCC_BUILTIN(BUILT_IN_RETURN,
747                 "__builtin_return",
748                 BT_FN_VOID_PTR,
749                 ATTR_NORETURN_NOTHROW_LIST)
750 DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
751                 "__builtin_setjmp",
752                 BT_FN_INT_PTR,
753                 ATTR_NULL)
754 DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
755                 "__builtin_longjmp",
756                 BT_FN_VOID_PTR_INT,
757                 ATTR_NORETURN_NOTHROW_LIST)
758 DEF_GCC_BUILTIN(BUILT_IN_TRAP,
759                 "__builtin_trap",
760                 BT_FN_VOID,
761                 ATTR_NORETURN_NOTHROW_LIST)
762 DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
763                 "__builtin_prefetch",
764                 BT_FN_VOID_CONST_PTR_VAR,
765                 ATTR_NULL)
766
767 /* stdio.h builtins (without FILE *).  */
768
769 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
770                           "__builtin_printf",
771                           BT_FN_INT_CONST_STRING_VAR,
772                           ATTR_FORMAT_PRINTF_1_2)
773 DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
774                 "__builtin_putchar",
775                 BT_FN_INT_INT,
776                 ATTR_NOTHROW_LIST)
777 DEF_LIB_BUILTIN(BUILT_IN_PUTS,
778                 "__builtin_puts",
779                 BT_FN_INT_CONST_STRING,
780                 ATTR_NOTHROW_NONNULL_1)
781 DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
782                 "__builtin_snprintf",
783                 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
784                 ATTR_FORMAT_PRINTF_3_4)
785 DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
786                 "__builtin_sprintf",
787                 BT_FN_INT_STRING_CONST_STRING_VAR,
788                 ATTR_FORMAT_PRINTF_2_3)
789 DEF_LIB_BUILTIN(BUILT_IN_SCANF,
790                 "__builtin_scanf",
791                 BT_FN_INT_CONST_STRING_VAR,
792                 ATTR_FORMAT_SCANF_1_2)
793 DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
794                 "__builtin_sscanf",
795                 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
796                 ATTR_FORMAT_SCANF_2_3)
797 DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
798                 "__builtin_vprintf",
799                 BT_FN_INT_CONST_STRING_VALIST_ARG,
800                 ATTR_FORMAT_PRINTF_1_0)
801 DEF_C99_BUILTIN(BUILT_IN_VSCANF,
802                 "__builtin_vscanf",
803                 BT_FN_INT_CONST_STRING_VALIST_ARG,
804                 ATTR_FORMAT_SCANF_1_0)
805 DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
806                 "__builtin_vsscanf",
807                 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
808                 ATTR_FORMAT_SCANF_2_0)
809 DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
810                 "__builtin_vsnprintf",
811                 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
812                 ATTR_FORMAT_PRINTF_3_0)
813 DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
814                 "__builtin_vsprintf",
815                 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
816                 ATTR_FORMAT_PRINTF_2_0)
817
818
819 /* stdio.h builtins (with FILE *).  */
820
821 /* Declare the __builtin_ style with arguments and the regular style
822    without them.  We rely on stdio.h to supply the arguments for the
823    regular style declaration since we had to use void* instead of
824    FILE* in the __builtin_ prototype supplied here.  */
825
826 DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
827                      "__builtin_fputc",
828                      BT_FN_INT_INT_PTR,
829                      ATTR_NOTHROW_NONNULL_2)
830 DEF_BUILTIN (BUILT_IN_FPUTS,
831              "__builtin_fputs",
832              BUILT_IN_NORMAL,
833              BT_FN_INT_CONST_STRING_PTR,
834              BT_FN_INT_VAR,
835              true, true, false, ATTR_NOTHROW_NONNULL_1_2, true)
836 DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
837                      "__builtin_fwrite",
838                      BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
839                       ATTR_NOTHROW_NONNULL_1_4)
840 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
841                          "__builtin_fprintf",
842                          BT_FN_INT_PTR_CONST_STRING_VAR,
843                          ATTR_FORMAT_PRINTF_2_3)
844
845 /* stdio unlocked builtins (without FILE *).  */
846
847 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
848                          "__builtin_putchar_unlocked",
849                          BT_FN_INT_INT, ATTR_NOTHROW_LIST)
850 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
851                          "__builtin_puts_unlocked",
852                          BT_FN_INT_CONST_STRING, ATTR_NOTHROW_NONNULL_1)
853 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
854                               "__builtin_printf_unlocked",
855                               BT_FN_INT_CONST_STRING_VAR,
856                               ATTR_FORMAT_PRINTF_1_2)
857
858 /* stdio unlocked builtins (with FILE *).  */
859
860 /* Declare the __builtin_ style with arguments and the regular style
861    without them.  We rely on stdio.h to supply the arguments for the
862    regular style declaration since we had to use void* instead of
863    FILE* in the __builtin_ prototype supplied here.  */
864
865 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
866                          "__builtin_fputc_unlocked",
867                          BT_FN_INT_INT_PTR, ATTR_NOTHROW_NONNULL_2)
868 DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
869              "__builtin_fputs_unlocked",
870              BUILT_IN_NORMAL,
871              BT_FN_INT_CONST_STRING_PTR,
872              BT_FN_INT_VAR,
873              true, true, true, ATTR_NOTHROW_NONNULL_1_2, true)
874 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
875                          "__builtin_fwrite_unlocked",
876                          BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, ATTR_NOTHROW_NONNULL_1_4)
877 DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
878                               "__builtin_fprintf_unlocked",
879                               BT_FN_INT_PTR_CONST_STRING_VAR,
880                               ATTR_FORMAT_PRINTF_2_3)
881
882   /* ISO C99 floating point unordered comparisons.  */
883 DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 
884                 "__builtin_isgreater",
885                 BT_FN_INT_VAR,
886                 ATTR_CONST_NOTHROW_LIST)
887 DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
888                 "__builtin_isgreaterequal",
889                 BT_FN_INT_VAR,
890                 ATTR_CONST_NOTHROW_LIST)
891 DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
892                 "__builtin_isless",
893                 BT_FN_INT_VAR,
894                 ATTR_CONST_NOTHROW_LIST)
895 DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
896                 "__builtin_islessequal",
897                 BT_FN_INT_VAR,
898                 ATTR_CONST_NOTHROW_LIST)
899 DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
900                 "__builtin_islessgreater",
901                 BT_FN_INT_VAR,
902                 ATTR_CONST_NOTHROW_LIST)
903 DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
904                 "__builtin_isunordered",
905                 BT_FN_INT_VAR,
906                 ATTR_CONST_NOTHROW_LIST)
907
908 /* Various hooks for the DWARF 2 __throw routine.  */
909 DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
910                 "__builtin_unwind_init",
911                 BT_FN_VOID,
912                 ATTR_NULL)
913 DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
914                 "__builtin_dwarf_cfa",
915                 BT_FN_PTR,
916                 ATTR_NULL)
917 DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
918                 "__builtin_dwarf_sp_column",
919                 BT_FN_UNSIGNED,
920                 ATTR_NULL)
921 DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
922                 "__builtin_init_dwarf_reg_size_table",
923                 BT_FN_VOID_PTR,
924                 ATTR_NULL)
925 DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
926                 "__builtin_frob_return_addr",
927                 BT_FN_PTR_PTR,
928                 ATTR_NULL)
929 DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
930                 "__builtin_extract_return_addr",
931                 BT_FN_PTR_PTR,
932                 ATTR_NULL)
933 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
934                 "__builtin_eh_return",
935                 BT_FN_VOID_PTRMODE_PTR,
936                 ATTR_NORETURN_NOTHROW_LIST)
937 DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
938                 "__builtin_eh_return_data_regno",
939                 BT_FN_INT_INT,
940                 ATTR_NULL)
941
942 /* Variable argument list (stdarg.h) support */
943 DEF_GCC_BUILTIN(BUILT_IN_VA_START,
944                 "__builtin_va_start",
945                 BT_FN_VOID_VALIST_REF_VAR,
946                 ATTR_NULL)
947 DEF_GCC_BUILTIN(BUILT_IN_STDARG_START,          /* backward compat */
948                 "__builtin_stdarg_start",
949                 BT_FN_VOID_VALIST_REF_VAR,
950                 ATTR_NULL)
951 DEF_GCC_BUILTIN(BUILT_IN_VA_END,
952                 "__builtin_va_end",
953                 BT_FN_VOID_VALIST_REF,
954                 ATTR_NULL)
955 DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
956                 "__builtin_va_copy",
957                 BT_FN_VOID_VALIST_REF_VALIST_ARG,
958                 ATTR_NULL)
959
960 DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
961                 "__builtin_expect",
962                 BT_FN_LONG_LONG_LONG,
963                 ATTR_NULL)
964
965 /* Declare abort, exit, _exit and _Exit */
966 DEF_LIB_BUILTIN(BUILT_IN_ABORT,
967                  "__builtin_abort",
968                 BT_FN_VOID,
969                 ATTR_NORETURN_NOTHROW_LIST)
970 DEF_LIB_BUILTIN(BUILT_IN_EXIT,
971                 "__builtin_exit",
972                 BT_FN_VOID_INT,
973                 ATTR_NORETURN_NOTHROW_LIST)
974 DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
975                     "__builtin__exit",
976                     BT_FN_VOID_INT,
977                     ATTR_NORETURN_NOTHROW_LIST)
978 DEF_C99_BUILTIN(BUILT_IN__EXIT2,
979                 "__builtin__Exit",
980                 BT_FN_VOID_INT,
981                 ATTR_NORETURN_NOTHROW_LIST)
982
983 /* Declare malloc, calloc and strdup.  */
984 DEF_LIB_BUILTIN(BUILT_IN_MALLOC,
985                 "__builtin_malloc",
986                 BT_FN_PTR_SIZE,
987                 ATTR_MALLOC_NOTHROW_LIST)
988
989 DEF_LIB_BUILTIN(BUILT_IN_CALLOC,
990                 "__builtin_calloc",
991                 BT_FN_PTR_SIZE_SIZE,
992                 ATTR_MALLOC_NOTHROW_LIST)
993
994 DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP,
995                     "__builtin_strdup",
996                     BT_FN_STRING_CONST_STRING,
997                     ATTR_MALLOC_NOTHROW_NONNULL_1)
998