diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-01 22:35:50 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-01 22:35:50 +0000 |
commit | 1dfa965e65d6b081e78b2b2fa7be3fb84a7f664e (patch) | |
tree | e2e2c8b7ff41d4e0a9b83ff190cf53f596eecefa | |
parent | 6bf5ed8d9c7340ed0e889dfaa573a5972ab15feb (diff) | |
download | gcc-1dfa965e65d6b081e78b2b2fa7be3fb84a7f664e.tar.gz |
* builtins.def (BUILT_IN_IMAXABS): Add.
* builtins.c (expand_builtin): Also abort on BUILT_IN_IMAXABS.
* c-common.c (c_common_nodes_and_builtins): Create builtin
functions __builtin_imaxabs, and plain imaxabs unless
flag_no_nonansi_builtin outside C99 mode.
(expand_tree_builtin): Handle BUILT_IN_IMAXABS.
* extend.texi: Document builtin imaxabs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37932 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/builtins.c | 1 | ||||
-rw-r--r-- | gcc/builtins.def | 1 | ||||
-rw-r--r-- | gcc/c-common.c | 17 | ||||
-rw-r--r-- | gcc/extend.texi | 4 |
5 files changed, 30 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa8cd850a59..509dfc9d83e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2000-12-01 Joseph S. Myers <jsm28@cam.ac.uk> + * builtins.def (BUILT_IN_IMAXABS): Add. + * builtins.c (expand_builtin): Also abort on BUILT_IN_IMAXABS. + * c-common.c (c_common_nodes_and_builtins): Create builtin + functions __builtin_imaxabs, and plain imaxabs unless + flag_no_nonansi_builtin outside C99 mode. + (expand_tree_builtin): Handle BUILT_IN_IMAXABS. + * extend.texi: Document builtin imaxabs. + +2000-12-01 Joseph S. Myers <jsm28@cam.ac.uk> + * c-common.c: Include "defaults.h". (WINT_TYPE, INTMAX_TYPE, UINTMAX_TYPE): Define. (c_common_nodes_and_builtins): Create string_type_node, diff --git a/gcc/builtins.c b/gcc/builtins.c index 0e59904325e..154bd706284 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3098,6 +3098,7 @@ expand_builtin (exp, target, subtarget, mode, ignore) case BUILT_IN_ABS: case BUILT_IN_LABS: case BUILT_IN_LLABS: + case BUILT_IN_IMAXABS: case BUILT_IN_FABS: /* build_function_call changes these into ABS_EXPR. */ abort (); diff --git a/gcc/builtins.def b/gcc/builtins.def index ec4325284a3..9d2884e072a 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -24,6 +24,7 @@ DEF_BUILTIN(BUILT_IN_ABS) DEF_BUILTIN(BUILT_IN_FABS) DEF_BUILTIN(BUILT_IN_LABS) DEF_BUILTIN(BUILT_IN_LLABS) +DEF_BUILTIN(BUILT_IN_IMAXABS) DEF_BUILTIN(BUILT_IN_FFS) DEF_BUILTIN(BUILT_IN_DIV) DEF_BUILTIN(BUILT_IN_LDIV) diff --git a/gcc/c-common.c b/gcc/c-common.c index 0a605f83741..c4fd4639b06 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -4911,6 +4911,7 @@ c_common_nodes_and_builtins () tree string_ftype_string_cstring_sizet, int_ftype_cstring_cstring_sizet; tree long_ftype_long; tree longlong_ftype_longlong; + tree intmax_ftype_intmax; /* Either char* or void*. */ tree traditional_ptr_type_node; /* Either const char* or const void*. */ @@ -5007,6 +5008,11 @@ c_common_nodes_and_builtins () tree_cons (NULL_TREE, long_long_integer_type_node, endlink)); + intmax_ftype_intmax + = build_function_type (intmax_type_node, + tree_cons (NULL_TREE, intmax_type_node, + endlink)); + int_ftype_cptr_cptr_sizet = build_function_type (integer_type_node, tree_cons (NULL_TREE, const_ptr_type_node, @@ -5190,6 +5196,8 @@ c_common_nodes_and_builtins () BUILT_IN_NORMAL, NULL_PTR); builtin_function ("__builtin_llabs", longlong_ftype_longlong, BUILT_IN_LLABS, BUILT_IN_NORMAL, NULL_PTR); + builtin_function ("__builtin_imaxabs", intmax_ftype_intmax, BUILT_IN_IMAXABS, + BUILT_IN_NORMAL, NULL_PTR); builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS, BUILT_IN_NORMAL, NULL_PTR); builtin_function ("__builtin_classify_type", default_function_type, @@ -5375,8 +5383,12 @@ c_common_nodes_and_builtins () builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, BUILT_IN_NORMAL, NULL_PTR); if (flag_isoc99 || ! flag_no_nonansi_builtin) - builtin_function ("llabs", longlong_ftype_longlong, BUILT_IN_LLABS, - BUILT_IN_NORMAL, NULL_PTR); + { + builtin_function ("llabs", longlong_ftype_longlong, BUILT_IN_LLABS, + BUILT_IN_NORMAL, NULL_PTR); + builtin_function ("imaxabs", intmax_ftype_intmax, BUILT_IN_IMAXABS, + BUILT_IN_NORMAL, NULL_PTR); + } builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, BUILT_IN_NORMAL, NULL_PTR); builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP, @@ -5573,6 +5585,7 @@ expand_tree_builtin (function, params, coerced_params) case BUILT_IN_ABS: case BUILT_IN_LABS: case BUILT_IN_LLABS: + case BUILT_IN_IMAXABS: case BUILT_IN_FABS: if (coerced_params == 0) return integer_zero_node; diff --git a/gcc/extend.texi b/gcc/extend.texi index 17e037d2c16..bf60bca726d 100644 --- a/gcc/extend.texi +++ b/gcc/extend.texi @@ -3296,6 +3296,7 @@ function as well. @findex fabsl @findex ffs @findex fputs +@findex imaxabs @findex index @findex labs @findex llabs @@ -3348,7 +3349,8 @@ as builtins. Corresponding versions @code{__builtin_alloca}, @code{__builtin_rindex} and @code{__builtin_ffs} are also recognized in strict ISO C mode. -The ISO C99 function @code{llabs} is handled as a builtin except in +The ISO C99 functions @code{llabs} and @code{imaxabs} +are handled as builtins except in strict ISO C89 mode. There are also builtin versions of the ISO C99 functions @code{cosf}, @code{cosl}, @code{fabsf}, @code{fabsl}, @code{sinf}, @code{sinl}, @code{sqrtf}, and @code{sqrtl}, that are |