builtins.def revision 90075
190075Sobrien/* This file contains the definitions and documentation for the
290075Sobrien   builtins used in the GNU compiler.
390075Sobrien   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
490075Sobrien
590075SobrienThis file is part of GCC.
690075Sobrien
790075SobrienGCC is free software; you can redistribute it and/or modify it under
890075Sobrienthe terms of the GNU General Public License as published by the Free
990075SobrienSoftware Foundation; either version 2, or (at your option) any later
1090075Sobrienversion.
1190075Sobrien
1290075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY
1390075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or
1490075SobrienFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1590075Sobrienfor more details.
1690075Sobrien
1790075SobrienYou should have received a copy of the GNU General Public License
1890075Sobrienalong with GCC; see the file COPYING.  If not, write to the Free
1990075SobrienSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA
2090075Sobrien02111-1307, USA.  */
2190075Sobrien
2290075Sobrien/* Before including this file, you should define a macro:
2390075Sobrien
2490075Sobrien     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
2590075Sobrien                  FALLBACK_P, NONANSI_P)
2690075Sobrien
2790075Sobrien   This macro will be called once for each builtin function.  The
2890075Sobrien   ENUM will be of type `enum built_in_function', and will indicate
2990075Sobrien   which builtin function is being processed.  The NAME of the builtin
3090075Sobrien   function (which will always start with `__builtin_') is a string
3190075Sobrien   literal.  The CLASS is of type `enum built_in_class' and indicates
3290075Sobrien   what kind of builtin is being processed.
3390075Sobrien
3490075Sobrien   Some builtins are actually two separate functions.  For example,
3590075Sobrien   for `strcmp' there are two builtin functions; `__builtin_strcmp'
3690075Sobrien   and `strcmp' itself.  Both behave identically.  Other builtins
3790075Sobrien   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
3890075Sobrien   builtin has both variants; otherwise, it is has only the first
3990075Sobrien   variant.
4090075Sobrien
4190075Sobrien   TYPE indicates the type of the function.  The symbols correspond to
4290075Sobrien   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
4390075Sobrien   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
4490075Sobrien   should be ignored.
4590075Sobrien
4690075Sobrien   If FALLBACK_P is true then, if for some reason, the compiler cannot
4790075Sobrien   expand the builtin function directly, it will call the
4890075Sobrien   corresponding library function (which does not have the
4990075Sobrien   `__builtin_' prefix.
5090075Sobrien
5190075Sobrien   If NONANSI_P is true, then the non-`__builtin_' variant is not an
5290075Sobrien   ANSI/ISO library function, and so we should pretend it does not
5390075Sobrien   exist when compiling in ANSI conformant mode.  */
5490075Sobrien   
5590075Sobrien/* A GCC builtin (like __builtin_saveregs) is provided by the
5690075Sobrien   compiler, but does not correspond to a function in the standard
5790075Sobrien   library.  */
5890075Sobrien#undef DEF_GCC_BUILTIN
5990075Sobrien#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE)			\
6090075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
6190075Sobrien               false, false, false)
6290075Sobrien
6390075Sobrien
6490075Sobrien/* A fallback builtin is a builtin (like __builtin_puts) that falls
6590075Sobrien   back to the corresopnding library function if necessary -- but
6690075Sobrien   for which we should not introduce the non-`__builtin' variant of
6790075Sobrien   the name.  */
6890075Sobrien#undef DEF_FALLBACK_BUILTIN				
6990075Sobrien#define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE)		\
7090075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
7190075Sobrien	       false, true, false)
7290075Sobrien
7390075Sobrien/* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
7490075Sobrien   is specified by ANSI/ISO C.  So, when we're being fully conformant
7590075Sobrien   we ignore the version of these builtins that does not begin with
7690075Sobrien   __builtin.  */
7790075Sobrien#undef DEF_EXT_FALLBACK_BUILTIN
7890075Sobrien#define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE)	\
7990075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
8090075Sobrien	       false, true, true)
8190075Sobrien
8290075Sobrien/* A library builtin (like __builtin_strchr) is a builtin equivalent
8390075Sobrien   of an ANSI/ISO standard library function.  In addition to the
8490075Sobrien   `__builtin' version, we will create an ordinary version (e.g,
8590075Sobrien   `strchr') as well.  If we cannot compute the answer using the
8690075Sobrien   builtin function, we will fall back to the standard library
8790075Sobrien   version. */
8890075Sobrien#undef DEF_LIB_BUILTIN					
8990075Sobrien#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE)		\
9090075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
9190075Sobrien	       true, true, false)
9290075Sobrien
9390075Sobrien/* Like DEF_LIB_BUILTIN, except that a call to the builtin should
9490075Sobrien   never fall back to the library version.  */
9590075Sobrien#undef DEF_LIB_ALWAYS_BUILTIN				
9690075Sobrien#define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE)	\
9790075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
9890075Sobrien    	       true, false, true)
9990075Sobrien
10090075Sobrien/* Like DEF_LIB_BUILTIN, except that the function is not one that is
10190075Sobrien   specified by ANSI/ISO C.  So, when we're being fully conformant we
10290075Sobrien   ignore the version of these builtins that does not begin with
10390075Sobrien   __builtin.  */
10490075Sobrien#undef DEF_EXT_LIB_BUILTIN				
10590075Sobrien#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE)		\
10690075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
10790075Sobrien   	       true, true, true)
10890075Sobrien
10990075Sobrien/* Like DEF_LIB_BUILTIN, except that the function is only a part of
11090075Sobrien   the standard in C99 or above.  */
11190075Sobrien#undef DEF_C99_BUILTIN					
11290075Sobrien#define DEF_C99_BUILTIN(ENUM, NAME, TYPE)		\
11390075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
11490075Sobrien   	       true, !flag_isoc99, true)
11590075Sobrien
11690075Sobrien/* Like DEF_LIB_BUILTIN, except that the function is expanded in the
11790075Sobrien   front-end.  */
11890075Sobrien#undef DEF_FRONT_END_LIB_BUILTIN			
11990075Sobrien#define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE)	        \
12090075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,	\
12190075Sobrien	       true, true, false)
12290075Sobrien
12390075Sobrien/* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
12490075Sobrien   that is specified by ANSI/ISO C.  So, when we're being fully
12590075Sobrien   conformant we ignore the version of these builtins that does not
12690075Sobrien   begin with __builtin.  */
12790075Sobrien#undef DEF_EXT_FRONT_END_LIB_BUILTIN			
12890075Sobrien#define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE)	        \
12990075Sobrien  DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,	\
13090075Sobrien	       true, true, true)
13190075Sobrien
13290075Sobrien/* A built-in that is not currently used.  */
13390075Sobrien#undef DEF_UNUSED_BUILTIN					
13490075Sobrien#define DEF_UNUSED_BUILTIN(X)					\
13590075Sobrien  DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST,	\
13690075Sobrien	       BT_LAST, false, false, false)
13790075Sobrien
13890075Sobrien/* If SMALL_STACK is defined, then `alloca' is only defined in its
13990075Sobrien   `__builtin' form.  */
14090075Sobrien#if SMALL_STACK  
14190075SobrienDEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA,
14290075Sobrien		     "__builtin_alloca",
14390075Sobrien		     BT_FN_PTR_SIZE)
14490075Sobrien#else
14590075SobrienDEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
14690075Sobrien		    "__builtin_alloca",
14790075Sobrien		    BT_FN_PTR_SIZE)
14890075Sobrien#endif
14990075Sobrien
15090075SobrienDEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
15190075Sobrien		       "__builtin_abs",
15290075Sobrien		       BT_FN_INT_INT)
15390075SobrienDEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
15490075Sobrien		       "__builtin_labs",
15590075Sobrien		       BT_FN_LONG_LONG)
15690075Sobrien
15790075SobrienDEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
15890075Sobrien		       "__builtin_fabs",
15990075Sobrien		       BT_FN_DOUBLE_DOUBLE)
16090075SobrienDEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
16190075Sobrien		       "__builtin_fabsf",
16290075Sobrien		       BT_FN_FLOAT_FLOAT)
16390075SobrienDEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
16490075Sobrien		       "__builtin_fabsl",
16590075Sobrien		       BT_FN_LONG_DOUBLE_LONG_DOUBLE)
16690075Sobrien
16790075SobrienDEF_C99_BUILTIN(BUILT_IN_LLABS,
16890075Sobrien		"__builtin_llabs",
16990075Sobrien		BT_FN_LONGLONG_LONGLONG)
17090075SobrienDEF_C99_BUILTIN(BUILT_IN_IMAXABS,
17190075Sobrien		"__builtin_imaxabs",
17290075Sobrien		BT_FN_INTMAX_INTMAX)
17390075SobrienDEF_C99_BUILTIN(BUILT_IN_CONJ,
17490075Sobrien		"__builtin_conj",
17590075Sobrien		BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE)
17690075SobrienDEF_C99_BUILTIN(BUILT_IN_CONJF,
17790075Sobrien		"__builtin_conjf",
17890075Sobrien		BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT)
17990075SobrienDEF_C99_BUILTIN(BUILT_IN_CONJL,
18090075Sobrien		"__builtin_conjl",
18190075Sobrien		BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
18290075SobrienDEF_C99_BUILTIN(BUILT_IN_CREAL,
18390075Sobrien		"__builtin_creal",
18490075Sobrien		BT_FN_DOUBLE_COMPLEX_DOUBLE)
18590075SobrienDEF_C99_BUILTIN(BUILT_IN_CREALF,
18690075Sobrien		"__builtin_crealf",
18790075Sobrien		BT_FN_FLOAT_COMPLEX_FLOAT)
18890075SobrienDEF_C99_BUILTIN(BUILT_IN_CREALL,
18990075Sobrien		"__builtin_creall",
19090075Sobrien		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
19190075SobrienDEF_C99_BUILTIN(BUILT_IN_CIMAG,
19290075Sobrien		"__builtin_cimag",
19390075Sobrien		BT_FN_DOUBLE_COMPLEX_DOUBLE)
19490075SobrienDEF_C99_BUILTIN(BUILT_IN_CIMAGF,
19590075Sobrien		"__builtin_cimagf",
19690075Sobrien		BT_FN_FLOAT_COMPLEX_FLOAT)
19790075SobrienDEF_C99_BUILTIN(BUILT_IN_CIMAGL,
19890075Sobrien		"__builtin_cimagl",
19990075Sobrien		BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
20090075Sobrien
20190075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_DIV)
20290075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
20390075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
20490075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
20590075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
20690075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_FREM)
20790075Sobrien
20890075Sobrien/* The system prototypes for `bzero' and `bcmp' functions have many
20990075Sobrien   variations, so don't specify parameters to avoid conflicts.  The
21090075Sobrien   expand_* functions check the argument types anyway.  */
21190075SobrienDEF_BUILTIN (BUILT_IN_BZERO,
21290075Sobrien	     "__builtin_bzero",
21390075Sobrien	     BUILT_IN_NORMAL,
21490075Sobrien	     BT_FN_VOID_TRAD_PTR_LEN, 
21590075Sobrien	     BT_FN_VOID_VAR,
21690075Sobrien	     true, true, true)
21790075SobrienDEF_BUILTIN (BUILT_IN_BCMP,
21890075Sobrien	     "__builtin_bcmp",
21990075Sobrien	     BUILT_IN_NORMAL,
22090075Sobrien	     BT_FN_INT_TRAD_CONST_PTR_TRAD_CONST_PTR_LEN,
22190075Sobrien	     BT_FN_INT_VAR,
22290075Sobrien	     true, true, true)
22390075Sobrien
22490075SobrienDEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
22590075Sobrien		    "__builtin_ffs",
22690075Sobrien		    BT_FN_INT_INT)
22790075SobrienDEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
22890075Sobrien		    "__builtin_index",
22990075Sobrien		    BT_FN_STRING_CONST_STRING_INT)
23090075SobrienDEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
23190075Sobrien		    "__builtin_rindex",
23290075Sobrien		    BT_FN_STRING_CONST_STRING_INT)
23390075Sobrien
23490075SobrienDEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
23590075Sobrien		"__builtin_memcpy",
23690075Sobrien		BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE)
23790075SobrienDEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
23890075Sobrien		"__builtin_memcmp",
23990075Sobrien		BT_FN_INT_CONST_PTR_CONST_PTR_SIZE)
24090075SobrienDEF_LIB_BUILTIN(BUILT_IN_MEMSET,
24190075Sobrien		"__builtin_memset",
24290075Sobrien		BT_FN_TRAD_PTR_PTR_INT_SIZE)
24390075Sobrien
24490075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRCAT,
24590075Sobrien		"__builtin_strcat",
24690075Sobrien		BT_FN_STRING_STRING_CONST_STRING)
24790075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
24890075Sobrien		"__builtin_strncat",
24990075Sobrien		BT_FN_STRING_STRING_CONST_STRING_SIZE)
25090075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRCPY,
25190075Sobrien		"__builtin_strcpy",
25290075Sobrien		BT_FN_STRING_STRING_CONST_STRING)
25390075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
25490075Sobrien		"__builtin_strncpy",
25590075Sobrien		BT_FN_STRING_STRING_CONST_STRING_SIZE)
25690075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRCMP,
25790075Sobrien		"__builtin_strcmp",
25890075Sobrien		BT_FN_INT_CONST_STRING_CONST_STRING)
25990075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
26090075Sobrien		"__builtin_strncmp",
26190075Sobrien		BT_FN_INT_CONST_STRING_CONST_STRING_SIZE)
26290075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRLEN,
26390075Sobrien		"__builtin_strlen",
26490075Sobrien		BT_FN_LEN_CONST_STRING)
26590075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRSTR,
26690075Sobrien		"__builtin_strstr",
26790075Sobrien		BT_FN_STRING_CONST_STRING_CONST_STRING)
26890075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
26990075Sobrien		"__builtin_strpbrk",
27090075Sobrien		BT_FN_STRING_CONST_STRING_CONST_STRING)
27190075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRSPN,
27290075Sobrien		"__builtin_strspn",
27390075Sobrien		BT_FN_SIZE_CONST_STRING_CONST_STRING)
27490075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
27590075Sobrien		"__builtin_strcspn",
27690075Sobrien		BT_FN_SIZE_CONST_STRING_CONST_STRING)
27790075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRCHR,
27890075Sobrien		"__builtin_strchr",
27990075Sobrien		BT_FN_STRING_CONST_STRING_INT)
28090075SobrienDEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
28190075Sobrien		"__builtin_strrchr",
28290075Sobrien		BT_FN_STRING_CONST_STRING_INT)
28390075Sobrien
28490075SobrienDEF_LIB_BUILTIN(BUILT_IN_SQRT,
28590075Sobrien		"__builtin_sqrt",
28690075Sobrien		BT_FN_DOUBLE_DOUBLE)
28790075SobrienDEF_LIB_BUILTIN(BUILT_IN_SIN,
28890075Sobrien		"__builtin_sin",
28990075Sobrien		BT_FN_DOUBLE_DOUBLE)
29090075SobrienDEF_LIB_BUILTIN(BUILT_IN_COS,
29190075Sobrien		"__builtin_cos",
29290075Sobrien		BT_FN_DOUBLE_DOUBLE)
29390075SobrienDEF_LIB_BUILTIN(BUILT_IN_SQRTF,
29490075Sobrien		"__builtin_sqrtf",
29590075Sobrien		BT_FN_FLOAT_FLOAT)
29690075SobrienDEF_LIB_BUILTIN(BUILT_IN_SINF,
29790075Sobrien		"__builtin_sinf",
29890075Sobrien		BT_FN_FLOAT_FLOAT)
29990075SobrienDEF_LIB_BUILTIN(BUILT_IN_COSF,
30090075Sobrien		"__builtin_cosf",
30190075Sobrien		BT_FN_FLOAT_FLOAT)
30290075SobrienDEF_LIB_BUILTIN(BUILT_IN_SQRTL,
30390075Sobrien		"__builtin_sqrtl",
30490075Sobrien		BT_FN_LONG_DOUBLE_LONG_DOUBLE)
30590075SobrienDEF_LIB_BUILTIN(BUILT_IN_SINL,
30690075Sobrien		"__builtin_sinl",
30790075Sobrien		BT_FN_LONG_DOUBLE_LONG_DOUBLE)
30890075SobrienDEF_LIB_BUILTIN(BUILT_IN_COSL,
30990075Sobrien		"__builtin_cosl",
31090075Sobrien		BT_FN_LONG_DOUBLE_LONG_DOUBLE)
31190075Sobrien
31290075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_GETEXP)
31390075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_GETMAN)
31490075Sobrien
31590075SobrienDEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
31690075Sobrien		"__builtin_saveregs",
31790075Sobrien		BT_FN_PTR_VAR)
31890075SobrienDEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE,
31990075Sobrien		"__builtin_classify_type",
32090075Sobrien		BT_FN_INT_VAR)
32190075SobrienDEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG,
32290075Sobrien		"__builtin_next_arg",
32390075Sobrien		BT_FN_PTR_VAR)
32490075SobrienDEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
32590075Sobrien		"__builtin_args_info",
32690075Sobrien		BT_FN_INT_INT)
32790075SobrienDEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 
32890075Sobrien		"__builtin_constant_p", 
32990075Sobrien		BT_FN_INT_VAR)
33090075SobrienDEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
33190075Sobrien		"__builtin_frame_address",
33290075Sobrien		BT_FN_PTR_UNSIGNED)
33390075SobrienDEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 
33490075Sobrien		"__builtin_return_address",
33590075Sobrien		BT_FN_PTR_UNSIGNED)
33690075SobrienDEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
33790075Sobrien		"__builtin_aggregate_incoming_address",
33890075Sobrien		BT_FN_PTR_VAR)
33990075SobrienDEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS,
34090075Sobrien		"__builtin_apply_args",
34190075Sobrien		BT_FN_PTR_VAR)
34290075SobrienDEF_GCC_BUILTIN(BUILT_IN_APPLY,
34390075Sobrien		"__builtin_apply",
34490075Sobrien		BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE)
34590075SobrienDEF_GCC_BUILTIN(BUILT_IN_RETURN,
34690075Sobrien		"__builtin_return",
34790075Sobrien		BT_FN_VOID_PTR)
34890075SobrienDEF_GCC_BUILTIN(BUILT_IN_SETJMP,
34990075Sobrien		"__builtin_setjmp",
35090075Sobrien		BT_FN_INT_PTR)
35190075SobrienDEF_GCC_BUILTIN(BUILT_IN_LONGJMP,
35290075Sobrien		"__builtin_longjmp",
35390075Sobrien		BT_FN_VOID_PTR_INT)
35490075SobrienDEF_GCC_BUILTIN(BUILT_IN_TRAP,
35590075Sobrien		"__builtin_trap",
35690075Sobrien		BT_FN_VOID)
35790075SobrienDEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
35890075Sobrien		"__builtin_prefetch",
35990075Sobrien		BT_FN_VOID_CONST_PTR_VAR)
36090075Sobrien
36190075Sobrien/* Stdio builtins.  */
36290075SobrienDEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR,
36390075Sobrien		    "__builtin_putchar",
36490075Sobrien		     BT_FN_INT_INT)
36590075SobrienDEF_FALLBACK_BUILTIN(BUILT_IN_PUTS,
36690075Sobrien		     "__builtin_puts",
36790075Sobrien		     BT_FN_INT_CONST_STRING)
36890075SobrienDEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
36990075Sobrien			  "__builtin_printf",
37090075Sobrien			  BT_FN_INT_CONST_STRING_VAR)
37190075SobrienDEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
37290075Sobrien		     "__builtin_fputc",
37390075Sobrien		     BT_FN_INT_INT_PTR)
37490075Sobrien/* Declare the __builtin_ style with arguments and the regular style
37590075Sobrien   without them.  We rely on stdio.h to supply the arguments for the
37690075Sobrien   regular style declaration since we had to use void* instead of
37790075Sobrien   FILE* in the __builtin_ prototype supplied here.  */
37890075SobrienDEF_BUILTIN (BUILT_IN_FPUTS,
37990075Sobrien	     "__builtin_fputs",
38090075Sobrien	     BUILT_IN_NORMAL,
38190075Sobrien	     BT_FN_INT_CONST_STRING_PTR,
38290075Sobrien	     BT_FN_INT_VAR,
38390075Sobrien	     true, true, false)
38490075SobrienDEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
38590075Sobrien		     "__builtin_fwrite",
38690075Sobrien		     BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
38790075SobrienDEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
38890075Sobrien			 "__builtin_fprintf",
38990075Sobrien			 BT_FN_INT_PTR_CONST_STRING_VAR)
39090075Sobrien
39190075Sobrien/* Stdio unlocked builtins.  */
39290075Sobrien
39390075SobrienDEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
39490075Sobrien			 "__builtin_putchar_unlocked",
39590075Sobrien			 BT_FN_INT_INT)
39690075SobrienDEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
39790075Sobrien			 "__builtin_puts_unlocked",
39890075Sobrien			 BT_FN_INT_CONST_STRING)
39990075SobrienDEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
40090075Sobrien			      "__builtin_printf_unlocked",
40190075Sobrien			      BT_FN_INT_CONST_STRING_VAR)
40290075SobrienDEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
40390075Sobrien			 "__builtin_fputc_unlocked",
40490075Sobrien			 BT_FN_INT_INT_PTR)
40590075Sobrien/* Declare the __builtin_ style with arguments and the regular style
40690075Sobrien   without them.  We rely on stdio.h to supply the arguments for the
40790075Sobrien   regular style declaration since we had to use void* instead of
40890075Sobrien   FILE* in the __builtin_ prototype supplied here.  */
40990075SobrienDEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
41090075Sobrien	     "__builtin_fputs_unlocked",
41190075Sobrien	     BUILT_IN_NORMAL,
41290075Sobrien	     BT_FN_INT_CONST_STRING_PTR,
41390075Sobrien	     BT_FN_INT_VAR,
41490075Sobrien	     true, true, true)
41590075SobrienDEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
41690075Sobrien			 "__builtin_fwrite_unlocked",
41790075Sobrien			 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
41890075SobrienDEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
41990075Sobrien			      "__builtin_fprintf_unlocked",
42090075Sobrien			      BT_FN_INT_PTR_CONST_STRING_VAR)
42190075Sobrien
42290075Sobrien  /* ISO C99 floating point unordered comparisons.  */
42390075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 
42490075Sobrien		"__builtin_isgreater",
42590075Sobrien		BT_FN_INT_VAR)
42690075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL,
42790075Sobrien		"__builtin_isgreaterequal",
42890075Sobrien		BT_FN_INT_VAR)
42990075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISLESS,
43090075Sobrien		"__builtin_isless",
43190075Sobrien		BT_FN_INT_VAR)
43290075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL,
43390075Sobrien		"__builtin_islessequal",
43490075Sobrien		BT_FN_INT_VAR)
43590075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER,
43690075Sobrien		"__builtin_islessgreater",
43790075Sobrien		BT_FN_INT_VAR)
43890075SobrienDEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED,
43990075Sobrien		"__builtin_isunordered",
44090075Sobrien		BT_FN_INT_VAR)
44190075Sobrien
44290075Sobrien/* Various hooks for the DWARF 2 __throw routine.  */
44390075SobrienDEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT,
44490075Sobrien		"__builtin_unwind_init",
44590075Sobrien		BT_FN_VOID)
44690075SobrienDEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
44790075Sobrien		"__builtin_dwarf_cfa",
44890075Sobrien		BT_FN_PTR)
44990075SobrienDEF_GCC_BUILTIN(BUILT_IN_DWARF_FP_REGNUM,
45090075Sobrien		"__builtin_dwarf_fp_regnum",
45190075Sobrien		BT_FN_UNSIGNED)
45290075SobrienDEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
45390075Sobrien		"__builtin_init_dwarf_reg_size_table",
45490075Sobrien		BT_FN_VOID_PTR)
45590075SobrienDEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR,
45690075Sobrien		"__builtin_frob_return_addr",
45790075Sobrien		BT_FN_PTR_PTR)
45890075SobrienDEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR,
45990075Sobrien		"__builtin_extract_return_addr",
46090075Sobrien		BT_FN_PTR_PTR)
46190075SobrienDEF_GCC_BUILTIN(BUILT_IN_EH_RETURN,
46290075Sobrien		"__builtin_eh_return",
46390075Sobrien		BT_FN_VOID_PTRMODE_PTR)
46490075SobrienDEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
46590075Sobrien		"__builtin_eh_return_data_regno",
46690075Sobrien		BT_FN_INT_INT)
46790075Sobrien
46890075SobrienDEF_GCC_BUILTIN(BUILT_IN_VARARGS_START,
46990075Sobrien		"__builtin_varargs_start",
47090075Sobrien		BT_FN_VOID_VALIST_REF)
47190075SobrienDEF_GCC_BUILTIN(BUILT_IN_STDARG_START,
47290075Sobrien		"__builtin_stdarg_start",
47390075Sobrien		BT_FN_VOID_VALIST_REF_VAR)
47490075SobrienDEF_GCC_BUILTIN(BUILT_IN_VA_END,
47590075Sobrien		"__builtin_va_end",
47690075Sobrien		BT_FN_VOID_VALIST_REF)
47790075SobrienDEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
47890075Sobrien		"__builtin_va_copy",
47990075Sobrien		BT_FN_VOID_VALIST_REF_VALIST_ARG)
48090075SobrienDEF_GCC_BUILTIN(BUILT_IN_EXPECT,
48190075Sobrien		"__builtin_expect",
48290075Sobrien		BT_FN_LONG_LONG_LONG)
48390075Sobrien
48490075Sobrien/* C++ extensions */
48590075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_NEW)
48690075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
48790075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
48890075SobrienDEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
489