Committed: patch to separate builtins in classes

Bernd Schmidt bernds@cygnus.co.uk
Fri Sep 24 03:15:00 GMT 1999


The following patch creates a new enum, built_in_class, which is used to
separate builtin functions.  We can tell who created them, and who is
responsible for expanding them.  This isn't used currently, but it will be
used in the future e.g. for adding builtins in a machine description which
get expanded to uncommon machine instructions which wouldn't otherwise be
generated (e.g. for SIMD support on some chips).

Reviewed by Richard Henderson.

Bernd

+	* builtins.c (expand_builtin): Use MD_EXPAND_BUILTIN if defined.
+	* c-common.h (builtin_function): Don't declare.
+
+	* c-decl.c (duplicate_decls): Use DECL_BUILT_IN_CLASS rather than
+	DECL_BUILT_IN.
+	(pushdecl): Likewise.
+	(finish_decl): Likewise.
+	(builtin_function): New arg CLASS.  Arg FUNCTION_CODE now of type
+	int.  All callers changed.
+	Set the builtin's DECL_BUILT_IN_CLASS.
+	* tree.h (enum built_in_class): New.
+	(enum built_in_function): Delete NOT_BUILT_IN.
+	(DECL_FUNCTION_CODE): The corresponding field in tree_decl is now
+	in a union.
+	(DECL_SET_FUNCTION_CODE): Likewise.
+	(DECL_BUILT_IN_CLASS): New macro.
+	(DECL_BUILT_IN): Use DECL_BUILT_IN_CLASS.
+	(struct tree_decl): Split builtin function code field into a
+	struct.
+	(builtin_function): Declare.

Index: ch/ChangeLog
+	* ch-tree.h (builtin_function): Don't declare.
+	* decl.c (builtin_function): New arg CLASS.  Arg FUNCTION_CODE now of
+ 	type int.  All callers changed.
+	Set the builtin's DECL_BUILT_IN_CLASS.

Index: cp/ChangeLog
+	* decl.c (duplicate_decls): Use DECL_BUILT_IN_CLASS rather than
+	DECL_BUILT_IN.
+	(builtin_function): New arg CLASS.  Arg CODE now of type int.  All
+	callers changed.
+	Set the builtin's DECL_BUILT_IN_CLASS.

Index: f/ChangeLog
+	* com.c (duplicate_decls): Use DECL_BUILT_IN_CLASS rather than
+	DECL_BUILT_IN.
+	(builtin_function): No longer static.  New arg CLASS.  Arg
+	FUNCTION_CODE now of type int.  All callers changed.
+	Set the builtin's DECL_BUILT_IN_CLASS.
+

Index: java/ChangeLog
+	* decl.c (builtin_function): No longer static.  New arg CLASS.  Arg
+	FUNCTION_CODE now of type int.  All callers changed.
+	Set the builtin's DECL_BUILT_IN_CLASS.
+

Index: builtins.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/builtins.c,v
retrieving revision 1.13
diff -u -p -r1.13 builtins.c
--- builtins.c	1999/09/23 12:36:04	1.13
+++ builtins.c	1999/09/24 09:54:07
@@ -2222,6 +2222,11 @@ expand_builtin (exp, target, subtarget, 
   tree arglist = TREE_OPERAND (exp, 1);
   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
 
+#ifdef MD_EXPAND_BUILTIN
+  if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
+    return MD_EXPAND_BUILTIN (exp, target, subtarget, mode, ignore);
+#endif
+  
   /* When not optimizing, generate calls to library functions for a certain
      set of builtins.  */
   if (! optimize && ! CALLED_AS_BUILT_IN (fndecl)
Index: c-common.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/c-common.c,v
retrieving revision 1.71
diff -u -p -r1.71 c-common.c
--- c-common.c	1999/09/23 21:03:53	1.71
+++ c-common.c	1999/09/24 09:54:08
@@ -3581,70 +3581,74 @@ c_common_nodes_and_builtins (cplus_mode,
 							    endlink))));
 
   builtin_function ("__builtin_constant_p", default_function_type,
-		    BUILT_IN_CONSTANT_P, NULL_PTR);
+		    BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
-		    BUILT_IN_RETURN_ADDRESS, NULL_PTR);
+		    BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
-		    BUILT_IN_FRAME_ADDRESS, NULL_PTR);
+		    BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
-		    BUILT_IN_ALLOCA, "alloca");
-  builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
+		    BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca");
+  builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS,
+		    BUILT_IN_NORMAL, NULL_PTR);
   /* Define alloca, ffs as builtins.
      Declare _exit just to mark it as volatile.  */
   if (! no_builtins && ! no_nonansi_builtins)
     {
       temp = builtin_function ("alloca", ptr_ftype_sizetype,
-			       BUILT_IN_ALLOCA, NULL_PTR);
+			       BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL_PTR);
       /* Suppress error if redefined as a non-function.  */
       DECL_BUILT_IN_NONANSI (temp) = 1;
-      temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
+      temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS,
+			       BUILT_IN_NORMAL, NULL_PTR);
       /* Suppress error if redefined as a non-function.  */
       DECL_BUILT_IN_NONANSI (temp) = 1;
       temp = builtin_function ("_exit", void_ftype_int,
-			       NOT_BUILT_IN, NULL_PTR);
+			       0, NOT_BUILT_IN, NULL_PTR);
       TREE_THIS_VOLATILE (temp) = 1;
       TREE_SIDE_EFFECTS (temp) = 1;
       /* Suppress error if redefined as a non-function.  */
       DECL_BUILT_IN_NONANSI (temp) = 1;
     }
 
-  builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
+  builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS,
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_classify_type", default_function_type,
-		    BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
+		    BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_next_arg", ptr_ftype, BUILT_IN_NEXT_ARG,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_args_info", int_ftype_int, BUILT_IN_ARGS_INFO,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_setjmp",
 		    build_function_type (integer_type_node,
 					 tree_cons (NULL_TREE, ptr_type_node,
 						    endlink)),
-		    BUILT_IN_SETJMP, NULL_PTR);
+		    BUILT_IN_SETJMP, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_longjmp",
 		    build_function_type (void_type_node,
 					 tree_cons (NULL_TREE, ptr_type_node,
 						    tree_cons (NULL_TREE,
 							       integer_type_node,
 							       endlink))),
-		    BUILT_IN_LONGJMP, NULL_PTR);
-  builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP, NULL_PTR);
+		    BUILT_IN_LONGJMP, BUILT_IN_NORMAL, NULL_PTR);
+  builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP,
+		    BUILT_IN_NORMAL, NULL_PTR);
 
   /* Untyped call and return.  */
   builtin_function ("__builtin_apply_args", ptr_ftype,
-		    BUILT_IN_APPLY_ARGS, NULL_PTR);
+		    BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, NULL_PTR);
 
   temp = tree_cons (NULL_TREE,
 		    build_pointer_type (build_function_type (void_type_node,
@@ -3656,9 +3660,9 @@ c_common_nodes_and_builtins (cplus_mode,
 					  endlink)));
   builtin_function ("__builtin_apply",
 		    build_function_type (ptr_type_node, temp),
-		    BUILT_IN_APPLY, NULL_PTR);
+		    BUILT_IN_APPLY, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_return", void_ftype_ptr,
-		    BUILT_IN_RETURN, NULL_PTR);
+		    BUILT_IN_RETURN, BUILT_IN_NORMAL, NULL_PTR);
 
   /* Support for varargs.h and stdarg.h.  */
   builtin_function ("__builtin_varargs_start",
@@ -3666,21 +3670,21 @@ c_common_nodes_and_builtins (cplus_mode,
 					 tree_cons (NULL_TREE,
 						    va_list_ptr_type_node,
 						    endlink)),
-		    BUILT_IN_VARARGS_START, NULL_PTR);
+		    BUILT_IN_VARARGS_START, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_stdarg_start",
 		    build_function_type (void_type_node,
 					 tree_cons (NULL_TREE,
 						    va_list_ptr_type_node,
 						    NULL_TREE)),
-		    BUILT_IN_STDARG_START, NULL_PTR);
+		    BUILT_IN_STDARG_START, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_va_end",
 		    build_function_type (void_type_node,
 					 tree_cons (NULL_TREE,
 						    va_list_arg_type_node,
 						    endlink)),
-		    BUILT_IN_VA_END, NULL_PTR);
+		    BUILT_IN_VA_END, BUILT_IN_NORMAL, NULL_PTR);
 
   builtin_function ("__builtin_va_copy",
 		    build_function_type (void_type_node,
@@ -3689,72 +3693,87 @@ c_common_nodes_and_builtins (cplus_mode,
 						    tree_cons (NULL_TREE,
 						      va_list_arg_type_node,
 						      endlink))),
-		    BUILT_IN_VA_COPY, NULL_PTR);
+		    BUILT_IN_VA_COPY, BUILT_IN_NORMAL, NULL_PTR);
 
   /* Currently under experimentation.  */
   builtin_function ("__builtin_memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
-		    "memcpy");
+		    BUILT_IN_NORMAL, "memcpy");
   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
-		    BUILT_IN_MEMCMP, "memcmp");
+		    BUILT_IN_MEMCMP, BUILT_IN_NORMAL, "memcmp");
   builtin_function ("__builtin_memset", memset_ftype, BUILT_IN_MEMSET,
-		    "memset");
+		    BUILT_IN_NORMAL, "memset");
   builtin_function ("__builtin_strcmp", int_ftype_string_string,
-		    BUILT_IN_STRCMP, "strcmp");
+		    BUILT_IN_STRCMP, BUILT_IN_NORMAL, "strcmp");
   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
-		    BUILT_IN_STRCPY, "strcpy");
+		    BUILT_IN_STRCPY, BUILT_IN_NORMAL, "strcpy");
   builtin_function ("__builtin_strlen", strlen_ftype,
-		    BUILT_IN_STRLEN, "strlen");
+		    BUILT_IN_STRLEN, BUILT_IN_NORMAL, "strlen");
   builtin_function ("__builtin_sqrtf", float_ftype_float, 
-		    BUILT_IN_FSQRT, "sqrtf");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf");
   builtin_function ("__builtin_fsqrt", double_ftype_double,
-		    BUILT_IN_FSQRT, "sqrt");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt");
   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
-		    BUILT_IN_FSQRT, "sqrtl");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl");
   builtin_function ("__builtin_sinf", float_ftype_float, 
-		    BUILT_IN_SIN, "sinf");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf");
   builtin_function ("__builtin_sin", double_ftype_double, 
-		    BUILT_IN_SIN, "sin");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
-		    BUILT_IN_SIN, "sinl");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl");
   builtin_function ("__builtin_cosf", float_ftype_float, 
-		    BUILT_IN_COS, "cosf");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cosf");
   builtin_function ("__builtin_cos", double_ftype_double, 
-		    BUILT_IN_COS, "cos");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
-		    BUILT_IN_COS, "cosl");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cosl");
 
   if (! no_builtins)
     {
-      builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
-      builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
-      builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
+      builtin_function ("abs", int_ftype_int, BUILT_IN_ABS,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS,
+			BUILT_IN_NORMAL, NULL_PTR);
       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
-			NULL_PTR);
-      builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
-      builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("labs", long_ftype_long, BUILT_IN_LABS,
+			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,
-			NULL_PTR);
-      builtin_function ("memset", memset_ftype, BUILT_IN_MEMSET, NULL_PTR);
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("memset", memset_ftype, BUILT_IN_MEMSET,
+			BUILT_IN_NORMAL, NULL_PTR);
       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
-			NULL_PTR);
+			BUILT_IN_NORMAL, NULL_PTR);
       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
-			NULL_PTR);
-      builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
-      builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
-      builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT,
+			BUILT_IN_NORMAL, NULL_PTR);
       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
-			NULL_PTR);
-      builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
-      builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
-      builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
-      builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
-      builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
-      builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("sin", double_ftype_double, BUILT_IN_SIN,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("cosf", float_ftype_float, BUILT_IN_COS,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("cos", double_ftype_double, BUILT_IN_COS,
+			BUILT_IN_NORMAL, NULL_PTR);
+      builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS,
+			BUILT_IN_NORMAL, NULL_PTR);
 
       /* Declare these functions volatile
 	 to avoid spurious "control drops through" warnings.  */
       temp = builtin_function ("abort", cplus_mode ? void_ftype : void_ftype_any,
-			       NOT_BUILT_IN, NULL_PTR);
+			       0, NOT_BUILT_IN, NULL_PTR);
       TREE_THIS_VOLATILE (temp) = 1;
       TREE_SIDE_EFFECTS (temp) = 1;
 
@@ -3765,7 +3784,7 @@ c_common_nodes_and_builtins (cplus_mode,
 #endif
       temp = builtin_function ("exit",
 			       cplus_mode ? void_ftype_int : void_ftype_any,
-			       NOT_BUILT_IN, NULL_PTR);
+			       0, NOT_BUILT_IN, NULL_PTR);
       TREE_THIS_VOLATILE (temp) = 1;
       TREE_SIDE_EFFECTS (temp) = 1;
 
@@ -3779,20 +3798,22 @@ c_common_nodes_and_builtins (cplus_mode,
 #if 0
   /* Support for these has not been written in either expand_builtin
      or build_function_call.  */
-  builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
-  builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
+  builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV,
+		    BUILT_IN_NORMAL, NULL_PTR);
+  builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV,
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_fmod", double_ftype_double_double,
-		    BUILT_IN_FMOD, NULL_PTR);
+		    BUILT_IN_FMOD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_frem", double_ftype_double_double,
-		    BUILT_IN_FREM, NULL_PTR);
+		    BUILT_IN_FREM, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
-		    NULL_PTR);
+		    BUILT_IN_NORMAL, NULL_PTR);
 #endif
 
   /* ??? Perhaps there's a better place to do this.  But it is related
Index: c-common.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/c-common.h,v
retrieving revision 1.6
diff -u -p -r1.6 c-common.h
--- c-common.h	1999/09/10 10:35:48	1.6
+++ c-common.h	1999/09/24 09:54:08
@@ -113,10 +113,6 @@ extern tree truthvalue_conversion		PROTO
 extern tree type_for_mode			PROTO((enum machine_mode, int));
 extern tree type_for_size			PROTO((unsigned, int));
 
-/* Declare a predefined function.  Return the declaration.  This function is
-   provided by each language frontend.  */
-extern tree builtin_function			PROTO((const char *, tree, enum built_in_function, const char *));
-
 /* Build tree nodes and builtin functions common to both C and C++ language
    frontends.  */
 extern void c_common_nodes_and_builtins		PROTO((int, int, int));
Index: c-decl.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/c-decl.c,v
retrieving revision 1.78
diff -u -p -r1.78 c-decl.c
--- c-decl.c	1999/09/23 21:03:52	1.78
+++ c-decl.c	1999/09/24 09:54:10
@@ -1939,14 +1939,14 @@ duplicate_decls (newdecl, olddecl, diffe
 	      if (! different_binding_level)
 		{
 		  TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
-		  DECL_BUILT_IN (olddecl) = 0;
+		  DECL_BUILT_IN_CLASS (olddecl) = NOT_BUILT_IN;
 		}
 	    }
 	  else
 	    {
 	      /* If redeclaring a builtin function, and not a definition,
 		 it stays built in.  */
-	      DECL_BUILT_IN (newdecl) = 1;
+	      DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
 	      DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
 	    }
 	}
@@ -2333,7 +2333,7 @@ pushdecl (x)
 		  /* Inner extern decl is built-in if global one is.  */
 		  if (DECL_BUILT_IN (oldglobal))
 		    {
-		      DECL_BUILT_IN (x) = DECL_BUILT_IN (oldglobal);
+		      DECL_BUILT_IN_CLASS (x) = DECL_BUILT_IN_CLASS (oldglobal);
 		      DECL_FUNCTION_CODE (x) = DECL_FUNCTION_CODE (oldglobal);
 		    }
 		  /* Keep the arg types from a file-scope fcn defn.  */
@@ -3044,23 +3044,24 @@ init_decl_processing ()
 
   builtin_function ("__builtin_aggregate_incoming_address",
 		    build_function_type (ptr_type_node, NULL_TREE),
-		    BUILT_IN_AGGREGATE_INCOMING_ADDRESS, NULL_PTR);
+		    BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
+		    BUILT_IN_NORMAL, NULL_PTR);
 
   /* Hooks for the DWARF 2 __throw routine.  */
   builtin_function ("__builtin_unwind_init",
 		    build_function_type (void_type_node, endlink),
-		    BUILT_IN_UNWIND_INIT, NULL_PTR);
+		    BUILT_IN_UNWIND_INIT, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_dwarf_cfa", ptr_ftype_void,
-		    BUILT_IN_DWARF_CFA, NULL_PTR);
+		    BUILT_IN_DWARF_CFA, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_dwarf_fp_regnum",
 		    build_function_type (unsigned_type_node, endlink),
-		    BUILT_IN_DWARF_FP_REGNUM, NULL_PTR);
+		    BUILT_IN_DWARF_FP_REGNUM, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_dwarf_reg_size", int_ftype_int,
-		    BUILT_IN_DWARF_REG_SIZE, NULL_PTR);		    
+		    BUILT_IN_DWARF_REG_SIZE, BUILT_IN_NORMAL, NULL_PTR);		    
   builtin_function ("__builtin_frob_return_addr", ptr_ftype_ptr,
-		    BUILT_IN_FROB_RETURN_ADDR, NULL_PTR);
+		    BUILT_IN_FROB_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ("__builtin_extract_return_addr", ptr_ftype_ptr,
-		    BUILT_IN_EXTRACT_RETURN_ADDR, NULL_PTR);
+		    BUILT_IN_EXTRACT_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function
     ("__builtin_eh_return",
      build_function_type (void_type_node,
@@ -3070,7 +3071,7 @@ init_decl_processing ()
 					        tree_cons (NULL_TREE,
 							   ptr_type_node,
 							   endlink)))),
-     BUILT_IN_EH_RETURN, NULL_PTR);
+     BUILT_IN_EH_RETURN, BUILT_IN_NORMAL, NULL_PTR);
 
   pedantic_lvalues = pedantic;
 
@@ -3111,10 +3112,11 @@ init_decl_processing ()
    the name to be called if we can't opencode the function.  */
 
 tree
-builtin_function (name, type, function_code, library_name)
+builtin_function (name, type, function_code, class, library_name)
      const char *name;
      tree type;
-     enum built_in_function function_code;
+     int function_code;
+     enum built_in_class class;
      const char *library_name;
 {
   tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
@@ -3129,11 +3131,9 @@ builtin_function (name, type, function_c
     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
   make_decl_rtl (decl, NULL_PTR, 1);
   pushdecl (decl);
-  if (function_code != NOT_BUILT_IN)
-    {
-      DECL_BUILT_IN (decl) = 1;
-      DECL_FUNCTION_CODE (decl) = function_code;
-    }
+  DECL_BUILT_IN_CLASS (decl) = class;
+  DECL_FUNCTION_CODE (decl) = function_code;
+
   /* Warn if a function in the namespace for users
      is used without an occasion to consider it declared.  */
   if (name[0] != '_' || name[1] != '_')
@@ -3567,7 +3567,7 @@ finish_decl (decl, init, asmspec_tree)
      name.  */
   if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
       {
-	DECL_BUILT_IN (decl) = 0;
+	DECL_BUILT_IN_CLASS (decl) = NOT_BUILT_IN;
 	DECL_RTL (decl) = 0;
 	DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
       }
Index: tree.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/tree.h,v
retrieving revision 1.92
diff -u -p -r1.92 tree.h
--- tree.h	1999/09/17 22:13:07	1.92
+++ tree.h	1999/09/24 09:54:11
@@ -65,12 +65,20 @@ extern int tree_code_length[MAX_TREE_COD
 
 extern const char *tree_code_name[MAX_TREE_CODES];
 
+/* Classify which part of the compiler has defined a given builtin
+   function.  */
+enum built_in_class
+{
+  NOT_BUILT_IN = 0,
+  BUILT_IN_FRONTEND,
+  BUILT_IN_MD,
+  BUILT_IN_NORMAL
+};
 /* Codes that identify the various built in functions
    so that expand_call can identify them quickly.  */
 
 enum built_in_function
 {
-  NOT_BUILT_IN,
   BUILT_IN_ALLOCA,
   BUILT_IN_ABS,
   BUILT_IN_FABS,
@@ -1126,8 +1134,8 @@ struct tree_type
 #define DECL_FRAME_SIZE(NODE) (DECL_CHECK (NODE)->decl.frame_size.i)
 /* For FUNCTION_DECL, if it is built-in,
    this identifies which built-in operation it is.  */
-#define DECL_FUNCTION_CODE(NODE) (DECL_CHECK (NODE)->decl.frame_size.f)
-#define DECL_SET_FUNCTION_CODE(NODE,VAL) (DECL_CHECK (NODE)->decl.frame_size.f = (VAL))
+#define DECL_FUNCTION_CODE(NODE) (DECL_CHECK (NODE)->decl.frame_size.f.code)
+#define DECL_SET_FUNCTION_CODE(NODE,VAL) (DECL_CHECK (NODE)->decl.frame_size.f.code = (VAL))
 /* For a FIELD_DECL, holds the size of the member as an integer.  */
 #define DECL_FIELD_SIZE(NODE) (DECL_CHECK (NODE)->decl.saved_insns.i)
 
@@ -1241,8 +1249,12 @@ struct tree_type
 /* In a LABEL_DECL, nonzero means label was defined inside a binding
    contour that restored a stack level and which is now exited.  */
 #define DECL_TOO_LATE(NODE) (DECL_CHECK (NODE)->decl.bit_field_flag)
+
 /* In a FUNCTION_DECL, nonzero means a built in function.  */
-#define DECL_BUILT_IN(NODE) (DECL_CHECK (NODE)->decl.bit_field_flag)
+#define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
+/* For a builtin function, identify which part of the compiler defined it.  */
+#define DECL_BUILT_IN_CLASS(NODE) (DECL_CHECK (NODE)->decl.frame_size.f.class)
+
 /* In a VAR_DECL that's static,
    nonzero if the space is in the text section.  */
 #define DECL_IN_TEXT_SECTION(NODE) (DECL_CHECK (NODE)->decl.bit_field_flag)
@@ -1370,7 +1382,11 @@ struct tree_decl
   union {
     int i;
     unsigned int u;
-    enum built_in_function f;
+    struct
+      {
+	unsigned int code:24;
+	unsigned int class:8;
+      } f;
   } frame_size;
 
   union tree_node *name;
@@ -2008,8 +2024,14 @@ extern void (*incomplete_decl_finalize_h
 
 extern char *init_parse				PROTO((char *));
 extern void finish_parse			PROTO((void));
+
+extern const char * const language_string;
 
-extern const char * const language_string;  
+/* Declare a predefined function.  Return the declaration.  This function is
+   provided by each language frontend.  */
+extern tree builtin_function			PROTO((const char *, tree, int,
+						       enum built_in_class,
+						       const char *));
 
 /* In tree.c */
 extern char *perm_calloc			PROTO((int, long));
Index: ch/ch-tree.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/ch-tree.h,v
retrieving revision 1.12
diff -u -p -r1.12 ch-tree.h
--- ch/ch-tree.h	1999/09/10 10:35:49	1.12
+++ ch/ch-tree.h	1999/09/24 09:54:16
@@ -664,7 +664,6 @@ extern void nonvalue_begin_loop_scope   
 extern void nonvalue_end_loop_scope             PROTO((void));
 
 extern tree build_enumerator                    PROTO((tree, tree));
-extern tree builtin_function                    PROTO((const char *, tree, enum built_in_function function_, const char *));
 extern tree c_build_type_variant                PROTO((tree, int, int));
 extern int  c_decode_option                     PROTO((int, char **));
 extern void c_mark_varargs                      PROTO((void));
Index: ch/decl.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/decl.c,v
retrieving revision 1.13
diff -u -p -r1.13 decl.c
--- ch/decl.c	1999/09/10 10:35:49	1.13
+++ ch/decl.c	1999/09/24 09:54:17
@@ -3898,48 +3898,48 @@ init_decl_processing ()
 /* These are compiler-internal function calls, not intended
    to be directly called by user code */
   builtin_function ("__allocate", ptr_ftype_luns_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("_allocate_global_memory", void_ftype_refptr_int_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("_allocate_memory", void_ftype_refptr_int_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__andpowerset", bool_ftype_ptr_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__bitsetpowerset", void_ftype_ptr_int_int_int_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__cardpowerset", long_ftype_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__cause_ex1", void_ftype_cptr_cptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__concatstring", ptr_ftype_ptr_ptr_int_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__continue", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__diffpowerset", void_ftype_ptr_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__eqpowerset", bool_ftype_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__ffsetclrpowerset", find_bit_ftype,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__flsetclrpowerset", find_bit_ftype,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__flsetpowerset", int_ftype_ptr_luns_long_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__ffsetpowerset", int_ftype_ptr_luns_long_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__inbitstring", bool_ftype_luns_ptr_luns_long_ptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__inpowerset", bool_ftype_luns_ptr_luns_long, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__lepowerset", bool_ftype_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__ltpowerset", bool_ftype_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   /* Currently under experimentation.  */
   builtin_function ("memmove", memcpy_ftype,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("memcmp", memcmp_ftype,
-                    NOT_BUILT_IN, NULL_PTR);
+                    0, NOT_BUILT_IN, NULL_PTR);
 
   /* this comes from c-decl.c (init_decl_processing) */
   builtin_function ("__builtin_alloca",
@@ -3947,40 +3947,40 @@ init_decl_processing ()
 					 tree_cons (NULL_TREE,
 						    sizetype,
 						    endlink)),
-		    BUILT_IN_ALLOCA, "alloca");
+		    BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca");
 
   builtin_function ("memset", ptr_ftype_ptr_int_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__notpowerset", bool_ftype_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__orpowerset", bool_ftype_ptr_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__psslice", void_ftype_ptr_int_ptr_int_int_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__pscpy", void_ftype_ptr_luns_luns_cptr_luns_luns_luns,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("_return_memory", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__setbitpowerset", void_ftype_ptr_luns_long_long_bool_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__terminate", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__unhandled_ex", void_ftype_cptr_cptr_int, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__xorpowerset", bool_ftype_ptr_ptr_ptr_luns, 
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
 
   /* declare floating point functions */
-  builtin_function ("__sin", double_ftype_double, NOT_BUILT_IN, "sin");
-  builtin_function ("__cos", double_ftype_double, NOT_BUILT_IN, "cos");
-  builtin_function ("__tan", double_ftype_double, NOT_BUILT_IN, "tan");
-  builtin_function ("__asin", double_ftype_double, NOT_BUILT_IN, "asin");
-  builtin_function ("__acos", double_ftype_double, NOT_BUILT_IN, "acos");
-  builtin_function ("__atan", double_ftype_double, NOT_BUILT_IN, "atan");
-  builtin_function ("__exp", double_ftype_double, NOT_BUILT_IN, "exp");
-  builtin_function ("__log", double_ftype_double, NOT_BUILT_IN, "log");
-  builtin_function ("__log10", double_ftype_double, NOT_BUILT_IN, "log10");
-  builtin_function ("__sqrt", double_ftype_double, NOT_BUILT_IN, "sqrt");
+  builtin_function ("__sin", double_ftype_double, 0, NOT_BUILT_IN, "sin");
+  builtin_function ("__cos", double_ftype_double, 0, NOT_BUILT_IN, "cos");
+  builtin_function ("__tan", double_ftype_double, 0, NOT_BUILT_IN, "tan");
+  builtin_function ("__asin", double_ftype_double, 0, NOT_BUILT_IN, "asin");
+  builtin_function ("__acos", double_ftype_double, 0, NOT_BUILT_IN, "acos");
+  builtin_function ("__atan", double_ftype_double, 0, NOT_BUILT_IN, "atan");
+  builtin_function ("__exp", double_ftype_double, 0, NOT_BUILT_IN, "exp");
+  builtin_function ("__log", double_ftype_double, 0, NOT_BUILT_IN, "log");
+  builtin_function ("__log10", double_ftype_double, 0, NOT_BUILT_IN, "log10");
+  builtin_function ("__sqrt", double_ftype_double, 0, NOT_BUILT_IN, "sqrt");
 
   tasking_init ();
   timing_init ();
@@ -3991,114 +3991,114 @@ init_decl_processing ()
      the same names.  Note the lack of a leading underscore. */
   builtin_function ((ignore_case || ! special_UC) ?  "abs" : "ABS",
 		    chill_predefined_function_type,
-		    BUILT_IN_CH_ABS, NULL_PTR);
+		    BUILT_IN_CH_ABS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "abstime" : "ABSTIME",
 		    chill_predefined_function_type,
-		    BUILT_IN_ABSTIME, NULL_PTR);
+		    BUILT_IN_ABSTIME, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "allocate" : "ALLOCATE",
 		    chill_predefined_function_type,
-		    BUILT_IN_ALLOCATE, NULL_PTR);
+		    BUILT_IN_ALLOCATE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "allocate_memory" : "ALLOCATE_MEMORY",
 		    chill_predefined_function_type,
-		    BUILT_IN_ALLOCATE_MEMORY, NULL_PTR);
+		    BUILT_IN_ALLOCATE_MEMORY, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "addr" : "ADDR",
 		    chill_predefined_function_type,
-		    BUILT_IN_ADDR, NULL_PTR);
+		    BUILT_IN_ADDR, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "allocate_global_memory" : "ALLOCATE_GLOBAL_MEMORY",
 		    chill_predefined_function_type,
-		    BUILT_IN_ALLOCATE_GLOBAL_MEMORY, NULL_PTR);
+		    BUILT_IN_ALLOCATE_GLOBAL_MEMORY, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "arccos" : "ARCCOS",
 		    chill_predefined_function_type,
-		    BUILT_IN_ARCCOS, NULL_PTR);
+		    BUILT_IN_ARCCOS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "arcsin" : "ARCSIN",
 		    chill_predefined_function_type,
-		    BUILT_IN_ARCSIN, NULL_PTR);
+		    BUILT_IN_ARCSIN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "arctan" : "ARCTAN",
 		    chill_predefined_function_type,
-		    BUILT_IN_ARCTAN, NULL_PTR);
+		    BUILT_IN_ARCTAN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "card" : "CARD",
 		    chill_predefined_function_type,
-		    BUILT_IN_CARD, NULL_PTR);
+		    BUILT_IN_CARD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "cos" : "COS",
 		    chill_predefined_function_type,
-		    BUILT_IN_CH_COS, NULL_PTR);
+		    BUILT_IN_CH_COS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "days" : "DAYS",
 		    chill_predefined_function_type,
-		    BUILT_IN_DAYS, NULL_PTR);
+		    BUILT_IN_DAYS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "descr" : "DESCR",
 		    chill_predefined_function_type,
-		    BUILT_IN_DESCR, NULL_PTR);
+		    BUILT_IN_DESCR, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "getstack" : "GETSTACK",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETSTACK, NULL_PTR);
+		    BUILT_IN_GETSTACK, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "exp" : "EXP",
 		    chill_predefined_function_type,
-		    BUILT_IN_EXP, NULL_PTR);
+		    BUILT_IN_EXP, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "hours" : "HOURS",
 		    chill_predefined_function_type,
-		    BUILT_IN_HOURS, NULL_PTR);
+		    BUILT_IN_HOURS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "inttime" : "INTTIME",
 		    chill_predefined_function_type,
-		    BUILT_IN_INTTIME, NULL_PTR);
+		    BUILT_IN_INTTIME, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "length" : "LENGTH",
 		    chill_predefined_function_type,
-		    BUILT_IN_LENGTH, NULL_PTR);
+		    BUILT_IN_LENGTH, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "log" : "LOG",
 		    chill_predefined_function_type,
-		    BUILT_IN_LOG, NULL_PTR);
+		    BUILT_IN_LOG, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "lower" : "LOWER",
 		    chill_predefined_function_type,
-		    BUILT_IN_LOWER, NULL_PTR);
+		    BUILT_IN_LOWER, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "ln" : "LN",
 		    chill_predefined_function_type,
-		    BUILT_IN_LN, NULL_PTR);
+		    BUILT_IN_LN, BUILT_IN_NORMAL, NULL_PTR);
   /* Note: these are *not* the C integer MAX and MIN.  They're
      for powerset arguments. */
   builtin_function ((ignore_case || ! special_UC) ?  "max" : "MAX",
 		    chill_predefined_function_type,
-		    BUILT_IN_MAX, NULL_PTR);
+		    BUILT_IN_MAX, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "millisecs" : "MILLISECS",
 		    chill_predefined_function_type,
-		    BUILT_IN_MILLISECS, NULL_PTR);
+		    BUILT_IN_MILLISECS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "min" : "MIN",
 		    chill_predefined_function_type,
-		    BUILT_IN_MIN, NULL_PTR);
+		    BUILT_IN_MIN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "minutes" : "MINUTES",
 		    chill_predefined_function_type,
-		    BUILT_IN_MINUTES, NULL_PTR);
+		    BUILT_IN_MINUTES, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "num" : "NUM",
 		    chill_predefined_function_type,
-		    BUILT_IN_NUM, NULL_PTR);
+		    BUILT_IN_NUM, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "pred" : "PRED",
 		    chill_predefined_function_type,
-		    BUILT_IN_PRED, NULL_PTR);
+		    BUILT_IN_PRED, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "return_memory" : "RETURN_MEMORY",
 		    chill_predefined_function_type,
-		    BUILT_IN_RETURN_MEMORY, NULL_PTR);
+		    BUILT_IN_RETURN_MEMORY, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "secs" : "SECS",
 		    chill_predefined_function_type,
-		    BUILT_IN_SECS, NULL_PTR);
+		    BUILT_IN_SECS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "sin" : "SIN",
 		    chill_predefined_function_type,
-		    BUILT_IN_CH_SIN, NULL_PTR);
+		    BUILT_IN_CH_SIN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "size" : "SIZE",
 		    chill_predefined_function_type,
-		    BUILT_IN_SIZE, NULL_PTR);
+		    BUILT_IN_SIZE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "sqrt" : "SQRT",
 		    chill_predefined_function_type,
-		    BUILT_IN_SQRT, NULL_PTR);
+		    BUILT_IN_SQRT, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "succ" : "SUCC",
 		    chill_predefined_function_type,
-		    BUILT_IN_SUCC, NULL_PTR);
+		    BUILT_IN_SUCC, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "tan" : "TAN",
 		    chill_predefined_function_type,
-		    BUILT_IN_TAN, NULL_PTR);
+		    BUILT_IN_TAN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "terminate" : "TERMINATE",
 		    chill_predefined_function_type,
-		    BUILT_IN_TERMINATE, NULL_PTR);
+		    BUILT_IN_TERMINATE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ?  "upper" : "UPPER",
 		    chill_predefined_function_type,
-		    BUILT_IN_UPPER, NULL_PTR);
+		    BUILT_IN_UPPER, BUILT_IN_NORMAL, NULL_PTR);
 
   build_chill_descr_type ();
   build_chill_inttime_type ();
@@ -4119,10 +4119,11 @@ init_decl_processing ()
    the name to be called if we can't opencode the function.  */
 
 tree
-builtin_function (name, type, function_code, library_name)
+builtin_function (name, type, function_code, class, library_name)
      const char *name;
      tree type;
-     enum built_in_function function_code;
+     int function_code;
+     enum built_in_class class;
      const char *library_name;
 {
   tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
@@ -4137,11 +4138,8 @@ builtin_function (name, type, function_c
     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
   make_decl_rtl (decl, NULL_PTR, 1);
   pushdecl (decl);
-  if (function_code != NOT_BUILT_IN)
-    {
-      DECL_BUILT_IN (decl) = 1;
-      DECL_SET_FUNCTION_CODE (decl, function_code);
-    }
+  DECL_BUILT_IN_CLASS (decl) = class;
+  DECL_FUNCTION_CODE (decl) = function_code;
 
   return decl;
 }
Index: ch/except.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/except.c,v
retrieving revision 1.8
diff -u -p -r1.8 except.c
--- ch/except.c	1999/08/29 13:34:10	1.8
+++ ch/except.c	1999/09/24 09:54:18
@@ -550,7 +550,7 @@ initialize_exceptions ()
   setjmp_fndecl = builtin_function ("setjmp",
 				    build_function_type (integer_type_node,
 							 parmtypes),
-				    NOT_BUILT_IN,
+				    0, NOT_BUILT_IN,
 				    SETJMP_LIBRARY_NAME);
   BISJ = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (setjmp_fndecl)),
 		 setjmp_fndecl);
@@ -601,9 +601,9 @@ initialize_exceptions ()
 					       handler_link_pointer_type,
 					       void_list_node));
   link_handler_decl = builtin_function ("__ch_link_handler", link_ftype,
-					NOT_BUILT_IN, NULL_PTR);
+					0, NOT_BUILT_IN, NULL_PTR);
   unlink_handler_decl = builtin_function ("__ch_unlink_handler", link_ftype,
-					  NOT_BUILT_IN, NULL_PTR);
+					  0, NOT_BUILT_IN, NULL_PTR);
 
   exceptions_initialized = 1;
 }
Index: ch/inout.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/inout.c,v
retrieving revision 1.9
diff -u -p -r1.9 inout.c
--- ch/inout.c	1999/08/29 13:34:10	1.9
+++ ch/inout.c	1999/09/24 09:54:18
@@ -1111,88 +1111,88 @@ inout_init ()
 
   builtin_function ((ignore_case || ! special_UC) ? "associate" : "ASSOCIATE",
 		    chill_predefined_function_type,
-		    BUILT_IN_ASSOCIATE, NULL_PTR);
+		    BUILT_IN_ASSOCIATE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "connect" : "CONNECT",
 		    chill_predefined_function_type,
-		    BUILT_IN_CONNECT, NULL_PTR);
+		    BUILT_IN_CONNECT, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "create" : "CREATE",
 		    chill_predefined_function_type,
-		    BUILT_IN_CREATE, NULL_PTR);
+		    BUILT_IN_CREATE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "delete" : "DELETE",
 		    chill_predefined_function_type,
-		    BUILT_IN_CH_DELETE, NULL_PTR);
+		    BUILT_IN_CH_DELETE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "disconnect" : "DISCONNECT",
 		    chill_predefined_function_type,
-		    BUILT_IN_DISCONNECT, NULL_PTR);
+		    BUILT_IN_DISCONNECT, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "dissociate" : "DISSOCIATE",
 		    chill_predefined_function_type,
-		    BUILT_IN_DISSOCIATE, NULL_PTR);
+		    BUILT_IN_DISSOCIATE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "eoln" : "EOLN",
 		    chill_predefined_function_type,
-		    BUILT_IN_EOLN, NULL_PTR);
+		    BUILT_IN_EOLN, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "existing" : "EXISTING",
 		    chill_predefined_function_type,
-		    BUILT_IN_EXISTING, NULL_PTR);
+		    BUILT_IN_EXISTING, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "getassociation" : "GETASSOCIATION",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETASSOCIATION, NULL_PTR);
+		    BUILT_IN_GETASSOCIATION, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gettextaccess" : "GETTEXTASSCESS",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETTEXTACCESS, NULL_PTR);
+		    BUILT_IN_GETTEXTACCESS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gettextindex" : "GETTEXTINDEX",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETTEXTINDEX, NULL_PTR);
+		    BUILT_IN_GETTEXTINDEX, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gettextrecord" : "GETTEXTRECORD",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETTEXTRECORD, NULL_PTR);
+		    BUILT_IN_GETTEXTRECORD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "getusage" : "GETUSAGE",
 		    chill_predefined_function_type,
-		    BUILT_IN_GETUSAGE, NULL_PTR);
+		    BUILT_IN_GETUSAGE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "indexable" : "INDEXABLE",
 		    chill_predefined_function_type,
-		    BUILT_IN_INDEXABLE, NULL_PTR);
+		    BUILT_IN_INDEXABLE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "isassociated" : "ISASSOCIATED",
 		    chill_predefined_function_type,
-		    BUILT_IN_ISASSOCIATED, NULL_PTR);
+		    BUILT_IN_ISASSOCIATED, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "modify" : "MODIFY",
 		    chill_predefined_function_type,
-		    BUILT_IN_MODIFY, NULL_PTR);
+		    BUILT_IN_MODIFY, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "outoffile" : "OUTOFFILE",
 		    chill_predefined_function_type,
-		    BUILT_IN_OUTOFFILE, NULL_PTR);
+		    BUILT_IN_OUTOFFILE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "readable" : "READABLE",
 		    chill_predefined_function_type,
-		    BUILT_IN_READABLE, NULL_PTR);
+		    BUILT_IN_READABLE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "readrecord" : "READRECORD",
 		    chill_predefined_function_type,
-		    BUILT_IN_READRECORD, NULL_PTR);
+		    BUILT_IN_READRECORD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "readtext" : "READTEXT",
 		    chill_predefined_function_type,
-		    BUILT_IN_READTEXT, NULL_PTR);
+		    BUILT_IN_READTEXT, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "sequencible" : "SEQUENCIBLE",
 		    chill_predefined_function_type,
-		    BUILT_IN_SEQUENCIBLE, NULL_PTR);
+		    BUILT_IN_SEQUENCIBLE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "settextaccess" : "SETTEXTACCESS",
 		    chill_predefined_function_type,
-		    BUILT_IN_SETTEXTACCESS, NULL_PTR);
+		    BUILT_IN_SETTEXTACCESS, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "settextindex" : "SETTEXTINDEX",
 		    chill_predefined_function_type,
-		    BUILT_IN_SETTEXTINDEX, NULL_PTR);
+		    BUILT_IN_SETTEXTINDEX, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "settextrecord" : "SETTEXTRECORD",
 		    chill_predefined_function_type,
-		    BUILT_IN_SETTEXTRECORD, NULL_PTR);
+		    BUILT_IN_SETTEXTRECORD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "variable" : "VARIABLE",
 		    chill_predefined_function_type,
-		    BUILT_IN_VARIABLE, NULL_PTR);
+		    BUILT_IN_VARIABLE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "writeable" : "WRITEABLE",
 		    chill_predefined_function_type,
-		    BUILT_IN_WRITEABLE, NULL_PTR);
+		    BUILT_IN_WRITEABLE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "writerecord" : "WRITERECORD",
 		    chill_predefined_function_type,
-		    BUILT_IN_WRITERECORD, NULL_PTR);
+		    BUILT_IN_WRITERECORD, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "writetext" : "WRITETEXT",
 		    chill_predefined_function_type,
-		    BUILT_IN_WRITETEXT, NULL_PTR);
+		    BUILT_IN_WRITETEXT, BUILT_IN_NORMAL, NULL_PTR);
 
   /* build function prototypes */
   bool_ftype_ptr_ptr_int = 
@@ -1300,65 +1300,65 @@ inout_init ()
                       endlink)))))))));
 
   builtin_function ("__associate", ptr_ftype_ptr_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__connect", void_ftype_ptr_ptr_int_int_int_long_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__create", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__delete", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__disconnect", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__dissociate", void_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__eoln", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__existing", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__getassociation", ptr_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__gettextaccess", ptr_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__gettextindex", luns_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__gettextrecord", ptr_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__getusage", int_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__indexable", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__isassociated", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__modify", void_ftype_ptr_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__outoffile", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__readable", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__readrecord", ptr_ftype_ptr_int_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__readtext_f", void_ftype_ptr_int_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__readtext_s", void_ftype_ptr_int_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__sequencible", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__settextaccess", void_ftype_ptr_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__settextindex", void_ftype_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__settextrecord", void_ftype_ptr_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__variable", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__writeable", bool_ftype_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__writerecord", void_ftype_ptr_int_ptr_luns_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__writetext_f", void_ftype_ptr_int_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__writetext_s", void_ftype_ptr_int_ptr_int_ptr_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
 
   /* declare ASSOCIATION, ACCESS, and TEXT modes */
   build_io_types ();
Index: ch/tasking.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/tasking.c,v
retrieving revision 1.10
diff -u -p -r1.10 tasking.c
--- ch/tasking.c	1999/08/29 13:34:10	1.10
+++ ch/tasking.c	1999/09/24 09:54:19
@@ -3310,7 +3310,7 @@ tasking_init ()
 	  build_tree_list (NULL_TREE, void_type_node)));
 
   builtin_function ("__whoami", ins_ftype_void,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
 
   build_tasking_message_type ();
    
@@ -3325,22 +3325,22 @@ tasking_init ()
 
   builtin_function ((ignore_case || ! special_UC) ? "copy_number" : "COPY_NUMBER",
 		    chill_predefined_function_type,
-		    BUILT_IN_COPY_NUMBER, NULL_PTR);
+		    BUILT_IN_COPY_NUMBER, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gen_code" : "GEN_CODE",
 		    chill_predefined_function_type,
-		    BUILT_IN_GEN_CODE, NULL_PTR);
+		    BUILT_IN_GEN_CODE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gen_inst" : "GEN_INST",
 		    chill_predefined_function_type,
-		    BUILT_IN_GEN_INST, NULL_PTR);
+		    BUILT_IN_GEN_INST, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "gen_ptype" : "GEN_PTYPE",
 		    chill_predefined_function_type,
-		    BUILT_IN_GEN_PTYPE, NULL_PTR);
+		    BUILT_IN_GEN_PTYPE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "proc_type" : "PROC_TYPE",
 		    chill_predefined_function_type,
-		    BUILT_IN_PROC_TYPE, NULL_PTR);
+		    BUILT_IN_PROC_TYPE, BUILT_IN_NORMAL, NULL_PTR);
   builtin_function ((ignore_case || ! special_UC) ? "queue_length" : "QUEUE_LENGTH",
 		    chill_predefined_function_type,
-		    BUILT_IN_QUEUE_LENGTH, NULL_PTR);
+		    BUILT_IN_QUEUE_LENGTH, BUILT_IN_NORMAL, NULL_PTR);
 
   int_ftype_ptr_int_ptr_ptr_int_ptr_int_ptr_ptr_int
      = build_function_type (integer_type_node,
@@ -3409,23 +3409,23 @@ tasking_init ()
                    endlink)));
 
   builtin_function ("__delay_event", int_ftype_ptr_int_ptr_int_ptr_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__queue_length", int_ftype_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__register_tasking", void_ftype_ptr,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__send_signal", void_ftype_ptr_ins_int_int_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__send_buffer", int_ftype_ptr_ptr_int_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__start_process", void_ftype_int_int_int_ptr_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
-  builtin_function ("__stop_process", void_ftype_void, NOT_BUILT_IN,
+		    0, NOT_BUILT_IN, NULL_PTR);
+  builtin_function ("__stop_process", void_ftype_void, 0, NOT_BUILT_IN,
 		    NULL_PTR);
   builtin_function ("__wait_buffer", int_ftype_ptr_int_ptr_ptr_int_ptr_int_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__wait_signal_timed", int_ftype_ptr_int_ptr_ptr_int_ptr_int_ptr_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
 
   infinite_buffer_event_length_node = build_int_2 (-1, 0);
   TREE_TYPE (infinite_buffer_event_length_node) = long_integer_type_node;
Index: ch/timing.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/ch/timing.c,v
retrieving revision 1.6
diff -u -p -r1.6 timing.c
--- ch/timing.c	1999/08/25 08:20:06	1.6
+++ ch/timing.c	1999/09/24 09:54:19
@@ -175,21 +175,21 @@ timing_init ()
                 endlink)))));
 
   builtin_function ("_abstime", long_ftype_int_int_int_int_int_int_int_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__check_cycle", void_ftype_ptr_durt_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__convert_duration_rtstime", void_ftype_durt_ptr,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__define_timeout", ptr_ftype_durt_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("_inttime", void_ftype_abstime_ptr,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__remaintime", int_ftype_ptr_durt_ptr,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__rtstime", void_ftype_ptr,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
   builtin_function ("__wait_until", int_ftype_abst_ptr_int,
-		    NOT_BUILT_IN, NULL_PTR);
+		    0, NOT_BUILT_IN, NULL_PTR);
 }
 
 #if 0
Index: cp/decl.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/cp/decl.c,v
retrieving revision 1.467
diff -u -p -r1.467 decl.c
--- cp/decl.c	1999/09/24 08:03:42	1.467
+++ cp/decl.c	1999/09/24 09:54:30
@@ -3539,7 +3539,7 @@ duplicate_decls (newdecl, olddecl)
 	     it stays built in.  */
 	  if (DECL_BUILT_IN (olddecl))
 	    {
-	      DECL_BUILT_IN (newdecl) = 1;
+	      DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
 	      DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
 	      /* If we're keeping the built-in definition, keep the rtl,
 		 regardless of declaration matches.  */
@@ -6467,19 +6467,17 @@ define_function (name, type, pfn, librar
    See tree.h for its possible values.  */
 
 tree
-builtin_function (name, type, code, libname)
+builtin_function (name, type, code, class, libname)
      const char *name;
      tree type;
-     enum built_in_function code;
+     int code;
+     enum built_in_class class;
      const char *libname;
 {
   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
 			       libname);
-  if (code != NOT_BUILT_IN)
-    {
-      DECL_BUILT_IN (decl) = 1;
-      DECL_FUNCTION_CODE (decl) = code;
-    }
+  DECL_BUILT_IN_CLASS (decl) = class;
+  DECL_FUNCTION_CODE (decl) = code;
   return decl;
 }
 
Index: f/com.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/f/com.c,v
retrieving revision 1.67
diff -u -p -r1.67 com.c
--- f/com.c	1999/09/10 10:35:55	1.67
+++ f/com.c	1999/09/24 09:54:34
@@ -466,9 +466,6 @@ static tree ffecom_convert_widen_ (tree 
 #if FFECOM_targetCURRENT == FFECOM_targetGCC
 static tree bison_rule_compstmt_ (void);
 static void bison_rule_pushlevel_ (void);
-static tree builtin_function (const char *name, tree type,
-			      enum built_in_function function_code,
-			      const char *library_name);
 static void delete_block (tree block);
 static int duplicate_decls (tree newdecl, tree olddecl);
 static void finish_decl (tree decl, tree init, bool is_top_level);
@@ -12176,23 +12173,23 @@ ffecom_init_0 ()
     = build_function_type (void_type_node, NULL_TREE);
 
   builtin_function ("__builtin_sqrtf", float_ftype_float,
-		    BUILT_IN_FSQRT, "sqrtf");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf");
   builtin_function ("__builtin_fsqrt", double_ftype_double,
-		    BUILT_IN_FSQRT, "sqrt");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt");
   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
-		    BUILT_IN_FSQRT, "sqrtl");
+		    BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl");
   builtin_function ("__builtin_sinf", float_ftype_float,
-		    BUILT_IN_SIN, "sinf");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf");
   builtin_function ("__builtin_sin", double_ftype_double,
-		    BUILT_IN_SIN, "sin");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
-		    BUILT_IN_SIN, "sinl");
+		    BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl");
   builtin_function ("__builtin_cosf", float_ftype_float,
-		    BUILT_IN_COS, "cosf");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cosf");
   builtin_function ("__builtin_cos", double_ftype_double,
-		    BUILT_IN_COS, "cos");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
-		    BUILT_IN_COS, "cosl");
+		    BUILT_IN_COS, BUILT_IN_NORMAL, "cosl");
 
 #if BUILT_FOR_270
   pedantic_lvalues = FALSE;
@@ -13758,9 +13755,9 @@ bison_rule_compstmt_ ()
    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
    the name to be called if we can't opencode the function.  */
 
-static tree
-builtin_function (const char *name, tree type,
-		  enum built_in_function function_code,
+tree
+builtin_function (const char *name, tree type, int function_code,
+		  enum built_in_class class,
 		  const char *library_name)
 {
   tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
@@ -13770,11 +13767,8 @@ builtin_function (const char *name, tree
     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
   make_decl_rtl (decl, NULL_PTR, 1);
   pushdecl (decl);
-  if (function_code != NOT_BUILT_IN)
-    {
-      DECL_BUILT_IN (decl) = 1;
-      DECL_FUNCTION_CODE (decl) = function_code;
-    }
+  DECL_BUILT_IN_CLASS (decl) = class;
+  DECL_FUNCTION_CODE (decl) = function_code;
 
   return decl;
 }
@@ -14025,7 +14019,7 @@ duplicate_decls (tree newdecl, tree oldd
       && (!types_match || new_is_definition))
     {
       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
-      DECL_BUILT_IN (olddecl) = 0;
+      DECL_BUILT_IN_CLASS (olddecl) = NOT_BUILT_IN;
     }
 
   /* If redeclaring a builtin function, and not a definition,
@@ -14035,7 +14029,7 @@ duplicate_decls (tree newdecl, tree oldd
     {
       if (DECL_BUILT_IN (olddecl))
 	{
-	  DECL_BUILT_IN (newdecl) = 1;
+	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
 	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
 	}
       else
Index: java/decl.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/java/decl.c,v
retrieving revision 1.38
diff -u -p -r1.38 decl.c
--- java/decl.c	1999/09/10 10:36:02	1.38
+++ java/decl.c	1999/09/24 09:54:37
@@ -37,8 +37,6 @@ The Free Software Foundation is independ
 #include "defaults.h"
 
 static tree push_jvm_slot PROTO ((int, tree));
-static tree builtin_function PROTO ((const char *, tree,
-				     enum built_in_function, const char *));
 static tree lookup_name_current_level PROTO ((tree));
 static tree push_promoted_type PROTO ((const char *, tree));
 static struct binding_level *make_binding_level PROTO ((void));
@@ -391,11 +389,12 @@ tree integer_negative_one_node;
    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
    the name to be called if we can't opencode the function.  */
 
-static tree
-builtin_function (name, type, function_code, library_name)
+tree
+builtin_function (name, type, function_code, class, library_name)
      const char *name;
      tree type;
-     enum built_in_function function_code;
+     int function_code;
+     enum built_in_class class;
      const char *library_name;
 {
   tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
@@ -405,11 +404,8 @@ builtin_function (name, type, function_c
     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
   make_decl_rtl (decl, NULL_PTR, 1);
   pushdecl (decl);
-  if (function_code != NOT_BUILT_IN)
-    {
-      DECL_BUILT_IN (decl) = 1;
-      DECL_FUNCTION_CODE (decl) = function_code;
-    }
+  DECL_BUILT_IN_CLASS (decl) = class;
+  DECL_FUNCTION_CODE (decl) = function_code;
   return decl;
 }
 
@@ -702,27 +698,30 @@ init_decl_processing ()
 		 tree_cons (NULL_TREE, int_type_node, endlink));
   alloc_object_node = builtin_function ("_Jv_AllocObject",
 					build_function_type (ptr_type_node, t),
-					NOT_BUILT_IN, NULL_PTR);
+					0, NOT_BUILT_IN, NULL_PTR);
   soft_initclass_node = builtin_function ("_Jv_InitClass",
 					  build_function_type (void_type_node,
 							       t),
-					  NOT_BUILT_IN, NULL_PTR);
+					  0, NOT_BUILT_IN,
+					  NULL_PTR);
   t = tree_cons (NULL_TREE, ptr_type_node, endlink);
   throw_node = builtin_function ("_Jv_Throw",
 				 build_function_type (ptr_type_node, t),
-				 NOT_BUILT_IN, NULL_PTR);
+				 0, NOT_BUILT_IN, NULL_PTR);
   t = build_function_type (int_type_node, endlink);
   soft_monitorenter_node 
-      = builtin_function ("_Jv_MonitorEnter", t, NOT_BUILT_IN, NULL_PTR);
+    = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN,
+			NULL_PTR);
   soft_monitorexit_node 
-      = builtin_function ("_Jv_MonitorExit", t, NOT_BUILT_IN, NULL_PTR);
+    = builtin_function ("_Jv_MonitorExit", t, 0, NOT_BUILT_IN,
+			NULL_PTR);
   
   t = tree_cons (NULL_TREE, int_type_node, 
 		 tree_cons (NULL_TREE, int_type_node, endlink));
   soft_newarray_node
       = builtin_function ("_Jv_NewArray",
 			  build_function_type(ptr_type_node, t),
-			  NOT_BUILT_IN, NULL_PTR );
+			  0, NOT_BUILT_IN, NULL_PTR);
 
   t = tree_cons (NULL_TREE, int_type_node,
 		 tree_cons (NULL_TREE, class_ptr_type,
@@ -730,20 +729,20 @@ init_decl_processing ()
   soft_anewarray_node
       = builtin_function ("_Jv_NewObjectArray",
 			  build_function_type (ptr_type_node, t),
-			  NOT_BUILT_IN, NULL_PTR );
+			  0, NOT_BUILT_IN, NULL_PTR);
 
   t = tree_cons (NULL_TREE, ptr_type_node,
 		 tree_cons (NULL_TREE, int_type_node, endlink));
   soft_multianewarray_node
       = builtin_function ("_Jv_NewMultiArray",
 			  build_function_type (ptr_type_node, t),
-			  NOT_BUILT_IN, NULL_PTR );
+			  0, NOT_BUILT_IN, NULL_PTR);
 
   t = build_function_type (void_type_node, 
 			   tree_cons (NULL_TREE, int_type_node, endlink));
   soft_badarrayindex_node
       = builtin_function ("_Jv_ThrowBadArrayIndex", t, 
-			  NOT_BUILT_IN, NULL_PTR);
+			  0, NOT_BUILT_IN, NULL_PTR);
   TREE_THIS_VOLATILE (soft_badarrayindex_node) = 1;
   TREE_SIDE_EFFECTS (soft_badarrayindex_node) = 1;
 
@@ -752,32 +751,32 @@ init_decl_processing ()
   soft_checkcast_node
     = builtin_function ("_Jv_CheckCast",
 			build_function_type (ptr_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
   t = tree_cons (NULL_TREE, object_ptr_type_node,
 		 tree_cons (NULL_TREE, class_ptr_type, endlink));
   soft_instanceof_node
     = builtin_function ("_Jv_IsInstanceOf",
 			build_function_type (promoted_boolean_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
   t = tree_cons (NULL_TREE, object_ptr_type_node,
 		 tree_cons (NULL_TREE, object_ptr_type_node, endlink));
   soft_checkarraystore_node
     = builtin_function ("_Jv_CheckArrayStore",
 			build_function_type (void_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
   t = tree_cons (NULL_TREE, ptr_type_node,
 		 tree_cons (NULL_TREE, ptr_type_node,
 			    tree_cons (NULL_TREE, ptr_type_node, endlink)));
   soft_lookupinterfacemethod_node 
     = builtin_function ("_Jv_LookupInterfaceMethod",
 			build_function_type (ptr_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
   t = tree_cons (NULL_TREE, double_type_node,
 		 tree_cons (NULL_TREE, double_type_node, endlink));
   soft_fmod_node
     = builtin_function ("__builtin_fmod",
 			build_function_type (double_type_node, t),
-			BUILT_IN_FMOD, "fmod");
+			BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmod");
 
   soft_exceptioninfo_call_node
     = build (CALL_EXPR, 
@@ -785,7 +784,7 @@ init_decl_processing ()
 	     build_address_of 
 	       (builtin_function ("_Jv_exception_info", 
 				  build_function_type (ptr_type_node, endlink),
-				  NOT_BUILT_IN, NULL_PTR)),
+				  0, NOT_BUILT_IN, NULL_PTR)),
 	     NULL_TREE, NULL_TREE);
   TREE_SIDE_EFFECTS (soft_exceptioninfo_call_node) = 1;
 #if 0
@@ -794,28 +793,28 @@ init_decl_processing ()
   soft_fmodf_node
     = builtin_function ("__builtin_fmodf",
 			build_function_type (float_type_node, t),
-			BUILT_IN_FMOD, "fmodf");
+			BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmodf");
 #endif
     
   soft_idiv_node
     = builtin_function ("_Jv_divI",
 			build_function_type (int_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
 
   soft_irem_node
     = builtin_function ("_Jv_remI",
 			build_function_type (int_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
 
   soft_ldiv_node
     = builtin_function ("_Jv_divJ",
 			build_function_type (long_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
 
   soft_lrem_node
     = builtin_function ("_Jv_remJ",
 			build_function_type (long_type_node, t),
-			NOT_BUILT_IN, NULL_PTR);
+			0, NOT_BUILT_IN, NULL_PTR);
 
   init_class_processing ();
 }
Index: objc/objc-act.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/objc/objc-act.c,v
retrieving revision 1.32
diff -u -p -r1.32 objc-act.c
--- objc/objc-act.c	1999/09/15 10:07:22	1.32
+++ objc/objc-act.c	1999/09/24 09:54:39
@@ -1226,7 +1226,7 @@ synth_module_prologue ()
       pushdecl (umsg_decl);
     }
   else
-    umsg_decl = builtin_function (TAG_MSGSEND, temp_type, NOT_BUILT_IN, 0);
+    umsg_decl = builtin_function (TAG_MSGSEND, temp_type, 0, NOT_BUILT_IN, 0);
 
   /* id objc_msgSendSuper (struct objc_super *, SEL, ...); */
 
@@ -1237,7 +1237,7 @@ synth_module_prologue ()
 						 NULL_TREE)));
 
   umsg_super_decl = builtin_function (TAG_MSGSENDSUPER,
-				     temp_type, NOT_BUILT_IN, 0);
+				     temp_type, 0, NOT_BUILT_IN, 0);
 
   /* id objc_getClass (const char *); */
 
@@ -1248,12 +1248,12 @@ synth_module_prologue ()
 					      NULL_TREE)));
 
   objc_get_class_decl
-    = builtin_function (TAG_GETCLASS, temp_type, NOT_BUILT_IN, 0);
+    = builtin_function (TAG_GETCLASS, temp_type, 0, NOT_BUILT_IN, 0);
 
   /* id objc_getMetaClass (const char *); */
 
   objc_get_meta_class_decl
-    = builtin_function (TAG_GETMETACLASS, temp_type, NOT_BUILT_IN, 0);
+    = builtin_function (TAG_GETMETACLASS, temp_type, 0, NOT_BUILT_IN, 0);
 
   /* static SEL _OBJC_SELECTOR_TABLE[]; */
 



More information about the Gcc-patches mailing list