summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-01 22:35:50 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-01 22:35:50 +0000
commit1dfa965e65d6b081e78b2b2fa7be3fb84a7f664e (patch)
treee2e2c8b7ff41d4e0a9b83ff190cf53f596eecefa
parent6bf5ed8d9c7340ed0e889dfaa573a5972ab15feb (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/builtins.c1
-rw-r--r--gcc/builtins.def1
-rw-r--r--gcc/c-common.c17
-rw-r--r--gcc/extend.texi4
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