source: trunk/src/gcc/gcc/builtins.def@ 1392

Last change on this file since 1392 was 1392, checked in by bird, 21 years ago

This commit was generated by cvs2svn to compensate for changes in r1391,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 23.1 KB
Line 
1/* This file contains the definitions and documentation for the
2 builtins used in the GNU compiler.
3 Copyright (C) 2000, 2001 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
21
22/* Before including this file, you should define a macro:
23
24 DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
25 FALLBACK_P, NONANSI_P, ATTRS)
26
27 This macro will be called once for each builtin function. The
28 ENUM will be of type `enum built_in_function', and will indicate
29 which builtin function is being processed. The NAME of the builtin
30 function (which will always start with `__builtin_') is a string
31 literal. The CLASS is of type `enum built_in_class' and indicates
32 what kind of builtin is being processed.
33
34 Some builtins are actually two separate functions. For example,
35 for `strcmp' there are two builtin functions; `__builtin_strcmp'
36 and `strcmp' itself. Both behave identically. Other builtins
37 define only the `__builtin' variant. If BOTH_P is TRUE, then this
38 builtin has both variants; otherwise, it is has only the first
39 variant.
40
41 TYPE indicates the type of the function. The symbols correspond to
42 enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE
43 is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE
44 should be ignored.
45
46 If FALLBACK_P is true then, if for some reason, the compiler cannot
47 expand the builtin function directly, it will call the
48 corresponding library function (which does not have the
49 `__builtin_' prefix.
50
51 If NONANSI_P is true, then the non-`__builtin_' variant is not an
52 ANSI/ISO library function, and so we should pretend it does not
53 exist when compiling in ANSI conformant mode.
54
55 ATTRs is an attribute list as defined in builtin-attrs.def that
56 describes the attributes of this builtin function. */
57
58/* A GCC builtin (like __builtin_saveregs) is provided by the
59 compiler, but does not correspond to a function in the standard
60 library. */
61#undef DEF_GCC_BUILTIN
62#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
63 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \
64 false, false, false, ATTRS)
65
66
67/* A fallback builtin is a builtin (like __builtin_puts) that falls
68 back to the corresopnding library function if necessary -- but
69 for which we should not introduce the non-`__builtin' variant of
70 the name. */
71#undef DEF_FALLBACK_BUILTIN
72#define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
73 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
74 false, true, false, ATTRS)
75
76/* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
77 is specified by ANSI/ISO C. So, when we're being fully conformant
78 we ignore the version of these builtins that does not begin with
79 __builtin. */
80#undef DEF_EXT_FALLBACK_BUILTIN
81#define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \
82 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
83 false, true, true, ATTR_NOTHROW_LIST)
84
85/* A library builtin (like __builtin_strchr) is a builtin equivalent
86 of an ANSI/ISO standard library function. In addition to the
87 `__builtin' version, we will create an ordinary version (e.g,
88 `strchr') as well. If we cannot compute the answer using the
89 builtin function, we will fall back to the standard library
90 version. */
91#undef DEF_LIB_BUILTIN
92#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
93 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
94 true, true, false, ATTRS)
95
96/* Like DEF_LIB_BUILTIN, except that a call to the builtin should
97 never fall back to the library version. */
98#undef DEF_LIB_ALWAYS_BUILTIN
99#define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE) \
100 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
101 true, false, true, ATTR_CONST_NOTHROW_LIST)
102
103/* Like DEF_LIB_BUILTIN, except that the function is not one that is
104 specified by ANSI/ISO C. So, when we're being fully conformant we
105 ignore the version of these builtins that does not begin with
106 __builtin. */
107#undef DEF_EXT_LIB_BUILTIN
108#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
109 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
110 true, true, true, ATTRS)
111
112/* Like DEF_LIB_BUILTIN, except that the function is only a part of
113 the standard in C99 or above. */
114#undef DEF_C99_BUILTIN
115#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
116 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
117 true, true, !flag_isoc99, ATTRS)
118
119/* Like DEF_LIB_BUILTIN, except that the function is expanded in the
120 front-end. */
121#undef DEF_FRONT_END_LIB_BUILTIN
122#define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
123 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
124 true, true, false, ATTRS)
125
126/* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
127 that is specified by ANSI/ISO C. So, when we're being fully
128 conformant we ignore the version of these builtins that does not
129 begin with __builtin. */
130#undef DEF_EXT_FRONT_END_LIB_BUILTIN
131#define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
132 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \
133 true, true, true, ATTRS)
134
135/* A built-in that is not currently used. */
136#undef DEF_UNUSED_BUILTIN
137#define DEF_UNUSED_BUILTIN(X) \
138 DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST, \
139 BT_LAST, false, false, false, ATTR_NOTHROW_LIST)
140
141/* If SMALL_STACK is defined, then `alloca' is only defined in its
142 `__builtin' form. */
143#if SMALL_STACK
144DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
145 "__builtin_alloca",
146 BT_FN_PTR_SIZE,
147 ATTR_MALLOC_NOTHROW_LIST)
148#else
149DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
150 "__builtin_alloca",
151 BT_FN_PTR_SIZE,
152 ATTR_MALLOC_NOTHROW_LIST)
153#endif
154
155DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
156 "__builtin_abs",
157 BT_FN_INT_INT)
158DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
159 "__builtin_labs",
160 BT_FN_LONG_LONG)
161
162DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
163 "__builtin_fabs",
164 BT_FN_DOUBLE_DOUBLE)
165DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
166 "__builtin_fabsf",
167 BT_FN_FLOAT_FLOAT)
168DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
169 "__builtin_fabsl",
170 BT_FN_LONG_DOUBLE_LONG_DOUBLE)
171
172DEF_C99_BUILTIN(BUILT_IN_LLABS,
173 "__builtin_llabs",
174 BT_FN_LONGLONG_LONGLONG,
175 ATTR_NOTHROW_LIST)
176DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
177 "__builtin_imaxabs",
178 BT_FN_INTMAX_INTMAX,
179 ATTR_NOTHROW_LIST)
180DEF_C99_BUILTIN(BUILT_IN_CONJ,
181 "__builtin_conj",
182 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
183 ATTR_NOTHROW_LIST)
184DEF_C99_BUILTIN(BUILT_IN_CONJF,
185 "__builtin_conjf",
186 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
187 ATTR_NOTHROW_LIST)
188DEF_C99_BUILTIN(BUILT_IN_CONJL,
189 "__builtin_conjl",
190 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
191 ATTR_NOTHROW_LIST)
192DEF_C99_BUILTIN(BUILT_IN_CREAL,
193 "__builtin_creal",
194 BT_FN_DOUBLE_COMPLEX_DOUBLE,
195 ATTR_NOTHROW_LIST)
196DEF_C99_BUILTIN(BUILT_IN_CREALF,
197 "__builtin_crealf",
198 BT_FN_FLOAT_COMPLEX_FLOAT,
199 ATTR_NOTHROW_LIST)
200DEF_C99_BUILTIN(BUILT_IN_CREALL,
201 "__builtin_creall",
202 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
203 ATTR_NOTHROW_LIST)
204DEF_C99_BUILTIN(BUILT_IN_CIMAG,
205 "__builtin_cimag",
206 BT_FN_DOUBLE_COMPLEX_DOUBLE,
207 ATTR_NOTHROW_LIST)
208DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
209 "__builtin_cimagf",
210 BT_FN_FLOAT_COMPLEX_FLOAT,
211 ATTR_NOTHROW_LIST)
212DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
213 "__builtin_cimagl",
214 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
215 ATTR_NOTHROW_LIST)
216
217DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
218DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
219DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
220DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
221DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
222DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
223
224/* The system prototypes for `bzero' and `bcmp' functions have many
225 variations, so don't specify parameters to avoid conflicts. The
226 expand_* functions check the argument types anyway. */
227DEF_BUILTIN (BUILT_IN_BZERO,
228 "__builtin_bzero",
229 BUILT_IN_NORMAL,
230 BT_FN_VOID_PTR_SIZE,
231 BT_FN_VOID_VAR,
232 true, true, true,
233 ATTR_NOTHROW_LIST)
234DEF_BUILTIN (BUILT_IN_BCMP,
235 "__builtin_bcmp",
236 BUILT_IN_NORMAL,
237 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
238 BT_FN_INT_VAR,
239 true, true, true,
240 ATTR_PURE_NOTHROW_LIST)
241
242DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
243 "__builtin_ffs",
244 BT_FN_INT_INT,
245 ATTR_CONST_NOTHROW_LIST)
246DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
247 "__builtin_index",
248 BT_FN_STRING_CONST_STRING_INT,
249 ATTR_PURE_NOTHROW_LIST)
250DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
251 "__builtin_rindex",
252 BT_FN_STRING_CONST_STRING_INT,
253 ATTR_PURE_NOTHROW_LIST)
254
255DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
256 "__builtin_memcpy",
257 BT_FN_PTR_PTR_CONST_PTR_SIZE,
258 ATTR_NOTHROW_LIST)
259DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
260 "__builtin_memcmp",
261 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
262 ATTR_PURE_NOTHROW_LIST)
263DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
264 "__builtin_memset",
265 BT_FN_PTR_PTR_INT_SIZE,
266 ATTR_NOTHROW_LIST)
267
268DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
269 "__builtin_strcat",
270 BT_FN_STRING_STRING_CONST_STRING,
271 ATTR_NOTHROW_LIST)
272DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
273 "__builtin_strncat",
274 BT_FN_STRING_STRING_CONST_STRING_SIZE,
275 ATTR_NOTHROW_LIST)
276DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
277 "__builtin_strcpy",
278 BT_FN_STRING_STRING_CONST_STRING,
279 ATTR_NOTHROW_LIST)
280DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
281 "__builtin_strncpy",
282 BT_FN_STRING_STRING_CONST_STRING_SIZE,
283 ATTR_NOTHROW_LIST)
284DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
285 "__builtin_strcmp",
286 BT_FN_INT_CONST_STRING_CONST_STRING,
287 ATTR_PURE_NOTHROW_LIST)
288DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
289 "__builtin_strncmp",
290 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
291 ATTR_PURE_NOTHROW_LIST)
292DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
293 "__builtin_strlen",
294 BT_FN_SIZE_CONST_STRING,
295 ATTR_PURE_NOTHROW_LIST)
296DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
297 "__builtin_strstr",
298 BT_FN_STRING_CONST_STRING_CONST_STRING,
299 ATTR_PURE_NOTHROW_LIST)
300DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
301 "__builtin_strpbrk",
302 BT_FN_STRING_CONST_STRING_CONST_STRING,
303 ATTR_PURE_NOTHROW_LIST)
304DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
305 "__builtin_strspn",
306 BT_FN_SIZE_CONST_STRING_CONST_STRING,
307 ATTR_PURE_NOTHROW_LIST)
308DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
309 "__builtin_strcspn",
310 BT_FN_SIZE_CONST_STRING_CONST_STRING,
311 ATTR_PURE_NOTHROW_LIST)
312DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
313 "__builtin_strchr",
314 BT_FN_STRING_CONST_STRING_INT,
315 ATTR_PURE_NOTHROW_LIST)
316DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
317 "__builtin_strrchr",
318 BT_FN_STRING_CONST_STRING_INT,
319 ATTR_PURE_NOTHROW_LIST)
320
321DEF_LIB_BUILTIN(BUILT_IN_SQRT,
322 "__builtin_sqrt",
323 BT_FN_DOUBLE_DOUBLE,
324 flag_errno_math ? ATTR_NOTHROW_LIST
325 : (flag_unsafe_math_optimizations
326 ? ATTR_CONST_NOTHROW_LIST
327 : ATTR_PURE_NOTHROW_LIST))
328DEF_LIB_BUILTIN(BUILT_IN_SIN,
329 "__builtin_sin",
330 BT_FN_DOUBLE_DOUBLE,
331 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
332 : ATTR_PURE_NOTHROW_LIST)
333DEF_LIB_BUILTIN(BUILT_IN_COS,
334 "__builtin_cos",
335 BT_FN_DOUBLE_DOUBLE,
336 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
337 : ATTR_PURE_NOTHROW_LIST)
338DEF_LIB_BUILTIN(BUILT_IN_EXP,
339 "__builtin_exp",
340 BT_FN_DOUBLE_DOUBLE,
341 flag_errno_math ? ATTR_NOTHROW_LIST
342 : (flag_unsafe_math_optimizations
343 ? ATTR_CONST_NOTHROW_LIST
344 : ATTR_PURE_NOTHROW_LIST))
345DEF_LIB_BUILTIN(BUILT_IN_LOG,
346 "__builtin_log",
347 BT_FN_DOUBLE_DOUBLE,
348 flag_errno_math ? ATTR_NOTHROW_LIST
349 : (flag_unsafe_math_optimizations
350 ? ATTR_CONST_NOTHROW_LIST
351 : ATTR_PURE_NOTHROW_LIST))
352DEF_LIB_BUILTIN(BUILT_IN_SQRTF,
353 "__builtin_sqrtf",
354 BT_FN_FLOAT_FLOAT,
355 flag_errno_math ? ATTR_NOTHROW_LIST
356 : (flag_unsafe_math_optimizations
357 ? ATTR_CONST_NOTHROW_LIST
358 : ATTR_PURE_NOTHROW_LIST))
359DEF_LIB_BUILTIN(BUILT_IN_SINF,
360 "__builtin_sinf",
361 BT_FN_FLOAT_FLOAT,
362 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
363 : ATTR_PURE_NOTHROW_LIST)
364DEF_LIB_BUILTIN(BUILT_IN_COSF,
365 "__builtin_cosf",
366 BT_FN_FLOAT_FLOAT,
367 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
368 : ATTR_PURE_NOTHROW_LIST)
369DEF_LIB_BUILTIN(BUILT_IN_EXPF,
370 "__builtin_expf",
371 BT_FN_FLOAT_FLOAT,
372 flag_errno_math ? ATTR_NOTHROW_LIST
373 : (flag_unsafe_math_optimizations
374 ? ATTR_CONST_NOTHROW_LIST
375 : ATTR_PURE_NOTHROW_LIST))
376DEF_LIB_BUILTIN(BUILT_IN_LOGF,
377 "__builtin_logf",
378 BT_FN_FLOAT_FLOAT,
379 flag_errno_math ? ATTR_NOTHROW_LIST
380 : (flag_unsafe_math_optimizations
381 ? ATTR_CONST_NOTHROW_LIST
382 : ATTR_PURE_NOTHROW_LIST))
383DEF_LIB_BUILTIN(BUILT_IN_SQRTL,
384 "__builtin_sqrtl",
385 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
386 flag_errno_math ? ATTR_NOTHROW_LIST
387 : (flag_unsafe_math_optimizations
388 ? ATTR_CONST_NOTHROW_LIST
389 : ATTR_PURE_NOTHROW_LIST))
390DEF_LIB_BUILTIN(BUILT_IN_SINL,
391 "__builtin_sinl",
392 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
393 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
394 : ATTR_PURE_NOTHROW_LIST)
395DEF_LIB_BUILTIN(BUILT_IN_COSL,
396 "__builtin_cosl",
397 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
398 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
399 : ATTR_PURE_NOTHROW_LIST)
400DEF_LIB_BUILTIN(BUILT_IN_EXPL,
401 "__builtin_expl",
402 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
403 flag_errno_math ? ATTR_NOTHROW_LIST
404 : (flag_unsafe_math_optimizations
405 ? ATTR_CONST_NOTHROW_LIST
406 : ATTR_PURE_NOTHROW_LIST))
407DEF_LIB_BUILTIN(BUILT_IN_LOGL,
408 "__builtin_logl",
409 BT_FN_LONG_DOUBLE_LONG_DOUBLE,
410 flag_errno_math ? ATTR_NOTHROW_LIST
411 : (flag_unsafe_math_optimizations
412 ? ATTR_CONST_NOTHROW_LIST
413 : ATTR_PURE_NOTHROW_LIST))
414
415DEF_GCC_BUILTIN(BUILT_IN_INF,
416 "__builtin_inf",
417 BT_FN_DOUBLE,
418 ATTR_CONST_NOTHROW_LIST)
419DEF_GCC_BUILTIN(BUILT_IN_INFF,
420 "__builtin_inff",
421 BT_FN_FLOAT,
422 ATTR_CONST_NOTHROW_LIST)
423DEF_GCC_BUILTIN(BUILT_IN_INFL,
424 "__builtin_infl",
425 BT_FN_LONG_DOUBLE,
426 ATTR_CONST_NOTHROW_LIST)
427
428DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
429 "__builtin_huge_val",
430 BT_FN_DOUBLE,
431 ATTR_CONST_NOTHROW_LIST)
432DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
433 "__builtin_huge_valf",
434 BT_FN_FLOAT,
435 ATTR_CONST_NOTHROW_LIST)
436DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
437 "__builtin_huge_vall",
438 BT_FN_LONG_DOUBLE,
439 ATTR_CONST_NOTHROW_LIST)
440
441DEF_LIB_BUILTIN(BUILT_IN_NAN,
442 "__builtin_nan",
443 BT_FN_DOUBLE_CONST_STRING,
444 ATTR_CONST_NOTHROW_LIST)
445DEF_LIB_BUILTIN(BUILT_IN_NANF,
446 "__builtin_nanf",
447 BT_FN_FLOAT_CONST_STRING,
448 ATTR_CONST_NOTHROW_LIST)
449DEF_LIB_BUILTIN(BUILT_IN_NANL,
450 "__builtin_nanl",
451 BT_FN_LONG_DOUBLE_CONST_STRING,
452 ATTR_CONST_NOTHROW_LIST)
453
454DEF_LIB_BUILTIN(BUILT_IN_NANS,
455 "__builtin_nans",
456 BT_FN_DOUBLE_CONST_STRING,
457 ATTR_CONST_NOTHROW_LIST)
458DEF_LIB_BUILTIN(BUILT_IN_NANSF,
459 "__builtin_nansf",
460 BT_FN_FLOAT_CONST_STRING,
461 ATTR_CONST_NOTHROW_LIST)
462DEF_LIB_BUILTIN(BUILT_IN_NANSL,
463 "__builtin_nansl",
464 BT_FN_LONG_DOUBLE_CONST_STRING,
465 ATTR_CONST_NOTHROW_LIST)
466
467DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
468 "__builtin_saveregs",
469 BT_FN_PTR_VAR,
470 ATTR_NULL)
471DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
472 "__builtin_classify_type",
473 BT_FN_INT_VAR,
474 ATTR_NULL)
475DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
476 "__builtin_next_arg",
477 BT_FN_PTR_VAR,
478 ATTR_NULL)
479DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
480 "__builtin_args_info",
481 BT_FN_INT_INT,
482 ATTR_NULL)
483DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
484 "__builtin_constant_p",
485 BT_FN_INT_VAR,
486 ATTR_NULL)
487DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
488 "__builtin_frame_address",
489 BT_FN_PTR_UNSIGNED,
490 ATTR_NULL)
491DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS,
492 "__builtin_return_address",
493 BT_FN_PTR_UNSIGNED,
494 ATTR_NULL)
495DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
496 "__builtin_aggregate_incoming_address",
497 BT_FN_PTR_VAR,
498 ATTR_NULL)
499DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
500 "__builtin_apply_args",
501 BT_FN_PTR_VAR,
502 ATTR_NULL)
503DEF_GCC_BUILTIN(BUILT_IN_APPLY,
504 "__builtin_apply",
505 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
506 ATTR_NULL)
507DEF_GCC_BUILTIN(BUILT_IN_RETURN,
508 "__builtin_return",
509 BT_FN_VOID_PTR,
510 ATTR_NORETURN_NOTHROW_LIST)
511DEF_GCC_BUILTIN(BUILT_IN_SETJMP,
512 "__builtin_setjmp",
513 BT_FN_INT_PTR,
514 ATTR_NULL)
515DEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
516 "__builtin_longjmp",
517 BT_FN_VOID_PTR_INT,
518 ATTR_NORETURN_NOTHROW_LIST)
519DEF_GCC_BUILTIN(BUILT_IN_TRAP,
520 "__builtin_trap",
521 BT_FN_VOID,
522 ATTR_NORETURN_NOTHROW_LIST)
523DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
524 "__builtin_prefetch",
525 BT_FN_VOID_CONST_PTR_VAR,
526 ATTR_NULL)
527
528/* stdio.h builtins (without FILE *). */
529
530DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
531 "__builtin_printf",
532 BT_FN_INT_CONST_STRING_VAR,
533 ATTR_FORMAT_PRINTF_1_2)
534DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
535 "__builtin_putchar",
536 BT_FN_INT_INT,
537 ATTR_NOTHROW_LIST)
538DEF_LIB_BUILTIN(BUILT_IN_PUTS,
539 "__builtin_puts",
540 BT_FN_INT_CONST_STRING,
541 ATTR_NOTHROW_LIST)
542DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
543 "__builtin_snprintf",
544 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
545 ATTR_FORMAT_PRINTF_3_4)
546DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
547 "__builtin_sprintf",
548 BT_FN_INT_STRING_CONST_STRING_VAR,
549 ATTR_FORMAT_PRINTF_2_3)
550DEF_LIB_BUILTIN(BUILT_IN_SCANF,
551 "__builtin_scanf",
552 BT_FN_INT_CONST_STRING_VAR,
553 ATTR_FORMAT_SCANF_1_2)
554DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
555 "__builtin_sscanf",
556 BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
557 ATTR_FORMAT_SCANF_2_3)
558DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
559 "__builtin_vprintf",
560 BT_FN_INT_CONST_STRING_VALIST_ARG,
561 ATTR_FORMAT_PRINTF_1_0)
562DEF_C99_BUILTIN(BUILT_IN_VSCANF,
563 "__builtin_vscanf",
564 BT_FN_INT_CONST_STRING_VALIST_ARG,
565 ATTR_FORMAT_SCANF_1_0)
566DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
567 "__builtin_vsscanf",
568 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
569 ATTR_FORMAT_SCANF_2_0)
570DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
571 "__builtin_vsnprintf",
572 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
573 ATTR_FORMAT_PRINTF_3_0)
574DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
575 "__builtin_vsprintf",
576 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
577 ATTR_FORMAT_PRINTF_2_0)
578
579
580/* stdio.h builtins (with FILE *). */
581
582/* Declare the __builtin_ style with arguments and the regular style
583 without them. We rely on stdio.h to supply the arguments for the
584 regular style declaration since we had to use void* instead of
585 FILE* in the __builtin_ prototype supplied here. */
586
587DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
588 "__builtin_fputc",
589 BT_FN_INT_INT_PTR,
590 ATTR_NOTHROW_LIST)
591DEF_BUILTIN (BUILT_IN_FPUTS,
592 "__builtin_fputs",
593 BUILT_IN_NORMAL,
594 BT_FN_INT_CONST_STRING_PTR,
595 BT_FN_INT_VAR,
596 true, true, false, ATTR_NOTHROW_LIST)
597DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
598 "__builtin_fwrite",
599 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
600 ATTR_NOTHROW_LIST)
601DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
602 "__builtin_fprintf",
603 BT_FN_INT_PTR_CONST_STRING_VAR,
604 ATTR_FORMAT_PRINTF_2_3)
605
606/* stdio unlocked builtins (without FILE *). */
607
608DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
609 "__builtin_putchar_unlocked",
610 BT_FN_INT_INT)
611DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
612 "__builtin_puts_unlocked",
613 BT_FN_INT_CONST_STRING)
614DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
615 "__builtin_printf_unlocked",
616 BT_FN_INT_CONST_STRING_VAR,
617 ATTR_FORMAT_PRINTF_1_2)
618
619/* stdio unlocked builtins (with FILE *). */
620
621/* Declare the __builtin_ style with arguments and the regular style
622 without them. We rely on stdio.h to supply the arguments for the
623 regular style declaration since we had to use void* instead of
624 FILE* in the __builtin_ prototype supplied here. */
625
626DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
627 "__builtin_fputc_unlocked",
628 BT_FN_INT_INT_PTR)
629DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
630 "__builtin_fputs_unlocked",
631 BUILT_IN_NORMAL,
632 BT_FN_INT_CONST_STRING_PTR,
633 BT_FN_INT_VAR,
634 true, true, true, ATTR_NOTHROW_LIST)
635DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
636 "__builtin_fwrite_unlocked",
637 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
638DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
639 "__builtin_fprintf_unlocked",
640 BT_FN_INT_PTR_CONST_STRING_VAR,
641 ATTR_FORMAT_PRINTF_2_3)
642
643 /* ISO C99 floating point unordered comparisons. */
644DEF_GCC_BUILTIN(BUILT_IN_ISGREATER,
645 "__builtin_isgreater",
646 BT_FN_INT_VAR,
647 ATTR_CONST_NOTHROW_LIST)
648DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
649 "__builtin_isgreaterequal",
650 BT_FN_INT_VAR,
651 ATTR_CONST_NOTHROW_LIST)
652DEF_GCC_BUILTIN(BUILT_IN_ISLESS,
653 "__builtin_isless",
654 BT_FN_INT_VAR,
655 ATTR_CONST_NOTHROW_LIST)
656DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
657 "__builtin_islessequal",
658 BT_FN_INT_VAR,
659 ATTR_CONST_NOTHROW_LIST)
660DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
661 "__builtin_islessgreater",
662 BT_FN_INT_VAR,
663 ATTR_CONST_NOTHROW_LIST)
664DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
665 "__builtin_isunordered",
666 BT_FN_INT_VAR,
667 ATTR_CONST_NOTHROW_LIST)
668
669/* Various hooks for the DWARF 2 __throw routine. */
670DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
671 "__builtin_unwind_init",
672 BT_FN_VOID,
673 ATTR_NULL)
674DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
675 "__builtin_dwarf_cfa",
676 BT_FN_PTR,
677 ATTR_NULL)
678DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
679 "__builtin_dwarf_sp_column",
680 BT_FN_UNSIGNED,
681 ATTR_NULL)
682DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
683 "__builtin_init_dwarf_reg_size_table",
684 BT_FN_VOID_PTR,
685 ATTR_NULL)
686DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
687 "__builtin_frob_return_addr",
688 BT_FN_PTR_PTR,
689 ATTR_NULL)
690DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
691 "__builtin_extract_return_addr",
692 BT_FN_PTR_PTR,
693 ATTR_NULL)
694DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
695 "__builtin_eh_return",
696 BT_FN_VOID_PTRMODE_PTR,
697 ATTR_NORETURN_NOTHROW_LIST)
698DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
699 "__builtin_eh_return_data_regno",
700 BT_FN_INT_INT,
701 ATTR_NULL)
702
703/* Variable argument list (stdarg.h) support */
704DEF_GCC_BUILTIN(BUILT_IN_VA_START,
705 "__builtin_va_start",
706 BT_FN_VOID_VALIST_REF_VAR,
707 ATTR_NULL)
708DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
709 "__builtin_stdarg_start",
710 BT_FN_VOID_VALIST_REF_VAR,
711 ATTR_NULL)
712DEF_GCC_BUILTIN(BUILT_IN_VA_END,
713 "__builtin_va_end",
714 BT_FN_VOID_VALIST_REF,
715 ATTR_NULL)
716DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
717 "__builtin_va_copy",
718 BT_FN_VOID_VALIST_REF_VALIST_ARG,
719 ATTR_NULL)
720
721DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
722 "__builtin_expect",
723 BT_FN_LONG_LONG_LONG,
724 ATTR_NULL)
725
726/* C++ extensions */
727DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
728DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
729DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
730DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
731
732/* Declare abort, exit, _exit and _Exit */
733DEF_BUILTIN (BUILT_IN_ABORT,
734 "__builtin_abort",
735 NOT_BUILT_IN,
736 BT_FN_VOID,
737 BT_FN_VOID,
738 1, 0, 0,
739 ATTR_NORETURN_NOTHROW_LIST)
740
741DEF_BUILTIN (BUILT_IN_EXIT,
742 "__builtin_exit",
743 NOT_BUILT_IN,
744 BT_FN_VOID_INT,
745 BT_FN_VOID_INT,
746 1, 0, 0,
747 ATTR_NORETURN_NOTHROW_LIST)
748
749DEF_BUILTIN (BUILT_IN__EXIT,
750 "__builtin__exit",
751 NOT_BUILT_IN,
752 BT_FN_VOID_INT,
753 BT_FN_VOID_INT,
754 1, 0, 1,
755 ATTR_NORETURN_NOTHROW_LIST)
756
757DEF_BUILTIN (BUILT_IN__EXIT2,
758 "__builtin__Exit",
759 NOT_BUILT_IN,
760 BT_FN_VOID_INT,
761 BT_FN_VOID_INT,
762 1, 0, !flag_isoc99,
763 ATTR_NORETURN_NOTHROW_LIST)
764
Note: See TracBrowser for help on using the repository browser.