diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-24 22:07:01 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-24 22:07:01 +0000 |
commit | 0a68165a0a81e66224f596a3eeb36b0c7541a44a (patch) | |
tree | 897959d6b91a286bdf8aff97f680af56bc3b6e8e /gcc/builtins.def | |
parent | e0424325ef1db5a8a5b78309c5c997924955027a (diff) | |
download | gcc-0a68165a0a81e66224f596a3eeb36b0c7541a44a.tar.gz |
* builtins.c (DEF_BUILTIN): Accept 10 arguments.
(implicit_built_in_decls): New global array.
(mathfn_built_in): New global function.
(fold_trunc_transparent_mathfn): New static function
(expand_builtin_strstr, expand_bultin_strchr,
expand_builtin_strpbrk, expand_builtin_strcpy,
expand_builtin_strncpy, expand_bultin_strcmp,
expand_bultin_strncat, expand_builtin_fputs): Use
implicint_built_in_decls.
(fold_builtin): Fold floor/trunc/round/ceil/nearbyint.
* builtins.def: Fix comments.
(DEF_GCC_BUILTIN, DEF_FALLBACK_BUILTIN, DEF_EXT_FALLBACK_BUILTIN,
DEF_LIB_BUILTIN, DEF_LIB_ALWAYS_BUILTIN, DEF_EXT_LIB_BUILTIN,
DEF_C99_BULTIN, DEF_FRONT_END_LIB_BUILTIN,
DEF_EXT_FRONT_END_LIB_BUILTIN): Pass implicit as needed.
(DEF_C99_C90RES_BULTIN): New.
(*f, *l builtins): Update.
* c-common.c (DEF_BUILTIN): Initialize implicit array.
(c_expand_builtin_printf, c_expand_builtin_fprintf): Update.
* convert.c (strip_float_extensions): New global function.
* tree.h (DEF_BUILTIN): Accept 10 arguments.
(implicit_built_in_decls, mathfn_built_in, strip_float_extension):
Declare.
* java/builtins.c (define_builtin): Handle implicit.
(DEF_BUILTIN): Update.
* tm.texi (TARGET_C99_FUNCTIONS): Document.
* defaults.h (TARGET_C99_FUNCTIONS): Default to 0.
* config/linux.h (TARGET_C99_FUNCTIONS): Default to 1
when using glibc2.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61738 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.def')
-rw-r--r-- | gcc/builtins.def | 210 |
1 files changed, 112 insertions, 98 deletions
diff --git a/gcc/builtins.def b/gcc/builtins.def index 44297457899..23a69df8b67 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -22,7 +22,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* Before including this file, you should define a macro: DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, - FALLBACK_P, NONANSI_P, ATTRS) + FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT) This macro will be called once for each builtin function. The ENUM will be of type `enum built_in_function', and will indicate @@ -53,7 +53,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA exist when compiling in ANSI conformant mode. ATTRs is an attribute list as defined in builtin-attrs.def that - describes the attributes of this builtin function. */ + describes the attributes of this builtin function. + + IMPLICIT specifies condition when the builtin can be produced by + compiler. For instance C90 reserves floorf function, but does not + define it's meaning. When user uses floorf we may assume that the + floorf has the meaning we expect, but we can't produce floorf by + simplifing floor((double)float) since runtime don't need to implement it. */ /* A GCC builtin (like __builtin_saveregs) is provided by the compiler, but does not correspond to a function in the standard @@ -61,7 +67,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef DEF_GCC_BUILTIN #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \ - false, false, false, ATTRS) + false, false, false, ATTRS, true) /* A fallback builtin is a builtin (like __builtin_puts) that falls @@ -71,7 +77,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef DEF_FALLBACK_BUILTIN #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ - false, true, false, ATTRS) + false, true, false, ATTRS, true) /* 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 @@ -80,7 +86,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #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, ATTR_NOTHROW_LIST) + false, true, true, ATTR_NOTHROW_LIST, true) /* A library builtin (like __builtin_strchr) is a builtin equivalent of an ANSI/ISO standard library function. In addition to the @@ -91,14 +97,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef DEF_LIB_BUILTIN #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ - true, true, false, ATTRS) + true, true, false, ATTRS, true) /* 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, ATTR_CONST_NOTHROW_LIST) + true, false, true, ATTR_CONST_NOTHROW_LIST, 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 @@ -107,21 +113,29 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef DEF_EXT_LIB_BUILTIN #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ - true, true, true, ATTRS) + true, true, true, ATTRS, false) /* 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, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ - true, true, !flag_isoc99, ATTRS) + true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS) + +/* Builtin that is specified by C99 and C90 reserve the name for future use. + We can still recognize the builtin in C90 mode but we can't produce it + implicitly. */ +#undef DEF_C99_C90RES_BUILTIN +#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ + DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ + true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS) /* 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, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ - true, true, false, ATTRS) + true, true, false, ATTRS, true) /* 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 @@ -130,13 +144,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef DEF_EXT_FRONT_END_LIB_BUILTIN #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ - true, true, true, ATTRS) + true, true, true, ATTRS, 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, ATTR_NOTHROW_LIST) + BT_LAST, false, false, false, ATTR_NOTHROW_LIST, false) /* If SMALL_STACK is defined, then `alloca' is only defined in its `__builtin' form. */ @@ -173,27 +187,27 @@ DEF_LIB_BUILTIN(BUILT_IN_FLOOR, "__builtin_floor", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_FLOORF, - "__builtin_floorf", - BT_FN_FLOAT_FLOAT, - ATTR_CONST_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_FLOORL, - "__builtin_floorl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - ATTR_CONST_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF, + "__builtin_floorf", + BT_FN_FLOAT_FLOAT, + ATTR_CONST_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL, + "__builtin_floorl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + ATTR_CONST_NOTHROW_LIST) DEF_LIB_BUILTIN(BUILT_IN_CEIL, "__builtin_ceil", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_CEILF, - "__builtin_ceilf", - BT_FN_FLOAT_FLOAT, - ATTR_CONST_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_CEILL, - "__builtin_ceill", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - ATTR_CONST_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF, + "__builtin_ceilf", + BT_FN_FLOAT_FLOAT, + ATTR_CONST_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL, + "__builtin_ceill", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + ATTR_CONST_NOTHROW_LIST) DEF_C99_BUILTIN(BUILT_IN_ROUND, "__builtin_round", @@ -295,14 +309,14 @@ DEF_BUILTIN (BUILT_IN_BZERO, BT_FN_VOID_PTR_SIZE, BT_FN_VOID_VAR, true, true, true, - ATTR_NOTHROW_LIST) + ATTR_NOTHROW_LIST, false) DEF_BUILTIN (BUILT_IN_BCMP, "__builtin_bcmp", BUILT_IN_NORMAL, BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, BT_FN_INT_VAR, true, true, true, - ATTR_PURE_NOTHROW_LIST) + ATTR_PURE_NOTHROW_LIST, false) DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, "__builtin_ffs", @@ -414,68 +428,68 @@ DEF_LIB_BUILTIN(BUILT_IN_LOG, : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_SQRTF, - "__builtin_sqrtf", - BT_FN_FLOAT_FLOAT, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_SINF, - "__builtin_sinf", - BT_FN_FLOAT_FLOAT, - flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_COSF, - "__builtin_cosf", - BT_FN_FLOAT_FLOAT, - flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_EXPF, - "__builtin_expf", - BT_FN_FLOAT_FLOAT, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_LOGF, - "__builtin_logf", - BT_FN_FLOAT_FLOAT, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_SQRTL, - "__builtin_sqrtl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_SINL, - "__builtin_sinl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_COSL, - "__builtin_cosl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST) -DEF_LIB_BUILTIN(BUILT_IN_EXPL, - "__builtin_expl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) -DEF_LIB_BUILTIN(BUILT_IN_LOGL, - "__builtin_logl", - BT_FN_LONG_DOUBLE_LONG_DOUBLE, - flag_errno_math ? ATTR_NOTHROW_LIST - : (flag_unsafe_math_optimizations - ? ATTR_CONST_NOTHROW_LIST - : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF, + "__builtin_sqrtf", + BT_FN_FLOAT_FLOAT, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF, + "__builtin_sinf", + BT_FN_FLOAT_FLOAT, + flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF, + "__builtin_cosf", + BT_FN_FLOAT_FLOAT, + flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF, + "__builtin_expf", + BT_FN_FLOAT_FLOAT, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF, + "__builtin_logf", + BT_FN_FLOAT_FLOAT, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL, + "__builtin_sqrtl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL, + "__builtin_sinl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL, + "__builtin_cosl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST) +DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL, + "__builtin_expl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) +DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL, + "__builtin_logl", + BT_FN_LONG_DOUBLE_LONG_DOUBLE, + flag_errno_math ? ATTR_NOTHROW_LIST + : (flag_unsafe_math_optimizations + ? ATTR_CONST_NOTHROW_LIST + : ATTR_PURE_NOTHROW_LIST)) DEF_GCC_BUILTIN(BUILT_IN_INF, "__builtin_inf", @@ -616,7 +630,7 @@ DEF_BUILTIN (BUILT_IN_FPUTS, BUILT_IN_NORMAL, BT_FN_INT_CONST_STRING_PTR, BT_FN_INT_VAR, - true, true, false, ATTR_NOTHROW_LIST) + true, true, false, ATTR_NOTHROW_LIST, true) DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE, "__builtin_fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, @@ -650,7 +664,7 @@ DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_NORMAL, BT_FN_INT_CONST_STRING_PTR, BT_FN_INT_VAR, - true, true, true, ATTR_NOTHROW_LIST) + true, true, true, ATTR_NOTHROW_LIST, true) DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, "__builtin_fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) @@ -755,7 +769,7 @@ DEF_BUILTIN (BUILT_IN_ABORT, BT_FN_VOID, BT_FN_VOID, 1, 0, 0, - ATTR_NORETURN_NOTHROW_LIST) + ATTR_NORETURN_NOTHROW_LIST, true) DEF_BUILTIN (BUILT_IN_EXIT, "__builtin_exit", @@ -763,7 +777,7 @@ DEF_BUILTIN (BUILT_IN_EXIT, BT_FN_VOID_INT, BT_FN_VOID_INT, 1, 0, 0, - ATTR_NORETURN_NOTHROW_LIST) + ATTR_NORETURN_NOTHROW_LIST, true) DEF_BUILTIN (BUILT_IN__EXIT, "__builtin__exit", @@ -771,7 +785,7 @@ DEF_BUILTIN (BUILT_IN__EXIT, BT_FN_VOID_INT, BT_FN_VOID_INT, 1, 0, 1, - ATTR_NORETURN_NOTHROW_LIST) + ATTR_NORETURN_NOTHROW_LIST, false) DEF_BUILTIN (BUILT_IN__EXIT2, "__builtin__Exit", @@ -779,5 +793,5 @@ DEF_BUILTIN (BUILT_IN__EXIT2, BT_FN_VOID_INT, BT_FN_VOID_INT, 1, 0, !flag_isoc99, - ATTR_NORETURN_NOTHROW_LIST) + ATTR_NORETURN_NOTHROW_LIST, false) |