OSDN Git Service

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