This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch for builtin imaxabs


This patch adds a builtin version of the C99 function imaxabs.  It
depends on my previous patch
<URL:http://gcc.gnu.org/ml/gcc-patches/2000-11/msg00713.html>.

Bootstrapped with no regressions on i686-pc-linux-gnu.  OK to commit?

2000-11-17  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.

--- builtins.c.orig	Fri Nov 17 07:52:31 2000
+++ builtins.c	Fri Nov 17 10:53:29 2000
@@ -2764,6 +2764,7 @@ expand_builtin (exp, target, subtarget,
     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 ();
--- builtins.def.orig	Tue Nov 14 19:44:01 2000
+++ builtins.def	Fri Nov 17 10:53:16 2000
@@ -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)
--- c-common.c.orig	Fri Nov 17 10:46:33 2000
+++ c-common.c	Fri Nov 17 10:56:34 2000
@@ -4845,6 +4845,7 @@ c_common_nodes_and_builtins ()
   tree string_ftype_string_int, string_ftype_string_string;
   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*.  */
@@ -4941,6 +4942,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,
@@ -5108,6 +5114,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,
@@ -5288,8 +5296,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,
@@ -5482,6 +5494,7 @@ expand_tree_builtin (function, params, c
     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;
--- extend.texi.orig	Mon Nov 13 13:29:31 2000
+++ extend.texi	Fri Nov 17 10:57:28 2000
@@ -3263,6 +3263,7 @@ function as well.
 @findex fabsl
 @findex ffs
 @findex fputs
+@findex imaxabs
 @findex index
 @findex labs
 @findex llabs
@@ -3313,7 +3314,8 @@ as builtins.  Corresponding versions @co
 @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

-- 
Joseph S. Myers
jsm28@cam.ac.uk


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]