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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix INIT_CUMULATIVE_ARGS for split_complex on rs6000


I noticed that the rs6000 port is losing track of the number of named
args when _Complex args are involved.  For example, complex-6.c was
passing some args both in floating point and general regs, which is what
is required by the ABI for non-prototyped functions.

.test_long_double:
        mflr 0
        stfd 14,-144(1)
        std 0,16(1)
        stdu 1,-272(1)
        ld 9,.LC1@toc(2)
        lfd 1,0(9)
        lfd 2,8(9)
        lfd 3,16(9)
        lfd 4,24(9)
        stfd 3,112(1)	<-- unneeded
        stfd 4,120(1)	<--
        ld 5,112(1)	<--
        ld 6,120(1)	<--
        bl .ctest_long_double

While it's not wrong to set up extra registers, it's wasteful.

This is happening because rs6000.c:init_cumulative_args scans
TYPE_ARGS_TYPES to count named args on the pre-split function
args, but the backend function_arg machinery works with post-split
complex args.  Fortunately, we have the count available post-split
where needed, so an extra param to INIT_CUMULATIVE_ARGS cures the
problem.

Jan changed the location of INIT_CUMULATIVE_ARGS in expand_call when
making the commit corresponding to the patch in
http://gcc.gnu.org/ml/gcc-patches/2003-02/msg01490.html.  I've put that
back as it was.

	* doc/tm.texi (INIT_CUMULATIVE_ARGS): Update doco.
	* calls.c (expand_call): Pass n_named_args to INIT_CUMULATIVE_ARGS.
	(emit_library_call_value_1): Likewise pass nargs.
	* expr.c (block_move_libcall_safe_for_call_parm): Pass 3 here.
	* function.c (assign_parms): Pass -1 to INIT_CUMULATIVE_ARGS.
	* config/rs6000/rs6000.c (init_cumulative_args): Use n_named_args
	parameter instead of scanning TYPE_ARGS_TYPES to count args.
	* config/rs6000/rs6000-protos.h (init_cumulative_args): Update
	prototype.
	* config/rs6000/rs6000.h (INIT_CUMULATIVE_ARGS): Pass extra arg.
	(INIT_CUMULATIVE_INCOMING_ARGS): Set extra arg to 1000.
	(INIT_CUMULATIVE_LIBCALL_ARGS): Set extra arg to 0.
	* config/sh/sh.c (sh_output_mi_thunk): Pass 1 as n_named_args to
	INIT_CUMULATIVE_ARGS.
	* gcc/config/alpha/alpha.h (INIT_CUMULATIVE_ARGS): Update.
	* gcc/config/alpha/unicosmk.h, gcc/config/alpha/vms.h,
	gcc/config/arc/arc.h, gcc/config/arm/arm.h, gcc/config/avr/avr.h,
	gcc/config/c4x/c4x.h, gcc/config/cris/cris.h, gcc/config/d30v/d30v.h
	gcc/config/dsp16xx/dsp16xx.h, gcc/config/fr30/fr30.h,
	gcc/config/frv/frv.h, gcc/config/h8300/h8300.h, gcc/config/i370/i370.h
	gcc/config/i386/i386.h, gcc/config/i860/i860.h, gcc/config/i960/i960.h
	gcc/config/ia64/ia64.h, gcc/config/ip2k/ip2k.h,
	gcc/config/iq2000/iq2000.h, gcc/config/m32r/m32r.h,
	gcc/config/m68hc11/m68hc11.h, gcc/config/m68k/m68k.h,
	gcc/config/mcore/mcore.h, gcc/config/mips/mips.h,
	gcc/config/mmix/mmix.h, gcc/config/mn10300/mn10300.h
	gcc/config/ns32k/ns32k.h, gcc/config/pa/pa.h, gcc/config/pdp11/pdp11.h
	gcc/config/s390/s390.h, gcc/config/sh/sh.h, gcc/config/sparc/sparc.h
	gcc/config/stormy16/stormy16.h, gcc/config/v850/v850.h,
	gcc/config/vax/vax.h, gcc/config/xtensa/xtensa.h: Likewise.

Bootstrap powerpc64-linux and regression testing in progress.  OK
to apply mainline? (and 3.4 branch?)


Index: gcc/doc/tm.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v
retrieving revision 1.281.2.7
diff -u -p -r1.281.2.7 tm.texi
--- gcc/doc/tm.texi	31 Jan 2004 17:32:46 -0000	1.281.2.7
+++ gcc/doc/tm.texi	2 Feb 2004 13:32:50 -0000
@@ -3725,7 +3725,7 @@ arguments are passed on the stack, there
 should not be empty, so use @code{int}.
 @end defmac
 
-@defmac INIT_CUMULATIVE_ARGS (@var{cum}, @var{fntype}, @var{libname}, @var{fndecl})
+@defmac INIT_CUMULATIVE_ARGS (@var{cum}, @var{fntype}, @var{libname}, @var{fndecl}, @var{n_named_args})
 A C statement (sans semicolon) for initializing the variable
 @var{cum} for the state at the beginning of the argument list.  The
 variable has type @code{CUMULATIVE_ARGS}.  The value of @var{fntype}
@@ -3734,7 +3734,10 @@ the args, or 0 if the args are to a comp
 For direct calls that are not libcalls, @var{fndecl} contain the
 declaration node of the function.  @var{fndecl} is also set when
 @code{INIT_CUMULATIVE_ARGS} is used to find arguments for the function
-being compiled.
+being compiled.  @var{n_named_args} is set to the number of named
+arguments, including a structure return address if it is passed as a
+parameter, when making a call.  When processing incoming arguments,
+@var{n_named_args} is set to -1.
 
 When processing a call to a compiler support library function,
 @var{libname} identifies which one.  It is a @code{symbol_ref} rtx which
Index: gcc/calls.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/calls.c,v
retrieving revision 1.315.2.1
diff -u -p -r1.315.2.1 calls.c
--- gcc/calls.c	23 Jan 2004 23:35:53 -0000	1.315.2.1
+++ gcc/calls.c	2 Feb 2004 13:15:08 -0000
@@ -2395,14 +2395,6 @@ expand_call (tree exp, rtx target, int i
   for (p = actparms, num_actuals = 0; p; p = TREE_CHAIN (p))
     num_actuals++;
 
-  /* Start updating where the next arg would go.
-
-     On some machines (such as the PA) indirect calls have a different
-     calling convention than normal calls.  The last argument in
-     INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
-     or not.  */
-  INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl);
-
   /* Compute number of named args.
      Normally, don't include the last named arg if anonymous args follow.
      We do include the last named arg if
@@ -2434,6 +2426,14 @@ expand_call (tree exp, rtx target, int i
     /* If we know nothing, treat all args as named.  */
     n_named_args = num_actuals;
 
+  /* Start updating where the next arg would go.
+
+     On some machines (such as the PA) indirect calls have a different
+     calling convention than normal calls.  The last argument in
+     INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
+     or not.  */
+  INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl, n_named_args);
+
   /* Make a vector to hold all the information about each arg.  */
   args = alloca (num_actuals * sizeof (struct arg_data));
   memset (args, 0, num_actuals * sizeof (struct arg_data));
@@ -3777,7 +3777,7 @@ emit_library_call_value_1 (int retval, r
 #ifdef INIT_CUMULATIVE_LIBCALL_ARGS
   INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far, outmode, fun);
 #else
-  INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
+  INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0, nargs);
 #endif
 
   args_size.constant = 0;
Index: gcc/expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.615.4.1
diff -u -p -r1.615.4.1 expr.c
--- gcc/expr.c	23 Jan 2004 23:35:56 -0000	1.615.4.1
+++ gcc/expr.c	2 Feb 2004 13:15:15 -0000
@@ -1395,7 +1395,7 @@ block_move_libcall_safe_for_call_parm (v
     tree fn, arg;
 
     fn = emit_block_move_libcall_fn (false);
-    INIT_CUMULATIVE_ARGS (args_so_far, TREE_TYPE (fn), NULL_RTX, 0);
+    INIT_CUMULATIVE_ARGS (args_so_far, TREE_TYPE (fn), NULL_RTX, 0, 3);
 
     arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
     for ( ; arg != void_list_node ; arg = TREE_CHAIN (arg))
Index: gcc/function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.483.4.2
diff -u -p -r1.483.4.2 function.c
--- gcc/function.c	28 Jan 2004 13:58:19 -0000	1.483.4.2
+++ gcc/function.c	2 Feb 2004 13:15:19 -0000
@@ -4351,7 +4351,7 @@ assign_parms (tree fndecl)
 #ifdef INIT_CUMULATIVE_INCOMING_ARGS
   INIT_CUMULATIVE_INCOMING_ARGS (args_so_far, fntype, NULL_RTX);
 #else
-  INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, fndecl);
+  INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, fndecl, -1);
 #endif
 
   /* We haven't yet found an argument that we must push and pretend the
Index: gcc/config/alpha/alpha.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.h,v
retrieving revision 1.213.2.2
diff -u -p -r1.213.2.2 alpha.h
--- gcc/config/alpha/alpha.h	31 Jan 2004 06:18:09 -0000	1.213.2.2
+++ gcc/config/alpha/alpha.h	2 Feb 2004 13:15:26 -0000
@@ -1002,7 +1002,8 @@ extern int alpha_memory_latency;
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)  (CUM) = 0
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  (CUM) = 0
 
 /* Define intermediate macro to compute the size (in registers) of an argument
    for the Alpha.  */
Index: gcc/config/alpha/unicosmk.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/unicosmk.h,v
retrieving revision 1.28
diff -u -p -r1.28 unicosmk.h
--- gcc/config/alpha/unicosmk.h	24 Dec 2003 00:14:19 -0000	1.28
+++ gcc/config/alpha/unicosmk.h	2 Feb 2004 13:15:27 -0000
@@ -176,7 +176,7 @@ typedef struct {
    function whose data type is FNTYPE.  For a library call, FNTYPE is 0.  */
 
 #undef INIT_CUMULATIVE_ARGS
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   do { (CUM).num_args = 0;					\
        (CUM).num_arg_words = 0;					\
        (CUM).num_reg_words = 0;					\
Index: gcc/config/alpha/vms.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/vms.h,v
retrieving revision 1.79.2.1
diff -u -p -r1.79.2.1 vms.h
--- gcc/config/alpha/vms.h	31 Jan 2004 06:18:10 -0000	1.79.2.1
+++ gcc/config/alpha/vms.h	2 Feb 2004 13:15:27 -0000
@@ -172,7 +172,7 @@ typedef struct {int num_args; enum avms_
    For a library call, FNTYPE is 0.  */
 
 #undef INIT_CUMULATIVE_ARGS
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   (CUM).num_args = 0;						\
   (CUM).atypes[0] = (CUM).atypes[1] = (CUM).atypes[2] = I64;	\
   (CUM).atypes[3] = (CUM).atypes[4] = (CUM).atypes[5] = I64;
Index: gcc/config/arc/arc.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arc/arc.h,v
retrieving revision 1.68
diff -u -p -r1.68 arc.h
--- gcc/config/arc/arc.h	24 Dec 2003 00:14:20 -0000	1.68
+++ gcc/config/arc/arc.h	2 Feb 2004 13:15:28 -0000
@@ -633,7 +633,7 @@ extern enum reg_class arc_regno_reg_clas
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
 ((CUM) = 0)
 
 /* The number of registers used for parameter passing.  Local to this file.  */
Index: gcc/config/arm/arm.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.h,v
retrieving revision 1.214.2.1
diff -u -p -r1.214.2.1 arm.h
--- gcc/config/arm/arm.h	31 Jan 2004 06:18:11 -0000	1.214.2.1
+++ gcc/config/arm/arm.h	2 Feb 2004 13:15:30 -0000
@@ -1749,7 +1749,7 @@ typedef struct
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.
    On the ARM, the offset starts at 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   arm_init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL))
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/avr/avr.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/avr/avr.h,v
retrieving revision 1.95.4.1
diff -u -p -r1.95.4.1 avr.h
--- gcc/config/avr/avr.h	20 Jan 2004 19:31:07 -0000	1.95.4.1
+++ gcc/config/avr/avr.h	2 Feb 2004 13:15:33 -0000
@@ -1130,7 +1130,8 @@ typedef struct avr_args {
    store anything in `CUMULATIVE_ARGS'; however, the data structure
    must exist and should not be empty, so use `int'.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) init_cumulative_args (&(CUM), FNTYPE, LIBNAME, FNDECL)
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
+  init_cumulative_args (&(CUM), FNTYPE, LIBNAME, FNDECL)
 
 /* A C statement (sans semicolon) for initializing the variable CUM
    for the state at the beginning of the argument list.  The variable
Index: gcc/config/c4x/c4x.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/c4x/c4x.h,v
retrieving revision 1.136
diff -u -p -r1.136 c4x.h
--- gcc/config/c4x/c4x.h	5 Oct 2003 13:34:44 -0000	1.136
+++ gcc/config/c4x/c4x.h	2 Feb 2004 13:15:35 -0000
@@ -1113,7 +1113,7 @@ typedef struct c4x_args
 }
 CUMULATIVE_ARGS;
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   (c4x_init_cumulative_args (&CUM, FNTYPE, LIBNAME))
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)	\
Index: gcc/config/cris/cris.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/cris/cris.h,v
retrieving revision 1.60
diff -u -p -r1.60 cris.h
--- gcc/config/cris/cris.h	13 Dec 2003 04:44:04 -0000	1.60
+++ gcc/config/cris/cris.h	2 Feb 2004 13:15:36 -0000
@@ -955,7 +955,7 @@ struct cum_args {int regs;};
 
 /* The regs member is an integer, the number of arguments got into
    registers so far.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL)	  \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
  ((CUM).regs = 0)
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)		\
Index: gcc/config/d30v/d30v.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/d30v/d30v.h,v
retrieving revision 1.88.2.1
diff -u -p -r1.88.2.1 d30v.h
--- gcc/config/d30v/d30v.h	31 Jan 2004 06:18:16 -0000	1.88.2.1
+++ gcc/config/d30v/d30v.h	2 Feb 2004 13:15:38 -0000
@@ -1216,7 +1216,7 @@ typedef struct d30v_stack {
    being processed.  Thus, each time this macro is called, either LIBNAME or
    FNTYPE is nonzero, but never both of them at once.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   d30v_init_cumulative_args (&CUM, FNTYPE, LIBNAME, FNDECL, FALSE)
 
 /* Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of finding the
Index: gcc/config/dsp16xx/dsp16xx.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/dsp16xx/dsp16xx.h,v
retrieving revision 1.64
diff -u -p -r1.64 dsp16xx.h
--- gcc/config/dsp16xx/dsp16xx.h	1 Dec 2003 18:25:38 -0000	1.64
+++ gcc/config/dsp16xx/dsp16xx.h	2 Feb 2004 13:15:40 -0000
@@ -1196,7 +1196,8 @@ extern struct dsp16xx_frame_info current
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)  ((CUM) = 0)
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
    of mode MODE and data type TYPE.
Index: gcc/config/fr30/fr30.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/fr30/fr30.h,v
retrieving revision 1.46
diff -u -p -r1.46 fr30.h
--- gcc/config/fr30/fr30.h	13 Dec 2003 04:44:05 -0000	1.46
+++ gcc/config/fr30/fr30.h	2 Feb 2004 13:15:41 -0000
@@ -764,7 +764,8 @@ enum reg_class
    the function, as a string.  LIBNAME is 0 when an ordinary C function call is
    being processed.  Thus, each time this macro is called, either LIBNAME or
    FNTYPE is nonzero, but never both of them at once.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) (CUM) = 0
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  (CUM) = 0
 
 /* A C statement (sans semicolon) to update the summarizer variable CUM to
    advance past an argument in the argument list.  The values MODE, TYPE and
Index: gcc/config/frv/frv.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/frv/frv.h,v
retrieving revision 1.33.2.1
diff -u -p -r1.33.2.1 frv.h
--- gcc/config/frv/frv.h	31 Jan 2004 06:18:18 -0000	1.33.2.1
+++ gcc/config/frv/frv.h	2 Feb 2004 13:15:44 -0000
@@ -1946,7 +1946,7 @@ struct machine_function GTY(())
    being processed.  Thus, each time this macro is called, either LIBNAME or
    FNTYPE is nonzero, but never both of them at once.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   frv_init_cumulative_args (&CUM, FNTYPE, LIBNAME, FNDECL, FALSE)
 
 /* Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of finding the
Index: gcc/config/h8300/h8300.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.h,v
retrieving revision 1.163.2.1
diff -u -p -r1.163.2.1 h8300.h
--- gcc/config/h8300/h8300.h	25 Jan 2004 02:39:22 -0000	1.163.2.1
+++ gcc/config/h8300/h8300.h	2 Feb 2004 13:15:45 -0000
@@ -661,7 +661,7 @@ struct cum_arg
 
    On the H8/300, the offset starts at 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM).nbytes = 0, (CUM).libcall = LIBNAME)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/i370/i370.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i370/i370.h,v
retrieving revision 1.69
diff -u -p -r1.69 i370.h
--- gcc/config/i370/i370.h	13 Oct 2003 21:16:26 -0000	1.69
+++ gcc/config/i370/i370.h	2 Feb 2004 13:15:46 -0000
@@ -527,7 +527,8 @@ enum reg_class
    a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT)  ((CUM) = 0)
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument of mode MODE and
    data type TYPE.  (TYPE is null for libcalls where that information
Index: gcc/config/i386/i386.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.h,v
retrieving revision 1.368.2.1
diff -u -p -r1.368.2.1 i386.h
--- gcc/config/i386/i386.h	31 Jan 2004 06:18:22 -0000	1.368.2.1
+++ gcc/config/i386/i386.h	2 Feb 2004 13:15:49 -0000
@@ -1756,7 +1756,7 @@ typedef struct ix86_args {
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL))
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/i860/i860.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i860/i860.h,v
retrieving revision 1.39
diff -u -p -r1.39 i860.h
--- gcc/config/i860/i860.h	30 Oct 2003 02:02:41 -0000	1.39
+++ gcc/config/i860/i860.h	2 Feb 2004 13:15:50 -0000
@@ -464,7 +464,7 @@ struct cumulative_args { int ints, float
    when the function gets a structure-value-address as an
    invisible first argument.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM).ints = ((FNTYPE) != 0 && aggregate_value_p (TREE_TYPE ((FNTYPE)), 0) \
 		? 4 : 0),			\
   (CUM).floats = 0)
Index: gcc/config/i960/i960.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i960/i960.h,v
retrieving revision 1.83
diff -u -p -r1.83 i960.h
--- gcc/config/i960/i960.h	30 Oct 2003 02:02:42 -0000	1.83
+++ gcc/config/i960/i960.h	2 Feb 2004 13:15:52 -0000
@@ -853,7 +853,7 @@ struct cum_args { int ca_nregparms; int 
 
    On 80960, the offset always starts at 0; the first parm reg is g0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   ((CUM).ca_nregparms = 0, (CUM).ca_nstackparms = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/ia64/ia64.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.h,v
retrieving revision 1.163
diff -u -p -r1.163 ia64.h
--- gcc/config/ia64/ia64.h	6 Dec 2003 05:40:14 -0000	1.163
+++ gcc/config/ia64/ia64.h	2 Feb 2004 13:15:54 -0000
@@ -1350,7 +1350,7 @@ typedef struct ia64_args
 /* A C statement (sans semicolon) for initializing the variable CUM for the
    state at the beginning of the argument list.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
 do {									\
   (CUM).words = 0;							\
   (CUM).int_regs = 0;							\
Index: gcc/config/ip2k/ip2k.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ip2k/ip2k.h,v
retrieving revision 1.30
diff -u -p -r1.30 ip2k.h
--- gcc/config/ip2k/ip2k.h	10 Oct 2003 20:33:06 -0000	1.30
+++ gcc/config/ip2k/ip2k.h	2 Feb 2004 13:15:54 -0000
@@ -441,7 +441,7 @@ enum reg_class {
 
 #define CUMULATIVE_ARGS	int
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   ((CUM) = 0)
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)
Index: gcc/config/iq2000/iq2000.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/iq2000/iq2000.h,v
retrieving revision 1.8
diff -u -p -r1.8 iq2000.h
--- gcc/config/iq2000/iq2000.h	16 Dec 2003 15:20:51 -0000	1.8
+++ gcc/config/iq2000/iq2000.h	2 Feb 2004 13:15:55 -0000
@@ -472,7 +472,7 @@ typedef struct iq2000_args
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)		\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   init_cumulative_args (& CUM, FNTYPE, LIBNAME)				\
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)			\
Index: gcc/config/m32r/m32r.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m32r/m32r.h,v
retrieving revision 1.99
diff -u -p -r1.99 m32r.h
--- gcc/config/m32r/m32r.h	9 Jan 2004 17:03:54 -0000	1.99
+++ gcc/config/m32r/m32r.h	2 Feb 2004 13:15:57 -0000
@@ -1055,7 +1055,7 @@ extern enum reg_class m32r_regno_reg_cla
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   ((CUM) = 0)
 
 /* The number of registers used for parameter passing.  Local to this file.  */
Index: gcc/config/m68hc11/m68hc11.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68hc11/m68hc11.h,v
retrieving revision 1.81
diff -u -p -r1.81 m68hc11.h
--- gcc/config/m68hc11/m68hc11.h	13 Dec 2003 04:44:07 -0000	1.81
+++ gcc/config/m68hc11/m68hc11.h	2 Feb 2004 13:15:58 -0000
@@ -1082,7 +1082,7 @@ typedef struct m68hc11_args
 
 /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a
    function whose data type is FNTYPE. For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
     (m68hc11_init_cumulative_args (&CUM, FNTYPE, LIBNAME))
 
 /* Update the data in CUM to advance over an argument of mode MODE and data
Index: gcc/config/m68k/m68k.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/m68k.h,v
retrieving revision 1.103
diff -u -p -r1.103 m68k.h
--- gcc/config/m68k/m68k.h	13 Dec 2003 04:44:07 -0000	1.103
+++ gcc/config/m68k/m68k.h	2 Feb 2004 13:16:00 -0000
@@ -901,7 +901,7 @@ enum reg_class {
 
    On the m68k, the offset starts at 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/mcore/mcore.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mcore/mcore.h,v
retrieving revision 1.57.4.1
diff -u -p -r1.57.4.1 mcore.h
--- gcc/config/mcore/mcore.h	31 Jan 2004 06:18:29 -0000	1.57.4.1
+++ gcc/config/mcore/mcore.h	2 Feb 2004 13:16:01 -0000
@@ -710,7 +710,7 @@ extern const enum reg_class reg_class_fr
 
    On MCore, the offset always starts at 0: the first parm reg is always
    the same reg.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT)  \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/mips/mips.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.h,v
retrieving revision 1.310.4.1
diff -u -p -r1.310.4.1 mips.h
--- gcc/config/mips/mips.h	25 Jan 2004 10:19:05 -0000	1.310.4.1
+++ gcc/config/mips/mips.h	2 Feb 2004 13:16:04 -0000
@@ -2299,7 +2299,7 @@ typedef struct mips_args {
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)		\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   init_cumulative_args (&CUM, FNTYPE, LIBNAME)				\
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/mmix/mmix.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mmix/mmix.h,v
retrieving revision 1.58
diff -u -p -r1.58 mmix.h
--- gcc/config/mmix/mmix.h	6 Jul 2003 23:05:13 -0000	1.58
+++ gcc/config/mmix/mmix.h	2 Feb 2004 13:16:05 -0000
@@ -745,7 +745,7 @@ enum reg_class
 
 typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM).regs = 0, (CUM).lib = ((LIBNAME) != 0))
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)		\
Index: gcc/config/mn10300/mn10300.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mn10300/mn10300.h,v
retrieving revision 1.77.2.1
diff -u -p -r1.77.2.1 mn10300.h
--- gcc/config/mn10300/mn10300.h	31 Jan 2004 06:18:32 -0000	1.77.2.1
+++ gcc/config/mn10300/mn10300.h	2 Feb 2004 13:16:06 -0000
@@ -563,7 +563,7 @@ struct cum_arg {int nbytes; };
 
    On the MN10300, the offset starts at 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM).nbytes = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/ns32k/ns32k.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ns32k/ns32k.h,v
retrieving revision 1.60
diff -u -p -r1.60 ns32k.h
--- gcc/config/ns32k/ns32k.h	19 Nov 2003 01:06:50 -0000	1.60
+++ gcc/config/ns32k/ns32k.h	2 Feb 2004 13:16:07 -0000
@@ -675,7 +675,7 @@ enum reg_class
 
    On the ns32k, the offset starts at 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/pa/pa.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/pa/pa.h,v
retrieving revision 1.208.4.2
diff -u -p -r1.208.4.2 pa.h
--- gcc/config/pa/pa.h	21 Jan 2004 22:16:49 -0000	1.208.4.2
+++ gcc/config/pa/pa.h	2 Feb 2004 13:16:09 -0000
@@ -797,7 +797,7 @@ struct hppa_args {int words, nargs_proto
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   (CUM).words = 0, 							\
   (CUM).incoming = 0,							\
   (CUM).indirect = (FNTYPE) && !(FNDECL),				\
Index: gcc/config/pdp11/pdp11.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/pdp11/pdp11.h,v
retrieving revision 1.53
diff -u -p -r1.53 pdp11.h
--- gcc/config/pdp11/pdp11.h	27 Sep 2003 04:48:27 -0000	1.53
+++ gcc/config/pdp11/pdp11.h	2 Feb 2004 13:16:10 -0000
@@ -597,7 +597,7 @@ maybe ac0 ? - as option someday! */
    when the function gets a structure-value-address as an
    invisible first argument.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/rs6000/rs6000-protos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000-protos.h,v
retrieving revision 1.71.2.2
diff -u -p -r1.71.2.2 rs6000-protos.h
--- gcc/config/rs6000/rs6000-protos.h	18 Jan 2004 03:50:35 -0000	1.71.2.2
+++ gcc/config/rs6000/rs6000-protos.h	2 Feb 2004 13:16:11 -0000
@@ -28,7 +28,7 @@
 #ifdef RTX_CODE
 
 #ifdef TREE_CODE
-extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, int, int);
+extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, int, int, int);
 extern void rs6000_va_start (tree, rtx);
 #endif /* TREE_CODE */
 
Index: gcc/config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.576.2.5
diff -u -p -r1.576.2.5 rs6000.c
--- gcc/config/rs6000/rs6000.c	22 Jan 2004 09:14:49 -0000	1.576.2.5
+++ gcc/config/rs6000/rs6000.c	2 Feb 2004 13:16:20 -0000
@@ -3796,7 +3796,8 @@ rs6000_return_in_memory (tree type, tree
 
 void
 init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype, 
-	rtx libname ATTRIBUTE_UNUSED, int incoming, int libcall)
+		      rtx libname ATTRIBUTE_UNUSED, int incoming,
+		      int libcall, int n_named_args)
 {
   static CUMULATIVE_ARGS zero_cumulative;
 
@@ -3813,17 +3814,9 @@ init_cumulative_args (CUMULATIVE_ARGS *c
 	&& (TREE_VALUE (tree_last  (TYPE_ARG_TYPES (fntype)))
 	    != void_type_node));
 
-  if (incoming)
-    cum->nargs_prototype = 1000;		/* don't return a PARALLEL */
-
-  else if (cum->prototype)
-    cum->nargs_prototype = (list_length (TYPE_ARG_TYPES (fntype)) - 1
-			    + (TYPE_MODE (TREE_TYPE (fntype)) == BLKmode
-			       || rs6000_return_in_memory (TREE_TYPE (fntype),
-							   fntype)));
-
-  else
-    cum->nargs_prototype = 0;
+  cum->nargs_prototype = 0;
+  if (incoming || cum->prototype)
+    cum->nargs_prototype = n_named_args;
 
   /* Check for a longcall attribute.  */
   if (fntype
Index: gcc/config/rs6000/rs6000.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.h,v
retrieving revision 1.306
diff -u -p -r1.306 rs6000.h
--- gcc/config/rs6000/rs6000.h	12 Jan 2004 08:11:28 -0000	1.306
+++ gcc/config/rs6000/rs6000.h	2 Feb 2004 13:16:24 -0000
@@ -1767,19 +1768,19 @@ typedef struct rs6000_args
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
-  init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE, FALSE)
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE, FALSE, N_NAMED_ARGS)
 
 /* Similar, but when scanning the definition of a procedure.  We always
    set NARGS_PROTOTYPE large so we never return an EXPR_LIST.  */
 
-#define INIT_CUMULATIVE_INCOMING_ARGS(CUM,FNTYPE,LIBNAME) \
-  init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE, FALSE)
+#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
+  init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE, FALSE, 1000)
 
 /* Like INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls.  */
 
 #define INIT_CUMULATIVE_LIBCALL_ARGS(CUM, MODE, LIBNAME) \
-  init_cumulative_args (&CUM, NULL_TREE, LIBNAME, FALSE, TRUE)
+  init_cumulative_args (&CUM, NULL_TREE, LIBNAME, FALSE, TRUE, 0)
 
 /* Update the data in CUM to advance over an argument
    of mode MODE and data type TYPE.
Index: gcc/config/s390/s390.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.h,v
retrieving revision 1.92.4.2
diff -u -p -r1.92.4.2 s390.h
--- gcc/config/s390/s390.h	31 Jan 2004 06:18:36 -0000	1.92.4.2
+++ gcc/config/s390/s390.h	2 Feb 2004 13:16:24 -0000
@@ -685,7 +685,7 @@ typedef struct s390_arg_structure
 }
 CUMULATIVE_ARGS;
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, NN) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, NN, N_NAMED_ARGS) \
   ((CUM).gprs=0, (CUM).fprs=0)
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                    \
Index: gcc/config/sh/sh.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/sh/sh.c,v
retrieving revision 1.247.2.2
diff -u -p -r1.247.2.2 sh.c
--- gcc/config/sh/sh.c	18 Jan 2004 22:39:59 -0000	1.247.2.2
+++ gcc/config/sh/sh.c	2 Feb 2004 13:16:29 -0000
@@ -8957,7 +8957,7 @@ sh_output_mi_thunk (FILE *file, tree thu
      SH that it's best to do this completely machine independently.
      "this" is passed as first argument, unless a structure return pointer 
      comes first, in which case "this" comes second.  */
-  INIT_CUMULATIVE_ARGS (cum, funtype, NULL_RTX, 0);
+  INIT_CUMULATIVE_ARGS (cum, funtype, NULL_RTX, 0, 1);
 #ifndef PCC_STATIC_STRUCT_RETURN
   if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
     structure_value_byref = 1;
Index: gcc/config/sh/sh.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/sh/sh.h,v
retrieving revision 1.230.4.1
diff -u -p -r1.230.4.1 sh.h
--- gcc/config/sh/sh.h	31 Jan 2004 06:18:39 -0000	1.230.4.1
+++ gcc/config/sh/sh.h	2 Feb 2004 13:16:32 -0000
@@ -1819,7 +1819,7 @@ struct sh_args {
 
    For TARGET_HITACHI, the structure value pointer is passed in memory.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
   do {								\
     (CUM).arg_count[(int) SH_ARG_INT] = 0;			\
     (CUM).arg_count[(int) SH_ARG_FLOAT] = 0;			\
Index: gcc/config/sparc/sparc.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/sparc/sparc.h,v
retrieving revision 1.236.6.3
diff -u -p -r1.236.6.3 sparc.h
--- gcc/config/sparc/sparc.h	30 Jan 2004 14:55:22 -0000	1.236.6.3
+++ gcc/config/sparc/sparc.h	2 Feb 2004 13:16:34 -0000
@@ -1779,7 +1779,7 @@ struct sparc_args {
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
 init_cumulative_args (& (CUM), (FNTYPE), (LIBNAME), (FNDECL));
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/stormy16/stormy16.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/stormy16/stormy16.h,v
retrieving revision 1.82.2.1
diff -u -p -r1.82.2.1 stormy16.h
--- gcc/config/stormy16/stormy16.h	31 Jan 2004 06:18:40 -0000	1.82.2.1
+++ gcc/config/stormy16/stormy16.h	2 Feb 2004 13:16:35 -0000
@@ -435,7 +435,8 @@ enum reg_class
    of arguments that have been passed in registers so far.  */
 #define CUMULATIVE_ARGS int
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) (CUM) = 0
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  (CUM) = 0
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)			\
   ((CUM) = xstormy16_function_arg_advance (CUM, MODE, TYPE, NAMED))
Index: gcc/config/v850/v850.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/v850/v850.h,v
retrieving revision 1.92
diff -u -p -r1.92 v850.h
--- gcc/config/v850/v850.h	31 Dec 2003 17:22:33 -0000	1.92
+++ gcc/config/v850/v850.h	2 Feb 2004 13:16:36 -0000
@@ -756,7 +756,7 @@ struct cum_arg { int nbytes; int anonymo
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM).nbytes = 0, (CUM).anonymous_args = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/vax/vax.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/vax/vax.h,v
retrieving revision 1.64
diff -u -p -r1.64 vax.h
--- gcc/config/vax/vax.h	1 Nov 2003 02:11:12 -0000	1.64
+++ gcc/config/vax/vax.h	2 Feb 2004 13:16:37 -0000
@@ -441,7 +441,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_
 
    On the VAX, the offset starts at 0.  */
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  ((CUM) = 0)
 
 /* Update the data in CUM to advance over an argument
Index: gcc/config/xtensa/xtensa.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/xtensa/xtensa.h,v
retrieving revision 1.43.4.2
diff -u -p -r1.43.4.2 xtensa.h
--- gcc/config/xtensa/xtensa.h	27 Jan 2004 20:26:44 -0000	1.43.4.2
+++ gcc/config/xtensa/xtensa.h	2 Feb 2004 13:16:38 -0000
@@ -775,7 +775,7 @@ typedef struct xtensa_args {
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
    For a library call, FNTYPE is 0.  */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT)		\
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   init_cumulative_args (&CUM, FNTYPE, LIBNAME)
 
 #define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME)		\

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


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