Allow to distinguish between three classes of builtin functions
authorBernd Schmidt <bernds@cygnus.co.uk>
Fri, 24 Sep 1999 10:07:04 +0000 (10:07 +0000)
committerBernd Schmidt <crux@gcc.gnu.org>
Fri, 24 Sep 1999 10:07:04 +0000 (10:07 +0000)
From-SVN: r29653

20 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/c-common.c
gcc/c-common.h
gcc/c-decl.c
gcc/ch/ChangeLog
gcc/ch/ch-tree.h
gcc/ch/decl.c
gcc/ch/except.c
gcc/ch/inout.c
gcc/ch/tasking.c
gcc/ch/timing.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/f/ChangeLog
gcc/f/com.c
gcc/java/ChangeLog
gcc/java/decl.c
gcc/objc/objc-act.c
gcc/tree.h

index ec5798fcc9d30795c119089e65953fed7e34ceea..587c95053395eff210b56b8b3e5449b73799ec7e 100644 (file)
@@ -1,3 +1,26 @@
+Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * 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.
+
 Fri Sep 24 01:45:05 1999  Mark Mitchell  <mark@codesourcery.com>
 
        * optabs.c (init_traps): Fix typo in last change.
index a5a197e017bd76a8441e0e9b6202e2d6505bc070..250177c9c45b1e2487fda986fec317fec7343e84 100644 (file)
@@ -2222,6 +2222,11 @@ expand_builtin (exp, target, subtarget, mode, ignore)
   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 2fa89e6fc3f04e48fb7237a52baca64e012f3c0f..afdea93853a57d3330bad590e67b73a39bca9c08 100644 (file)
@@ -3581,70 +3581,74 @@ c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
                                                            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, no_builtins, no_nonansi_builtins)
                                          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, no_builtins, no_nonansi_builtins)
                                         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, no_builtins, no_nonansi_builtins)
                                                    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, no_builtins, no_nonansi_builtins)
 #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, no_builtins, no_nonansi_builtins)
 #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 d41677008b0cb532bd77e6132ad4751f204bf8ad..86abdbf3d0326b4b9b49b479267b2ca04a58a443 100644 (file)
@@ -113,10 +113,6 @@ extern tree truthvalue_conversion          PROTO((tree));
 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 b2f32c6b9368b5d3984cc62d97539c47dc3f3fe5..289deeb5c20d1eda0bb70e6d4bc82c0189476e26 100644 (file)
@@ -1939,14 +1939,14 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
              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_code, library_name)
     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 2b9345fdbd24a2feebdc17bf73c24f5bc7440792..779e08f51db1919148dea5207ddc03d87d6ec5b0 100644 (file)
@@ -1,3 +1,10 @@
+Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * 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.
+
 1999-09-20  Nick Clifton  <nickc@cygnus.com>
 
        * lang.c (lang_decode_option): Extend comment.
index 7cc378747109eff843b3020b9970e03eb7b2bbfe..40e7b13b1594b063a3650a0a6a08c1b844fd8442 100644 (file)
@@ -664,7 +664,6 @@ extern void nonvalue_begin_loop_scope           PROTO((void));
 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 ec7086f7525e5cefa38c575d8806e7b15d1c89cf..8b651796a16731a0fc2cd8c209068a89c3ad1d4f 100644 (file)
@@ -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_code, library_name)
     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 82ab16d35ab6d61dde1a39b575df223256c6cb27..7870a397b11b6ca948bec4bdb5fb660d46a2dc49 100644 (file)
@@ -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 f4050fff64516abfda361bd5f909626325c02d79..6a8e9bc58c123b5edeecf4d96758f204b6d274e6 100644 (file)
@@ -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 db8c90bf9eb9fef9d4bcbc5887fbc71aaa27cd79..3b03dea0056fcb43503e375084b9a60d5f47187e 100644 (file)
@@ -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 552eddf9f912057201536daca8085a1427115cfa..35bef786b23527eb1816ba4676a290d4b50ae8dc 100644 (file)
@@ -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 8caac2b2a3023887168a486909f71cba159739d2..ee850ce65b233ec6816b4c7a834b4742809e6fe7 100644 (file)
@@ -1,3 +1,11 @@
+Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * 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.
+
 1999-09-24  Mark Mitchell  <mark@codesourcery.com>
 
        * decl.c (pushdecl): Don't make local declarations of extern
index d4d7be622ca7425d264ac138cb92bf0dcd1f218e..b3e676bd6e1ba7f3cc727d1fd5f1ce52b414bcc8 100644 (file)
@@ -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, library_name)
    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;
 }
 \f
index 3297377c05e4c62dfaa393d4f8b034491864cd36..425f6a02cf277bbfe42e20cdb0bcfe4d26b8c985 100644 (file)
@@ -1,3 +1,11 @@
+Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * 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.
+
 Tue Sep 21 09:08:30 1999  Toon Moene  <toon@moene.indiv.nluug.nl>
 
        * g77spec.c (lang_specific_driver): Initialise return value.
index 316288e925761b6a72f2141c3e45a5ef0b38e3dd..189515424eccaaf1b66aff95a12910a97e1f0e5e 100644 (file)
@@ -466,9 +466,6 @@ static tree ffecom_convert_widen_ (tree type, tree expr);
 #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 type,
     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 olddecl)
       && (!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 olddecl)
     {
       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 e1379bf4371434af36a039c9569219b142a787a0..da15f8a028b8a331e01d743fc44a7f330114c40b 100644 (file)
@@ -1,3 +1,9 @@
+Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * 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.
+
 1999-09-23  Tom Tromey  <tromey@cygnus.com>
 
        * jvspec.c (lang_specific_driver): Don't read spec file if
index 443fa9dd19e9ef03795039903480ac703033e1aa..77332df51fd1e3c8b4b66c60d7b68daf542ab1f1 100644 (file)
@@ -37,8 +37,6 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
 #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_code, library_name)
     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 4d8c84020d8e04048fd1d9f2de024949efbc9c53..5cb797b2de738b5a00f2095d8ca8b44036bc013a 100644 (file)
@@ -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[]; */
 
index e479f99a1bbebdb3d1cbbe76c0aa86d6fcbb22a5..e61f829323e09dbd7a3cf13034c2f14fb5dfe96d 100644 (file)
@@ -65,12 +65,20 @@ extern int tree_code_length[MAX_TREE_CODES];
 
 extern const char *tree_code_name[MAX_TREE_CODES];
 \f
+/* 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;
@@ -2009,7 +2025,13 @@ extern void (*incomplete_decl_finalize_hook)     PROTO((tree));
 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 *));
 \f
 /* In tree.c */
 extern char *perm_calloc                       PROTO((int, long));