Quoting Joern Rennecke <amyl...@spamcop.net>:

Does that mean you acknowledge that we shouldn't have CUMULATIVE_ARGS
taking hooks in the global target vector?

FWIW, I think the attached patch would be approximately what it takes to
remove the CUMULATIVE_ARGS taking hooks from the global target vector
and put them into a separate vector only to be seen by a select few files.
Not tested yet, though.


Index: targhooks.c
===================================================================
--- targhooks.c (revision 166860)
+++ targhooks.c (working copy)
@@ -60,6 +60,7 @@ Software Foundation; either version 3, o
 #include "toplev.h"
 #include "function.h"
 #include "target.h"
+#include "target-internal.h"
 #include "tm_p.h"
 #include "target-def.h"
 #include "ggc.h"
@@ -194,7 +195,7 @@ hook_bool_CUMULATIVE_ARGS_false (CUMULAT
 bool
 default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
 {
-  return (targetm.calls.setup_incoming_varargs
+  return (target_internalm.setup_incoming_varargs
          != default_setup_incoming_varargs);
 }
 
Index: c-family/c-opts.c
===================================================================
--- c-family/c-opts.c   (revision 166860)
+++ c-family/c-opts.c   (working copy)
@@ -23,6 +23,7 @@ Software Foundation; either version 3, o
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
+#include "tm.h"
 #include "c-common.h"
 #include "c-pragma.h"
 #include "flags.h"
Index: java/expr.c
===================================================================
--- java/expr.c (revision 166860)
+++ java/expr.c (working copy)
@@ -28,6 +28,7 @@ the Free Software Foundation; either ver
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
+#include "tm.h"
 #include "flags.h"
 #include "java-tree.h"
 #include "javaop.h"
Index: target.def
===================================================================
--- target.def  (revision 166860)
+++ target.def  (working copy)
@@ -1883,45 +1883,12 @@ HOOK_VECTOR (TARGET_CALLS, calls)
  bool, (const_tree type),
  hook_bool_const_tree_false)
 
-/* Return true if a parameter must be passed by reference.  TYPE may
-   be null if this is a libcall.  CA may be null if this query is
-   from __builtin_va_arg.  */
-DEFHOOK
-(pass_by_reference,
- "",
- bool,
- (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
- hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
-
 DEFHOOK
 (expand_builtin_saveregs,
  "",
  rtx, (void),
  default_expand_builtin_saveregs)
 
-/* Returns pretend_argument_size.  */
-DEFHOOK
-(setup_incoming_varargs,
- "",
- void, (CUMULATIVE_ARGS *args_so_far, enum machine_mode mode, tree type,
-       int *pretend_args_size, int second_time),
- default_setup_incoming_varargs)
-
-DEFHOOK
-(strict_argument_naming,
- "",
- bool, (CUMULATIVE_ARGS *ca),
- hook_bool_CUMULATIVE_ARGS_false)
-
-/* Returns true if we should use
-   targetm.calls.setup_incoming_varargs() and/or
-   targetm.calls.strict_argument_naming().  */
-DEFHOOK
-(pretend_outgoing_varargs_named,
- "",
- bool, (CUMULATIVE_ARGS *ca),
- default_pretend_outgoing_varargs_named)
-
 /* Given a complex type T, return true if a parameter of type T
    should be passed as two scalars.  */
 DEFHOOK
@@ -1939,58 +1906,6 @@ HOOK_VECTOR (TARGET_CALLS, calls)
  bool, (enum machine_mode mode, const_tree type),
  must_pass_in_stack_var_size_or_pad)
 
-/* Return true if type TYPE, mode MODE, which is passed by reference,
-   should have the object copy generated by the callee rather than
-   the caller.  It is never called for TYPE requiring constructors.  */
-DEFHOOK
-(callee_copies,
- "",
- bool,
- (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
- hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
-
-/* Return zero for arguments passed entirely on the stack or entirely
-   in registers.  If passed in both, return the number of bytes passed
-   in registers; the balance is therefore passed on the stack.  */
-DEFHOOK
-(arg_partial_bytes,
- "",
- int, (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, bool named),
- hook_int_CUMULATIVE_ARGS_mode_tree_bool_0)
-
-/* Update the state in CA to advance past an argument in the
-   argument list.  The values MODE, TYPE, and NAMED describe that
-   argument.  */
-/* ??? tm.texi still only describes the old macro.  */
-DEFHOOK_UNDOC
-(function_arg_advance,
- "",
- void,
- (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, bool named),
- default_function_arg_advance)
-
-/* Return zero if the argument described by the state of CA should
-   be placed on a stack, or a hard register in which to store the
-   argument.  The values MODE, TYPE, and NAMED describe that
-   argument.  */
-/* ??? tm.texi still only describes the old macro.  */
-DEFHOOK_UNDOC
-(function_arg,
- "",
- rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
-       bool named),
- default_function_arg)
-
-/* Likewise, but for machines with register windows.  Return the
-   location where the argument will appear to the callee.  */
-/* ??? tm.texi still only describes the old macro.  */
-DEFHOOK_UNDOC
-(function_incoming_arg,
- "",
- rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
-       bool named),
- default_function_incoming_arg)
-
 DEFHOOK
 (function_arg_boundary,
  "",
Index: target.h
===================================================================
--- target.h    (revision 166860)
+++ target.h    (working copy)
@@ -49,7 +49,6 @@
 #ifndef GCC_TARGET_H
 #define GCC_TARGET_H
 
-#include "tm.h"
 #include "insn-modes.h"
 
 /* Types used by the record_gcc_switches() target function.  */
Index: expr.c
===================================================================
--- expr.c      (revision 166860)
+++ expr.c      (working copy)
@@ -49,6 +49,7 @@ Software Foundation; either version 3, o
 #include "tree-pass.h"
 #include "tree-flow.h"
 #include "target.h"
+#include "target-internal.h"
 #include "timevar.h"
 #include "df.h"
 #include "diagnostic.h"
@@ -1238,14 +1239,14 @@ block_move_libcall_safe_for_call_parm (v
     for ( ; arg != void_list_node ; arg = TREE_CHAIN (arg))
       {
        enum machine_mode mode = TYPE_MODE (TREE_VALUE (arg));
-       rtx tmp = targetm.calls.function_arg (&args_so_far, mode,
-                                             NULL_TREE, true);
+       rtx tmp = target_internalm.function_arg (&args_so_far, mode,
+                                                NULL_TREE, true);
        if (!tmp || !REG_P (tmp))
          return false;
-       if (targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL, 1))
+       if (target_internalm.arg_partial_bytes (&args_so_far, mode, NULL, 1))
          return false;
-       targetm.calls.function_arg_advance (&args_so_far, mode,
-                                           NULL_TREE, true);
+       target_internalm.function_arg_advance (&args_so_far, mode,
+                                              NULL_TREE, true);
       }
   }
   return true;
Index: dse.c
===================================================================
--- dse.c       (revision 166860)
+++ dse.c       (working copy)
@@ -47,6 +47,7 @@ Software Foundation; either version 3, o
 #include "optabs.h"
 #include "dbgcnt.h"
 #include "target.h"
+#include "target-internal.h"
 
 /* This file contains three techniques for performing Dead Store
    Elimination (dse).
@@ -2322,7 +2323,7 @@ get_call_args (rtx call_insn, tree fn, r
     {
       enum machine_mode mode = TYPE_MODE (TREE_VALUE (arg));
       rtx reg, link, tmp;
-      reg = targetm.calls.function_arg (&args_so_far, mode, NULL_TREE, true);
+      reg = target_internalm.function_arg (&args_so_far, mode, NULL_TREE, 
true);
       if (!reg || !REG_P (reg) || GET_MODE (reg) != mode
          || GET_MODE_CLASS (mode) != MODE_INT)
        return false;
@@ -2356,7 +2357,8 @@ get_call_args (rtx call_insn, tree fn, r
       if (tmp)
        args[idx] = tmp;
 
-      targetm.calls.function_arg_advance (&args_so_far, mode, NULL_TREE, true);
+      target_internalm.function_arg_advance (&args_so_far, mode, NULL_TREE,
+                                            true);
     }
   if (arg != void_list_node || idx != nargs)
     return false;
Index: fortran/trans-types.c
===================================================================
--- fortran/trans-types.c       (revision 166860)
+++ fortran/trans-types.c       (working copy)
@@ -27,6 +27,7 @@ Software Foundation; either version 3, o
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
+#include "tm.h"
 #include "langhooks.h" /* For iso-c-bindings.def.  */
 #include "target.h"
 #include "ggc.h"
Index: function.c
===================================================================
--- function.c  (revision 166860)
+++ function.c  (working copy)
@@ -57,6 +57,7 @@ Software Foundation; either version 3, o
 #include "integrate.h"
 #include "langhooks.h"
 #include "target.h"
+#include "target-internal.h"
 #include "cfglayout.h"
 #include "gimple.h"
 #include "tree-pass.h"
@@ -2106,7 +2107,7 @@ pass_by_reference (CUMULATIVE_ARGS *ca, 
        }
     }
 
-  return targetm.calls.pass_by_reference (ca, mode, type, named_arg);
+  return target_internalm.pass_by_reference (ca, mode, type, named_arg);
 }
 
 /* Return true if TYPE, which is passed by reference, should be callee
@@ -2118,7 +2119,7 @@ reference_callee_copied (CUMULATIVE_ARGS
 {
   if (type && TREE_ADDRESSABLE (type))
     return false;
-  return targetm.calls.callee_copies (ca, mode, type, named_arg);
+  return target_internalm.callee_copies (ca, mode, type, named_arg);
 }
 
 /* Structures to communicate between the subroutines of assign_parms.
@@ -2291,7 +2292,7 @@ assign_parm_find_data_types (struct assi
     data->named_arg = 1;  /* No variadic parms.  */
   else if (DECL_CHAIN (parm))
     data->named_arg = 1;  /* Not the last non-variadic parm. */
-  else if (targetm.calls.strict_argument_naming (&all->args_so_far))
+  else if (target_internalm.strict_argument_naming (&all->args_so_far))
     data->named_arg = 1;  /* Only variadic ones are unnamed.  */
   else
     data->named_arg = 0;  /* Treat as variadic.  */
@@ -2356,7 +2357,7 @@ assign_parms_setup_varargs (struct assig
 {
   int varargs_pretend_bytes = 0;
 
-  targetm.calls.setup_incoming_varargs (&all->args_so_far,
+  target_internalm.setup_incoming_varargs (&all->args_so_far,
                                        data->promoted_mode,
                                        data->passed_type,
                                        &varargs_pretend_bytes, no_rtl);
@@ -2385,10 +2386,11 @@ assign_parm_find_entry_rtl (struct assig
       return;
     }
 
-  entry_parm = targetm.calls.function_incoming_arg (&all->args_so_far,
-                                                   data->promoted_mode,
-                                                   data->passed_type,
-                                                   data->named_arg);
+  entry_parm
+    = target_internalm.function_incoming_arg (&all->args_so_far,
+                                             data->promoted_mode,
+                                             data->passed_type,
+                                             data->named_arg);
 
   if (entry_parm == 0)
     data->promoted_mode = data->passed_mode;
@@ -2409,12 +2411,12 @@ assign_parm_find_entry_rtl (struct assig
 #endif
   if (!in_regs && !data->named_arg)
     {
-      if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
+      if (target_internalm.pretend_outgoing_varargs_named (&all->args_so_far))
        {
-         rtx tem;
-         tem = targetm.calls.function_incoming_arg (&all->args_so_far,
-                                                    data->promoted_mode,
-                                                    data->passed_type, true);
+         rtx tem
+           = target_internalm.function_incoming_arg (&all->args_so_far,
+                                                     data->promoted_mode,
+                                                     data->passed_type, true);
          in_regs = tem != NULL;
        }
     }
@@ -2429,10 +2431,10 @@ assign_parm_find_entry_rtl (struct assig
     {
       int partial;
 
-      partial = targetm.calls.arg_partial_bytes (&all->args_so_far,
-                                                data->promoted_mode,
-                                                data->passed_type,
-                                                data->named_arg);
+      partial = target_internalm.arg_partial_bytes (&all->args_so_far,
+                                                   data->promoted_mode,
+                                                   data->passed_type,
+                                                   data->named_arg);
       data->partial = partial;
 
       /* The caller might already have allocated stack space for the
@@ -3363,8 +3365,9 @@ assign_parms (tree fndecl)
       set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer);
 
       /* Update info on where next arg arrives in registers.  */
-      targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
-                                         data.passed_type, data.named_arg);
+      target_internalm.function_arg_advance (&all.args_so_far,
+                                            data.promoted_mode,
+                                            data.passed_type, data.named_arg);
 
       assign_parm_adjust_stack_rtl (&data);
 
@@ -3553,8 +3556,9 @@ gimplify_parameters (void)
        continue;
 
       /* Update info on where next arg arrives in registers.  */
-      targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
-                                         data.passed_type, data.named_arg);
+      target_internalm.function_arg_advance (&all.args_so_far,
+                                            data.promoted_mode,
+                                            data.passed_type, data.named_arg);
 
       /* ??? Once upon a time variable_size stuffed parameter list
         SAVE_EXPRs (amongst others) onto a pending sizes list.  This
Index: calls.c
===================================================================
--- calls.c     (revision 166860)
+++ calls.c     (working copy)
@@ -39,6 +39,7 @@ Software Foundation; either version 3, o
 #include "sbitmap.h"
 #include "langhooks.h"
 #include "target.h"
+#include "target-internal.h"
 #include "debug.h"
 #include "cgraph.h"
 #include "except.h"
@@ -228,7 +229,8 @@ prepare_call_address (tree fndecl, rtx f
    It is zero if this call doesn't want a structure value.
 
    NEXT_ARG_REG is the rtx that results from executing
-     targetm.calls.function_arg (&args_so_far, VOIDmode, void_type_node, true)
+     target_internalm.function_arg (&args_so_far, VOIDmode, void_type_node,
+                                   true)
    just after all the args have had their registers assigned.
    This could be whatever you like, but normally it is the first
    arg-register beyond those used for args in this call,
@@ -1138,23 +1140,24 @@ initialize_argument_information (int num
       args[i].unsignedp = unsignedp;
       args[i].mode = mode;
 
-      args[i].reg = targetm.calls.function_arg (args_so_far, mode, type,
-                                               argpos < n_named_args);
+      args[i].reg = target_internalm.function_arg (args_so_far, mode, type,
+                                                  argpos < n_named_args);
 
       /* If this is a sibling call and the machine has register windows, the
         register window has to be unwinded before calling the routine, so
         arguments have to go into the incoming registers.  */
-      if (targetm.calls.function_incoming_arg != targetm.calls.function_arg)
+      if (target_internalm.function_incoming_arg
+         != target_internalm.function_arg)
        args[i].tail_call_reg
-         = targetm.calls.function_incoming_arg (args_so_far, mode, type,
-                                                argpos < n_named_args);
+         = target_internalm.function_incoming_arg (args_so_far, mode, type,
+                                                   argpos < n_named_args);
       else
        args[i].tail_call_reg = args[i].reg;
 
       if (args[i].reg)
        args[i].partial
-         = targetm.calls.arg_partial_bytes (args_so_far, mode, type,
-                                            argpos < n_named_args);
+         = target_internalm.arg_partial_bytes (args_so_far, mode, type,
+                                               argpos < n_named_args);
 
       args[i].pass_on_stack = targetm.calls.must_pass_in_stack (mode, type);
 
@@ -1204,8 +1207,8 @@ initialize_argument_information (int num
       /* Increment ARGS_SO_FAR, which has info about which arg-registers
         have been used, etc.  */
 
-      targetm.calls.function_arg_advance (args_so_far, TYPE_MODE (type),
-                                         type, argpos < n_named_args);
+      target_internalm.function_arg_advance (args_so_far, TYPE_MODE (type),
+                                            type, argpos < n_named_args);
     }
 }
 
@@ -2231,26 +2234,26 @@ expand_call (tree exp, rtx target, int i
   /* Now possibly adjust the number of named args.
      Normally, don't include the last named arg if anonymous args follow.
      We do include the last named arg if
-     targetm.calls.strict_argument_naming() returns nonzero.
+     target_internalm.strict_argument_naming() returns nonzero.
      (If no anonymous args follow, the result of list_length is actually
      one too large.  This is harmless.)
 
-     If targetm.calls.pretend_outgoing_varargs_named() returns
-     nonzero, and targetm.calls.strict_argument_naming() returns zero,
+     If target_internalm.pretend_outgoing_varargs_named() returns
+     nonzero, and target_internalm.strict_argument_naming() returns zero,
      this machine will be able to place unnamed args that were passed
      in registers into the stack.  So treat all args as named.  This
      allows the insns emitting for a specific argument list to be
      independent of the function declaration.
 
-     If targetm.calls.pretend_outgoing_varargs_named() returns zero,
+     If targetinternalm.pretend_outgoing_varargs_named() returns zero,
      we do not have any reliable way to pass unnamed args in
      registers, so we must force them into memory.  */
 
   if (type_arg_types != 0
-      && targetm.calls.strict_argument_naming (&args_so_far))
+      && target_internalm.strict_argument_naming (&args_so_far))
     ;
   else if (type_arg_types != 0
-          && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
+          && ! targetinternalm.pretend_outgoing_varargs_named (&args_so_far))
     /* Don't include the last named arg.  */
     --n_named_args;
   else
@@ -2861,14 +2864,14 @@ expand_call (tree exp, rtx target, int i
       /* Set up next argument register.  For sibling calls on machines
         with register windows this should be the incoming register.  */
       if (pass == 0)
-       next_arg_reg = targetm.calls.function_incoming_arg (&args_so_far,
-                                                           VOIDmode,
-                                                           void_type_node,
-                                                           true);
+       next_arg_reg = target_internalm.function_incoming_arg (&args_so_far,
+                                                              VOIDmode,
+                                                              void_type_node,
+                                                              true);
       else
-       next_arg_reg = targetm.calls.function_arg (&args_so_far,
-                                                  VOIDmode, void_type_node,
-                                                  true);
+       next_arg_reg
+         = target_internalm.function_arg (&args_so_far, VOIDmode,
+                                          void_type_node, true);
 
       /* All arguments and registers used for the call must be set up by
         now!  */
@@ -3455,10 +3458,10 @@ emit_library_call_value_1 (int retval, r
       argvec[count].mode = Pmode;
       argvec[count].partial = 0;
 
-      argvec[count].reg = targetm.calls.function_arg (&args_so_far,
-                                                     Pmode, NULL_TREE, true);
-      gcc_assert (targetm.calls.arg_partial_bytes (&args_so_far, Pmode,
-                                                  NULL_TREE, 1) == 0);
+      argvec[count].reg
+       = target_internalm.function_arg (&args_so_far, Pmode, NULL_TREE, true);
+      gcc_assert (target_internalm.arg_partial_bytes (&args_so_far, Pmode,
+                                                     NULL_TREE, 1) == 0);
 
       locate_and_pad_parm (Pmode, NULL_TREE,
 #ifdef STACK_PARMS_IN_REG_PARM_AREA
@@ -3472,7 +3475,8 @@ emit_library_call_value_1 (int retval, r
          || reg_parm_stack_space > 0)
        args_size.constant += argvec[count].locate.size.constant;
 
-      targetm.calls.function_arg_advance (&args_so_far, Pmode, (tree) 0, true);
+      target_internalm.function_arg_advance (&args_so_far, Pmode, (tree) 0,
+                                            true);
 
       count++;
     }
@@ -3531,11 +3535,11 @@ emit_library_call_value_1 (int retval, r
       argvec[count].value = val;
       argvec[count].mode = mode;
 
-      argvec[count].reg = targetm.calls.function_arg (&args_so_far, mode,
-                                                     NULL_TREE, true);
+      argvec[count].reg
+       = target_internalm.function_arg (&args_so_far, mode, NULL_TREE, true);
 
       argvec[count].partial
-       = targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
+       = target_internalm.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
 
       locate_and_pad_parm (mode, NULL_TREE,
 #ifdef STACK_PARMS_IN_REG_PARM_AREA
@@ -3552,7 +3556,8 @@ emit_library_call_value_1 (int retval, r
          || reg_parm_stack_space > 0)
        args_size.constant += argvec[count].locate.size.constant;
 
-      targetm.calls.function_arg_advance (&args_so_far, mode, (tree) 0, true);
+      target_internalm.function_arg_advance (&args_so_far, mode, (tree) 0,
+                                            true);
     }
 
   /* If this machine requires an external definition for library
@@ -3868,8 +3873,8 @@ emit_library_call_value_1 (int retval, r
               build_function_type (tfom, NULL_TREE),
               original_args_size.constant, args_size.constant,
               struct_value_size,
-              targetm.calls.function_arg (&args_so_far,
-                                          VOIDmode, void_type_node, true),
+              target_internalm.function_arg (&args_so_far,
+                                             VOIDmode, void_type_node, true),
               valreg,
               old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
 
Index: genhooks.c
===================================================================
--- genhooks.c  (revision 166860)
+++ genhooks.c  (working copy)
@@ -34,6 +34,7 @@ #define DEFHOOK(NAME, DOC, TYPE, PARAMS,
 #define DEFHOOK_UNDOC(NAME, DOC, TYPE, PARAMS, INIT) \
   { "*", #TYPE, HOOK_PREFIX #NAME, #PARAMS, #INIT },
 #include "target.def"
+#include "target-internal.def"
 #undef DEFHOOK
 };
 
Index: config/alpha/alpha.c
===================================================================
--- config/alpha/alpha.c        (revision 166860)
+++ config/alpha/alpha.c        (working copy)
@@ -11160,5 +11160,7 @@ #define TARGET_DEFAULT_TARGET_FLAGS \
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 
 #include "gt-alpha.h"
Index: config/frv/frv.c
===================================================================
--- config/frv/frv.c    (revision 166860)
+++ config/frv/frv.c    (working copy)
@@ -545,6 +545,8 @@ #define TARGET_DEFAULT_TARGET_FLAGS         \
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #define FRV_SYMBOL_REF_TLS_P(RTX) \
   (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
 
Index: config/s390/s390.c
===================================================================
--- config/s390/s390.c  (revision 166860)
+++ config/s390/s390.c  (working copy)
@@ -10660,4 +10660,6 @@ s390_loop_unroll_adjust (unsigned nunrol
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-s390.h"
Index: config/m32c/m32c.c
===================================================================
--- config/m32c/m32c.c  (revision 166860)
+++ config/m32c/m32c.c  (working copy)
@@ -4850,4 +4850,6 @@ m32c_output_compare (rtx insn, rtx *oper
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-m32c.h"
Index: config/spu/spu.c
===================================================================
--- config/spu/spu.c    (revision 166860)
+++ config/spu/spu.c    (working copy)
@@ -491,6 +491,8 @@ #define TARGET_ADDR_SPACE_LEGITIMATE_ADD
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 static void
 spu_option_init_struct (struct gcc_options *opts)
 {
Index: config/sparc/sparc.c
===================================================================
--- config/sparc/sparc.c        (revision 166860)
+++ config/sparc/sparc.c        (working copy)
@@ -652,6 +652,8 @@ enum processor_type sparc_cpu;
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 /* Implement TARGET_HANDLE_OPTION.  */
 
 static bool
Index: config/mep/mep.c
===================================================================
--- config/mep/mep.c    (revision 166860)
+++ config/mep/mep.c    (working copy)
@@ -7459,4 +7459,6 @@ mep_asm_init_sections (void)
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-mep.h"
Index: config/m32r/m32r.c
===================================================================
--- config/m32r/m32r.c  (revision 166860)
+++ config/m32r/m32r.c  (working copy)
@@ -208,6 +208,8 @@ static void m32r_trampoline_init (rtx, t
 #define TARGET_TRAMPOLINE_INIT m32r_trampoline_init
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Implement TARGET_HANDLE_OPTION.  */
 
Index: config/rx/rx.c
===================================================================
--- config/rx/rx.c      (revision 166860)
+++ config/rx/rx.c      (working copy)
@@ -2882,4 +2882,6 @@ rx_memory_move_cost (enum machine_mode m
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 /* #include "gt-rx.h" */
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c  (revision 166860)
+++ config/i386/i386.c  (working copy)
@@ -34703,5 +34703,7 @@ #define TARGET_VECTORIZE_AUTOVECTORIZE_V
 #define TARGET_ASM_CODE_END ix86_code_end
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 #include "gt-i386.h"
Index: config/sh/sh.c
===================================================================
--- config/sh/sh.c      (revision 166860)
+++ config/sh/sh.c      (working copy)
@@ -600,6 +600,8 @@ #define TARGET_BRANCH_TARGET_REGISTER_CA
 #define SYMBOL_FLAG_FUNCVEC_FUNCTION    (SYMBOL_FLAG_MACH_DEP << 0)
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Implement TARGET_HANDLE_OPTION.  */
 
Index: config/pdp11/pdp11.c
===================================================================
--- config/pdp11/pdp11.c        (revision 166860)
+++ config/pdp11/pdp11.c        (working copy)
@@ -1925,3 +1925,5 @@ pdp11_function_arg_advance (CUMULATIVE_A
 }
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
Index: config/microblaze/microblaze.c
===================================================================
--- config/microblaze/microblaze.c      (revision 166860)
+++ config/microblaze/microblaze.c      (working copy)
@@ -3052,5 +3052,7 @@ #define TARGET_ASM_FUNCTION_END_PROLOGUE
 #define TARGET_EXCEPT_UNWIND_INFO  sjlj_except_unwind_info
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 #include "gt-microblaze.h"
Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c    (revision 166860)
+++ config/avr/avr.c    (working copy)
@@ -219,6 +219,8 @@ static GTY(()) rtx zero_reg_rtx;
 #define TARGET_OPTION_OPTIMIZATION_TABLE avr_option_optimization_table
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 static void
 avr_option_override (void)
Index: config/crx/crx.c
===================================================================
--- config/crx/crx.c    (revision 166860)
+++ config/crx/crx.c    (working copy)
@@ -207,6 +207,8 @@ static void crx_function_arg_advance (CU
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 
 /*****************************************************************************/
 /* TARGET HOOK IMPLEMENTATIONS                                              */
Index: config/xtensa/xtensa.c
===================================================================
--- config/xtensa/xtensa.c      (revision 166860)
+++ config/xtensa/xtensa.c      (working copy)
@@ -277,6 +277,8 @@ static void xtensa_trampoline_init (rtx,
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 
 /* Functions to test Xtensa immediate operand validity.  */
 
Index: config/stormy16/stormy16.c
===================================================================
--- config/stormy16/stormy16.c  (revision 166860)
+++ config/stormy16/stormy16.c  (working copy)
@@ -2686,4 +2686,6 @@ xstormy16_return_in_memory (const_tree t
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-stormy16.h"
Index: config/fr30/fr30.c
===================================================================
--- config/fr30/fr30.c  (revision 166860)
+++ config/fr30/fr30.c  (working copy)
@@ -206,6 +206,8 @@ #define MUST_SAVE_REGISTER(regno)      \
 #define TARGET_OPTION_OPTIMIZATION_TABLE fr30_option_optimization_table
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 
 /* Worker function for TARGET_CAN_ELIMINATE.  */
Index: config/lm32/lm32.c
===================================================================
--- config/lm32/lm32.c  (revision 166860)
+++ config/lm32/lm32.c  (working copy)
@@ -121,6 +121,8 @@ static void lm32_function_arg_advance (C
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 /* Current frame information calculated by lm32_compute_frame_size.  */
 static struct lm32_frame_info current_frame_info;
 
Index: config/moxie/moxie.c
===================================================================
--- config/moxie/moxie.c        (revision 166860)
+++ config/moxie/moxie.c        (working copy)
@@ -590,4 +590,6 @@ moxie_trampoline_init (rtx m_tramp, tree
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-moxie.h"
Index: config/m68hc11/m68hc11.c
===================================================================
--- config/m68hc11/m68hc11.c    (revision 166860)
+++ config/m68hc11/m68hc11.c    (working copy)
@@ -312,6 +312,8 @@ enum reg_class m68hc11_tmp_regs_class = 
 #define TARGET_OPTION_OVERRIDE m68hc11_option_override
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 static void
 m68hc11_option_override (void)
Index: config/cris/cris.c
===================================================================
--- config/cris/cris.c  (revision 166860)
+++ config/cris/cris.c  (working copy)
@@ -250,6 +250,8 @@ static rtx cris_libcall_value (enum mach
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 /* Helper for cris_load_multiple_op and cris_ret_movem_op.  */
 
 bool
Index: config/iq2000/iq2000.c
===================================================================
--- config/iq2000/iq2000.c      (revision 166860)
+++ config/iq2000/iq2000.c      (working copy)
@@ -267,6 +267,8 @@ static bool iq2000_print_operand_punct_v
 #define TARGET_TRAMPOLINE_INIT         iq2000_trampoline_init
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Return nonzero if we split the address into high and low parts.  */
 
Index: config/mn10300/mn10300.c
===================================================================
--- config/mn10300/mn10300.c    (revision 166860)
+++ config/mn10300/mn10300.c    (working copy)
@@ -2513,3 +2513,5 @@ mn10300_adjust_sched_cost (rtx insn, rtx
 #define TARGET_SCHED_ADJUST_COST mn10300_adjust_sched_cost
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
Index: config/ia64/ia64.c
===================================================================
--- config/ia64/ia64.c  (revision 166860)
+++ config/ia64/ia64.c  (working copy)
@@ -633,6 +633,8 @@ #define TARGET_SCHED_FIRST_CYCLE_MULTIPA
 #define TARGET_PREFERRED_RELOAD_CLASS ia64_preferred_reload_class
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 typedef enum
   {
Index: config/m68k/m68k.c
===================================================================
--- config/m68k/m68k.c  (revision 166860)
+++ config/m68k/m68k.c  (working copy)
@@ -303,6 +303,8 @@ #define TARGET_SCHED_FIRST_CYCLE_MULTIPA
 };
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Base flags for 68k ISAs.  */
 #define FL_FOR_isa_00    FL_ISA_68000
Index: config/rs6000/rs6000.c
===================================================================
--- config/rs6000/rs6000.c      (revision 166860)
+++ config/rs6000/rs6000.c      (working copy)
@@ -1703,6 +1703,8 @@ #define TARGET_DEFAULT_TARGET_FLAGS \
 #define TARGET_FUNCTION_VALUE rs6000_function_value
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Return number of consecutive hard regs needed starting at reg REGNO
    to hold something of mode MODE.
Index: config/picochip/picochip.c
===================================================================
--- config/picochip/picochip.c  (revision 166860)
+++ config/picochip/picochip.c  (working copy)
@@ -345,6 +345,8 @@ #define TARGET_SCHED_FIRST_CYCLE_MULTIPA
 #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 
 /* Only return a value in memory if it is greater than 4 bytes.
Index: config/arc/arc.c
===================================================================
--- config/arc/arc.c    (revision 166860)
+++ config/arc/arc.c    (working copy)
@@ -172,6 +172,8 @@ static void arc_option_override (void);
 #define TARGET_TRAMPOLINE_INIT arc_trampoline_init
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Implement TARGET_HANDLE_OPTION.  */
 
Index: config/mcore/mcore.c
===================================================================
--- config/mcore/mcore.c        (revision 166860)
+++ config/mcore/mcore.c        (working copy)
@@ -261,6 +261,8 @@ static void       mcore_option_override     
 #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Adjust the stack and return the number of bytes taken to do it.  */
 static void
Index: config/score/score.c
===================================================================
--- config/score/score.c        (revision 166860)
+++ config/score/score.c        (working copy)
@@ -1233,3 +1233,5 @@ score_block_move (rtx *ops)
 }
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
Index: config/arm/arm.c
===================================================================
--- config/arm/arm.c    (revision 166860)
+++ config/arm/arm.c    (working copy)
@@ -583,6 +583,8 @@ #define TARGET_VECTORIZE_SUPPORT_VECTOR_
   arm_builtin_support_vector_misalignment
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Obstack for minipool constant handling.  */
 static struct obstack minipool_obstack;
Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c      (revision 166860)
+++ config/pa/pa.c      (working copy)
@@ -388,6 +388,8 @@ static GTY((length ("n_deferred_plabels"
 #define TARGET_CAN_ELIMINATE pa_can_eliminate
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Parse the -mfixed-range= option string.  */
 
Index: config/mips/mips.c
===================================================================
--- config/mips/mips.c  (revision 166860)
+++ config/mips/mips.c  (working copy)
@@ -16625,5 +16625,7 @@ #define TARGET_DEFAULT_TARGET_FLAGS             \
 #define TARGET_SHIFT_TRUNCATION_MASK mips_shift_truncation_mask
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 #include "gt-mips.h"
Index: config/vax/vax.c
===================================================================
--- config/vax/vax.c    (revision 166860)
+++ config/vax/vax.c    (working copy)
@@ -125,6 +125,8 @@ static int vax_return_pops_args (tree, t
 #define TARGET_OPTION_OVERRIDE vax_option_override
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
 
 /* Set global variables as needed for the options enabled.  */
 
Index: config/h8300/h8300.c
===================================================================
--- config/h8300/h8300.c        (revision 166860)
+++ config/h8300/h8300.c        (working copy)
@@ -5964,3 +5964,5 @@ h8300_trampoline_init (rtx m_tramp, tree
 #define TARGET_OPTION_OPTIMIZATION_TABLE h8300_option_optimization_table
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
Index: config/v850/v850.c
===================================================================
--- config/v850/v850.c  (revision 166860)
+++ config/v850/v850.c  (working copy)
@@ -3207,4 +3207,6 @@ v850_issue_rate (void)
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 #include "gt-v850.h"
Index: config/mmix/mmix.c
===================================================================
--- config/mmix/mmix.c  (revision 166860)
+++ config/mmix/mmix.c  (working copy)
@@ -265,6 +265,8 @@ static void mmix_trampoline_init (rtx, t
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
+
 /* Functions that are expansions for target macros.
    See Target Macros in `Using and Porting GCC'.  */
 
Index: config/bfin/bfin.c
===================================================================
--- config/bfin/bfin.c  (revision 166860)
+++ config/bfin/bfin.c  (working copy)
@@ -6697,3 +6697,5 @@ bfin_expand_builtin (tree exp, rtx targe
 #define TARGET_TRAMPOLINE_INIT bfin_trampoline_init
 
 struct gcc_target targetm = TARGET_INITIALIZER;
+
+struct gcc_target_internal target_internalm = TARGET_INTERNAL_INITIALIZER;
0a1,65
> /* Data structure definitions for a generic GCC target.
>    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
>    Free Software Foundation, Inc.
> 
>    This program is free software; you can redistribute it and/or modify it
>    under the terms of the GNU General Public License as published by the
>    Free Software Foundation; either version 3, or (at your option) any
>    later version.
> 
>    This program is distributed in the hope that it will be useful,
>    but WITHOUT ANY WARRANTY; without even the implied warranty of
>    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>    GNU General Public License for more details.
> 
>    You should have received a copy of the GNU General Public License
>    along with this program; see the file COPYING3.  If not see
>    <http://www.gnu.org/licenses/>.
> 
>    In other words, you are welcome to use, share and improve this program.
>    You are forbidden to forbid anyone else to use, share and improve
>    what you give them.   Help stamp out software-hoarding!  */
> 
> 
> /* This file contains a data structure that describes a GCC target.
>    At present it is incomplete, but in future it should grow to
>    contain most or all target machine and target O/S specific
>    information.
> 
>    This structure has its initializer declared in target-def.h in the
>    form of large macro TARGET_INITIALIZER that expands to many smaller
>    macros.
> 
>    The smaller macros each initialize one component of the structure,
>    and each has a default.  Each target should have a file that
>    includes target.h and target-def.h, and overrides any inappropriate
>    defaults by undefining the relevant macro and defining a suitable
>    replacement.  That file should then contain the definition of
>    "targetm" like so:
> 
>    struct gcc_target targetm = TARGET_INITIALIZER;
> 
>    Doing things this way allows us to bring together everything that
>    defines a GCC target.  By supplying a default that is appropriate
>    to most targets, we can easily add new items without needing to
>    edit dozens of target configuration files.  It should also allow us
>    to gradually reduce the amount of conditional compilation that is
>    scattered throughout GCC.  */
> 
> #ifndef GCC_TARGET_INTERNAL_H
> #define GCC_TARGET_INTERNAL_H
> 
> #include "tm.h"
> #include "insn-modes.h"
> 
> /* The target structure.  This holds all the backend hooks.  */
> #define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
> #define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
> #define DEFHOOK_UNDOC DEFHOOK
> #define HOOKSTRUCT(FRAGMENT) FRAGMENT
> 
> #include "target-internal.def"
> 
> extern struct gcc_target_internal target_internalm;
> 
> #endif /* GCC_TARGET_INTERNALH */
0a1,145
> /* Target hook definitions.
>    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
>    Free Software Foundation, Inc.
> 
>    This program is free software; you can redistribute it and/or modify it
>    under the terms of the GNU General Public License as published by the
>    Free Software Foundation; either version 3, or (at your option) any
>    later version.
> 
>    This program is distributed in the hope that it will be useful,
>    but WITHOUT ANY WARRANTY; without even the implied warranty of
>    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>    GNU General Public License for more details.
> 
>    You should have received a copy of the GNU General Public License
>    along with this program; see the file COPYING3.  If not see
>    <http://www.gnu.org/licenses/>.
> 
>    In other words, you are welcome to use, share and improve this program.
>    You are forbidden to forbid anyone else to use, share and improve
>    what you give them.   Help stamp out software-hoarding!  */
> 
> /* The following macros should be provided by the including file:
> 
>    DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT): Define a function-valued hook.
>    DEFHOOKPOD(DOC, TYPE, NAME, INIT): Define a piece-of-data 'hook'.  */
> 
> /* Defaults for optional macros:
>    DEFHOOKPODX(NAME, TYPE, INIT): Like DEFHOOKPOD, but share documentation
>    with the previous 'hook'.  */
> #ifndef DEFHOOKPODX
> #define DEFHOOKPODX(NAME, TYPE, INIT) DEFHOOKPOD (NAME, 0, TYPE, INIT)
> #endif
>    
> /* HOOKSTRUCT(FRAGMENT): Declarator fragments to encapsulate all the
>    members into a struct gcc_target, which in turn contains several
>    sub-structs.  */
> #ifndef HOOKSTRUCT
> #define HOOKSTRUCT(FRAGMENT)
> #endif
> /* HOOK_VECTOR: Start a struct declaration, which then gets its own 
> initializer.
>    HOOK_VECTOR_END: Close a struct declaration, providing a member declarator
>                     name for nested use.  */
> #ifndef HOOK_VECTOR_1
> #define HOOK_VECTOR_1(NAME, FRAGMENT) HOOKSTRUCT(FRAGMENT)
> #endif
> #define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME 
> {)
> #define HOOK_VECTOR_END(DECL_NAME) HOOK_VECTOR_1(,} DECL_NAME ;)
> 
> HOOK_VECTOR (TARGET_INTERNAL_INITIALIZER, gcc_target_internal)
> 
> /* See target.def for an explanation of the fields.  */
> 
> #undef HOOK_PREFIX
> #define HOOK_PREFIX "TARGET_"
> 
> /* Return true if a parameter must be passed by reference.  TYPE may
>    be null if this is a libcall.  CA may be null if this query is
>    from __builtin_va_arg.  */
> DEFHOOK
> (pass_by_reference,
>  "",
>  bool,
>  (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
>  hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
> 
> /* Returns pretend_argument_size.  */
> DEFHOOK
> (setup_incoming_varargs,
>  "",
>  void, (CUMULATIVE_ARGS *args_so_far, enum machine_mode mode, tree type,
>       int *pretend_args_size, int second_time),
>  default_setup_incoming_varargs)
> 
> DEFHOOK
> (strict_argument_naming,
>  "",
>  bool, (CUMULATIVE_ARGS *ca),
>  hook_bool_CUMULATIVE_ARGS_false)
> 
> /* Returns true if we should use
>    targetm.calls.setup_incoming_varargs() and/or
>    targetm.calls.strict_argument_naming().  */
> DEFHOOK
> (pretend_outgoing_varargs_named,
>  "",
>  bool, (CUMULATIVE_ARGS *ca),
>  default_pretend_outgoing_varargs_named)
> 
> /* Return true if type TYPE, mode MODE, which is passed by reference,
>    should have the object copy generated by the callee rather than
>    the caller.  It is never called for TYPE requiring constructors.  */
> DEFHOOK
> (callee_copies,
>  "",
>  bool,
>  (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
>  hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
> 
> /* Return zero for arguments passed entirely on the stack or entirely
>    in registers.  If passed in both, return the number of bytes passed
>    in registers; the balance is therefore passed on the stack.  */
> DEFHOOK
> (arg_partial_bytes,
>  "",
>  int, (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, bool named),
>  hook_int_CUMULATIVE_ARGS_mode_tree_bool_0)
> 
> /* Update the state in CA to advance past an argument in the
>    argument list.  The values MODE, TYPE, and NAMED describe that
>    argument.  */
> /* ??? tm.texi still only describes the old macro.  */
> DEFHOOK_UNDOC
> (function_arg_advance,
>  "",
>  void,
>  (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, bool named),
>  default_function_arg_advance)
> 
> /* Return zero if the argument described by the state of CA should
>    be placed on a stack, or a hard register in which to store the
>    argument.  The values MODE, TYPE, and NAMED describe that
>    argument.  */
> /* ??? tm.texi still only describes the old macro.  */
> DEFHOOK_UNDOC
> (function_arg,
>  "",
>  rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
>        bool named),
>  default_function_arg)
> 
> /* Likewise, but for machines with register windows.  Return the
>    location where the argument will appear to the callee.  */
> /* ??? tm.texi still only describes the old macro.  */
> DEFHOOK_UNDOC
> (function_incoming_arg,
>  "",
>  rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
>        bool named),
>  default_function_incoming_arg)
> 
> /* Empty macro arguments are undefined in C90, so use an empty macro.  */
> #define C90_EMPTY_HACK
> /* Close the 'struct gcc_target_internal' definition.  */
> HOOK_VECTOR_END (C90_EMPTY_HACK)

Reply via email to