| /* This file contains the definitions and documentation for the |
| builtins used in the GNU compiler. |
| Copyright (C) 2000, 2001 Free Software Foundation, Inc. |
| |
| This file is part of GCC. |
| |
| GCC is free software; you can redistribute it and/or modify it under |
| the terms of the GNU General Public License as published by the Free |
| Software Foundation; either version 2, or (at your option) any later |
| version. |
| |
| GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
| WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GCC; see the file COPYING. If not, write to the Free |
| Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 02111-1307, USA. */ |
| |
| /* Before including this file, you should define a macro: |
| |
| DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, |
| FALLBACK_P, NONANSI_P) |
| |
| This macro will be called once for each builtin function. The |
| ENUM will be of type `enum built_in_function', and will indicate |
| which builtin function is being processed. The NAME of the builtin |
| function (which will always start with `__builtin_') is a string |
| literal. The CLASS is of type `enum built_in_class' and indicates |
| what kind of builtin is being processed. |
| |
| Some builtins are actually two separate functions. For example, |
| for `strcmp' there are two builtin functions; `__builtin_strcmp' |
| and `strcmp' itself. Both behave identically. Other builtins |
| define only the `__builtin' variant. If BOTH_P is TRUE, then this |
| builtin has both variants; otherwise, it is has only the first |
| variant. |
| |
| TYPE indicates the type of the function. The symbols correspond to |
| enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE |
| is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE |
| should be ignored. |
| |
| If FALLBACK_P is true then, if for some reason, the compiler cannot |
| expand the builtin function directly, it will call the |
| corresponding library function (which does not have the |
| `__builtin_' prefix. |
| |
| If NONANSI_P is true, then the non-`__builtin_' variant is not an |
| ANSI/ISO library function, and so we should pretend it does not |
| exist when compiling in ANSI conformant mode. */ |
| |
| /* A GCC builtin (like __builtin_saveregs) is provided by the |
| compiler, but does not correspond to a function in the standard |
| library. */ |
| #undef DEF_GCC_BUILTIN |
| #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \ |
| false, false, false) |
| |
| |
| /* A fallback builtin is a builtin (like __builtin_puts) that falls |
| back to the corresopnding library function if necessary -- but |
| for which we should not introduce the non-`__builtin' variant of |
| the name. */ |
| #undef DEF_FALLBACK_BUILTIN |
| #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| false, true, false) |
| |
| /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that |
| is specified by ANSI/ISO C. So, when we're being fully conformant |
| we ignore the version of these builtins that does not begin with |
| __builtin. */ |
| #undef DEF_EXT_FALLBACK_BUILTIN |
| #define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| false, true, true) |
| |
| /* A library builtin (like __builtin_strchr) is a builtin equivalent |
| of an ANSI/ISO standard library function. In addition to the |
| `__builtin' version, we will create an ordinary version (e.g, |
| `strchr') as well. If we cannot compute the answer using the |
| builtin function, we will fall back to the standard library |
| version. */ |
| #undef DEF_LIB_BUILTIN |
| #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| true, true, false) |
| |
| /* Like DEF_LIB_BUILTIN, except that a call to the builtin should |
| never fall back to the library version. */ |
| #undef DEF_LIB_ALWAYS_BUILTIN |
| #define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| true, false, true) |
| |
| /* Like DEF_LIB_BUILTIN, except that the function is not one that is |
| specified by ANSI/ISO C. So, when we're being fully conformant we |
| ignore the version of these builtins that does not begin with |
| __builtin. */ |
| #undef DEF_EXT_LIB_BUILTIN |
| #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| true, true, true) |
| |
| /* Like DEF_LIB_BUILTIN, except that the function is only a part of |
| the standard in C99 or above. */ |
| #undef DEF_C99_BUILTIN |
| #define DEF_C99_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ |
| true, !flag_isoc99, true) |
| |
| /* Like DEF_LIB_BUILTIN, except that the function is expanded in the |
| front-end. */ |
| #undef DEF_FRONT_END_LIB_BUILTIN |
| #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ |
| true, true, false) |
| |
| /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one |
| that is specified by ANSI/ISO C. So, when we're being fully |
| conformant we ignore the version of these builtins that does not |
| begin with __builtin. */ |
| #undef DEF_EXT_FRONT_END_LIB_BUILTIN |
| #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE) \ |
| DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ |
| true, true, true) |
| |
| /* A built-in that is not currently used. */ |
| #undef DEF_UNUSED_BUILTIN |
| #define DEF_UNUSED_BUILTIN(X) \ |
| DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST, \ |
| BT_LAST, false, false, false) |
| |
| /* If SMALL_STACK is defined, then `alloca' is only defined in its |
| `__builtin' form. */ |
| #if SMALL_STACK |
| DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA, |
| "__builtin_alloca", |
| BT_FN_PTR_SIZE) |
| #else |
| DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA, |
| "__builtin_alloca", |
| BT_FN_PTR_SIZE) |
| #endif |
| |
| DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS, |
| "__builtin_abs", |
| BT_FN_INT_INT) |
| DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS, |
| "__builtin_labs", |
| BT_FN_LONG_LONG) |
| |
| DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS, |
| "__builtin_fabs", |
| BT_FN_DOUBLE_DOUBLE) |
| DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF, |
| "__builtin_fabsf", |
| BT_FN_FLOAT_FLOAT) |
| DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL, |
| "__builtin_fabsl", |
| BT_FN_LONG_DOUBLE_LONG_DOUBLE) |
| |
| DEF_C99_BUILTIN(BUILT_IN_LLABS, |
| "__builtin_llabs", |
| BT_FN_LONGLONG_LONGLONG) |
| DEF_C99_BUILTIN(BUILT_IN_IMAXABS, |
| "__builtin_imaxabs", |
| BT_FN_INTMAX_INTMAX) |
| DEF_C99_BUILTIN(BUILT_IN_CONJ, |
| "__builtin_conj", |
| BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE) |
| DEF_C99_BUILTIN(BUILT_IN_CONJF, |
| "__builtin_conjf", |
| BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT) |
| DEF_C99_BUILTIN(BUILT_IN_CONJL, |
| "__builtin_conjl", |
| BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) |
| DEF_C99_BUILTIN(BUILT_IN_CREAL, |
| "__builtin_creal", |
| BT_FN_DOUBLE_COMPLEX_DOUBLE) |
| DEF_C99_BUILTIN(BUILT_IN_CREALF, |
| "__builtin_crealf", |
| BT_FN_FLOAT_COMPLEX_FLOAT) |
| DEF_C99_BUILTIN(BUILT_IN_CREALL, |
| "__builtin_creall", |
| BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) |
| DEF_C99_BUILTIN(BUILT_IN_CIMAG, |
| "__builtin_cimag", |
| BT_FN_DOUBLE_COMPLEX_DOUBLE) |
| DEF_C99_BUILTIN(BUILT_IN_CIMAGF, |
| "__builtin_cimagf", |
| BT_FN_FLOAT_COMPLEX_FLOAT) |
| DEF_C99_BUILTIN(BUILT_IN_CIMAGL, |
| "__builtin_cimagl", |
| BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) |
| |
| DEF_UNUSED_BUILTIN(BUILT_IN_DIV) |
| DEF_UNUSED_BUILTIN(BUILT_IN_LDIV) |
| DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR) |
| DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL) |
| DEF_UNUSED_BUILTIN(BUILT_IN_FMOD) |
| DEF_UNUSED_BUILTIN(BUILT_IN_FREM) |
| |
| /* The system prototypes for `bzero' and `bcmp' functions have many |
| variations, so don't specify parameters to avoid conflicts. The |
| expand_* functions check the argument types anyway. */ |
| DEF_BUILTIN (BUILT_IN_BZERO, |
| "__builtin_bzero", |
| BUILT_IN_NORMAL, |
| BT_FN_VOID_TRAD_PTR_LEN, |
| BT_FN_VOID_VAR, |
| true, true, true) |
| DEF_BUILTIN (BUILT_IN_BCMP, |
| "__builtin_bcmp", |
| BUILT_IN_NORMAL, |
| BT_FN_INT_TRAD_CONST_PTR_TRAD_CONST_PTR_LEN, |
| BT_FN_INT_VAR, |
| true, true, true) |
| |
| DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, |
| "__builtin_ffs", |
| BT_FN_INT_INT) |
| DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, |
| "__builtin_index", |
| BT_FN_STRING_CONST_STRING_INT) |
| DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, |
| "__builtin_rindex", |
| BT_FN_STRING_CONST_STRING_INT) |
| |
| DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, |
| "__builtin_memcpy", |
| BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE) |
| DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, |
| "__builtin_memcmp", |
| BT_FN_INT_CONST_PTR_CONST_PTR_SIZE) |
| DEF_LIB_BUILTIN(BUILT_IN_MEMSET, |
| "__builtin_memset", |
| BT_FN_TRAD_PTR_PTR_INT_SIZE) |
| |
| DEF_LIB_BUILTIN(BUILT_IN_STRCAT, |
| "__builtin_strcat", |
| BT_FN_STRING_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, |
| "__builtin_strncat", |
| BT_FN_STRING_STRING_CONST_STRING_SIZE) |
| DEF_LIB_BUILTIN(BUILT_IN_STRCPY, |
| "__builtin_strcpy", |
| BT_FN_STRING_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, |
| "__builtin_strncpy", |
| BT_FN_STRING_STRING_CONST_STRING_SIZE) |
| DEF_LIB_BUILTIN(BUILT_IN_STRCMP, |
| "__builtin_strcmp", |
| BT_FN_INT_CONST_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, |
| "__builtin_strncmp", |
| BT_FN_INT_CONST_STRING_CONST_STRING_SIZE) |
| DEF_LIB_BUILTIN(BUILT_IN_STRLEN, |
| "__builtin_strlen", |
| BT_FN_LEN_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRSTR, |
| "__builtin_strstr", |
| BT_FN_STRING_CONST_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, |
| "__builtin_strpbrk", |
| BT_FN_STRING_CONST_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRSPN, |
| "__builtin_strspn", |
| BT_FN_SIZE_CONST_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, |
| "__builtin_strcspn", |
| BT_FN_SIZE_CONST_STRING_CONST_STRING) |
| DEF_LIB_BUILTIN(BUILT_IN_STRCHR, |
| "__builtin_strchr", |
| BT_FN_STRING_CONST_STRING_INT) |
| DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, |
| "__builtin_strrchr", |
| BT_FN_STRING_CONST_STRING_INT) |
| |
| DEF_LIB_BUILTIN(BUILT_IN_SQRT, |
| "__builtin_sqrt", |
| BT_FN_DOUBLE_DOUBLE) |
| DEF_LIB_BUILTIN(BUILT_IN_SIN, |
| "__builtin_sin", |
| BT_FN_DOUBLE_DOUBLE) |
| DEF_LIB_BUILTIN(BUILT_IN_COS, |
| "__builtin_cos", |
| BT_FN_DOUBLE_DOUBLE) |
| DEF_LIB_BUILTIN(BUILT_IN_SQRTF, |
| "__builtin_sqrtf", |
| BT_FN_FLOAT_FLOAT) |
| DEF_LIB_BUILTIN(BUILT_IN_SINF, |
| "__builtin_sinf", |
| BT_FN_FLOAT_FLOAT) |
| DEF_LIB_BUILTIN(BUILT_IN_COSF, |
| "__builtin_cosf", |
| BT_FN_FLOAT_FLOAT) |
| DEF_LIB_BUILTIN(BUILT_IN_SQRTL, |
| "__builtin_sqrtl", |
| BT_FN_LONG_DOUBLE_LONG_DOUBLE) |
| DEF_LIB_BUILTIN(BUILT_IN_SINL, |
| "__builtin_sinl", |
| BT_FN_LONG_DOUBLE_LONG_DOUBLE) |
| DEF_LIB_BUILTIN(BUILT_IN_COSL, |
| "__builtin_cosl", |
| BT_FN_LONG_DOUBLE_LONG_DOUBLE) |
| |
| DEF_UNUSED_BUILTIN(BUILT_IN_GETEXP) |
| DEF_UNUSED_BUILTIN(BUILT_IN_GETMAN) |
| |
| DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, |
| "__builtin_saveregs", |
| BT_FN_PTR_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, |
| "__builtin_classify_type", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, |
| "__builtin_next_arg", |
| BT_FN_PTR_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, |
| "__builtin_args_info", |
| BT_FN_INT_INT) |
| DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, |
| "__builtin_constant_p", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, |
| "__builtin_frame_address", |
| BT_FN_PTR_UNSIGNED) |
| DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, |
| "__builtin_return_address", |
| BT_FN_PTR_UNSIGNED) |
| DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, |
| "__builtin_aggregate_incoming_address", |
| BT_FN_PTR_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, |
| "__builtin_apply_args", |
| BT_FN_PTR_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_APPLY, |
| "__builtin_apply", |
| BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE) |
| DEF_GCC_BUILTIN(BUILT_IN_RETURN, |
| "__builtin_return", |
| BT_FN_VOID_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_SETJMP, |
| "__builtin_setjmp", |
| BT_FN_INT_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, |
| "__builtin_longjmp", |
| BT_FN_VOID_PTR_INT) |
| DEF_GCC_BUILTIN(BUILT_IN_TRAP, |
| "__builtin_trap", |
| BT_FN_VOID) |
| DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, |
| "__builtin_prefetch", |
| BT_FN_VOID_CONST_PTR_VAR) |
| |
| /* Stdio builtins. */ |
| DEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR, |
| "__builtin_putchar", |
| BT_FN_INT_INT) |
| DEF_FALLBACK_BUILTIN(BUILT_IN_PUTS, |
| "__builtin_puts", |
| BT_FN_INT_CONST_STRING) |
| DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF, |
| "__builtin_printf", |
| BT_FN_INT_CONST_STRING_VAR) |
| DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC, |
| "__builtin_fputc", |
| BT_FN_INT_INT_PTR) |
| /* Declare the __builtin_ style with arguments and the regular style |
| without them. We rely on stdio.h to supply the arguments for the |
| regular style declaration since we had to use void* instead of |
| FILE* in the __builtin_ prototype supplied here. */ |
| DEF_BUILTIN (BUILT_IN_FPUTS, |
| "__builtin_fputs", |
| BUILT_IN_NORMAL, |
| BT_FN_INT_CONST_STRING_PTR, |
| BT_FN_INT_VAR, |
| true, true, false) |
| DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE, |
| "__builtin_fwrite", |
| BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) |
| DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF, |
| "__builtin_fprintf", |
| BT_FN_INT_PTR_CONST_STRING_VAR) |
| |
| /* Stdio unlocked builtins. */ |
| |
| DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, |
| "__builtin_putchar_unlocked", |
| BT_FN_INT_INT) |
| DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED, |
| "__builtin_puts_unlocked", |
| BT_FN_INT_CONST_STRING) |
| DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, |
| "__builtin_printf_unlocked", |
| BT_FN_INT_CONST_STRING_VAR) |
| DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, |
| "__builtin_fputc_unlocked", |
| BT_FN_INT_INT_PTR) |
| /* Declare the __builtin_ style with arguments and the regular style |
| without them. We rely on stdio.h to supply the arguments for the |
| regular style declaration since we had to use void* instead of |
| FILE* in the __builtin_ prototype supplied here. */ |
| DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED, |
| "__builtin_fputs_unlocked", |
| BUILT_IN_NORMAL, |
| BT_FN_INT_CONST_STRING_PTR, |
| BT_FN_INT_VAR, |
| true, true, true) |
| DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, |
| "__builtin_fwrite_unlocked", |
| BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) |
| DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, |
| "__builtin_fprintf_unlocked", |
| BT_FN_INT_PTR_CONST_STRING_VAR) |
| |
| /* ISO C99 floating point unordered comparisons. */ |
| DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, |
| "__builtin_isgreater", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, |
| "__builtin_isgreaterequal", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ISLESS, |
| "__builtin_isless", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, |
| "__builtin_islessequal", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, |
| "__builtin_islessgreater", |
| BT_FN_INT_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, |
| "__builtin_isunordered", |
| BT_FN_INT_VAR) |
| |
| /* Various hooks for the DWARF 2 __throw routine. */ |
| DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, |
| "__builtin_unwind_init", |
| BT_FN_VOID) |
| DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, |
| "__builtin_dwarf_cfa", |
| BT_FN_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_DWARF_FP_REGNUM, |
| "__builtin_dwarf_fp_regnum", |
| BT_FN_UNSIGNED) |
| DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, |
| "__builtin_init_dwarf_reg_size_table", |
| BT_FN_VOID_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, |
| "__builtin_frob_return_addr", |
| BT_FN_PTR_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, |
| "__builtin_extract_return_addr", |
| BT_FN_PTR_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, |
| "__builtin_eh_return", |
| BT_FN_VOID_PTRMODE_PTR) |
| DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, |
| "__builtin_eh_return_data_regno", |
| BT_FN_INT_INT) |
| |
| DEF_GCC_BUILTIN(BUILT_IN_VARARGS_START, |
| "__builtin_varargs_start", |
| BT_FN_VOID_VALIST_REF) |
| DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, |
| "__builtin_stdarg_start", |
| BT_FN_VOID_VALIST_REF_VAR) |
| DEF_GCC_BUILTIN(BUILT_IN_VA_END, |
| "__builtin_va_end", |
| BT_FN_VOID_VALIST_REF) |
| DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, |
| "__builtin_va_copy", |
| BT_FN_VOID_VALIST_REF_VALIST_ARG) |
| DEF_GCC_BUILTIN(BUILT_IN_EXPECT, |
| "__builtin_expect", |
| BT_FN_LONG_LONG_LONG) |
| |
| /* C++ extensions */ |
| DEF_UNUSED_BUILTIN(BUILT_IN_NEW) |
| DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW) |
| DEF_UNUSED_BUILTIN(BUILT_IN_DELETE) |
| DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE) |