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