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