diff options
author | Alan Modra <amodra@bigpond.net.au> | 2004-02-06 06:18:36 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2004-02-06 16:48:36 +1030 |
commit | 0f6937feffc83f7d41e67f4ae62c9138e2a41988 (patch) | |
tree | 33e260930c6daae77a489fe2be891d0432d6531d /gcc/config | |
parent | 11b635fe000d5ab12664f33cac2305762cbf7e46 (diff) | |
download | gcc-0f6937feffc83f7d41e67f4ae62c9138e2a41988.tar.gz |
tm.texi (INIT_CUMULATIVE_ARGS): Update doco.
* 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.
* config/alpha/alpha.h (INIT_CUMULATIVE_ARGS): Update.
* config/alpha/unicosmk.h, config/alpha/vms.h, config/arc/arc.h,
config/arm/arm.h, config/avr/avr.h, config/c4x/c4x.h,
config/cris/cris.h, config/fr30/fr30.h, config/frv/frv.h,
config/h8300/h8300.h, config/i386/i386.h, config/i860/i860.h,
config/ia64/ia64.h, config/ip2k/ip2k.h, config/iq2000/iq2000.h,
config/iq2000/iq2000.c, config/m32r/m32r.h, config/m68hc11/m68hc11.h,
config/m68k/m68k.h, config/mcore/mcore.h, config/mips/mips.h,
config/mmix/mmix.h, config/mn10300/mn10300.h, config/ns32k/ns32k.h,
config/pa/pa.h, config/pdp11/pdp11.h config/s390/s390.h,
config/sh/sh.h, config/sparc/sparc.h, config/stormy16/stormy16.h,
config/v850/v850.h, config/vax/vax.h, config/xtensa/xtensa.h: Likewise.
From-SVN: r77380
Diffstat (limited to 'gcc/config')
37 files changed, 54 insertions, 57 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index b46197f1bbd..4c0053f4391 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -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. */ diff --git a/gcc/config/alpha/unicosmk.h b/gcc/config/alpha/unicosmk.h index a86f3c867d2..d1dfe912622 100644 --- a/gcc/config/alpha/unicosmk.h +++ b/gcc/config/alpha/unicosmk.h @@ -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; \ diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h index 0a2e516127e..f7058f3ff39 100644 --- a/gcc/config/alpha/vms.h +++ b/gcc/config/alpha/vms.h @@ -172,7 +172,7 @@ typedef struct {int num_args; enum avms_arg_type atypes[6];} avms_arg_info; 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; diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index 42441d837dc..cdd9ba29207 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -623,7 +623,7 @@ extern enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER]; /* 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. */ diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index d2986ff4928..26c45269096 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1875,7 +1875,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 diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index 64884281928..01ca6047956 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -381,7 +381,8 @@ typedef struct avr_args { int regno; /* next available register number */ } CUMULATIVE_ARGS; -#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) #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ (function_arg_advance (&CUM, MODE, TYPE, NAMED)) diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h index 1725b796a6e..35680b35d8c 100644 --- a/gcc/config/c4x/c4x.h +++ b/gcc/config/c4x/c4x.h @@ -1114,7 +1114,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) \ diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index a999e04b6bd..5110f9adbfb 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -956,7 +956,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) \ diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h index 29753016cf9..0ab0e72c330 100644 --- a/gcc/config/fr30/fr30.h +++ b/gcc/config/fr30/fr30.h @@ -759,7 +759,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 diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h index df5ae079372..828e8a326d1 100644 --- a/gcc/config/frv/frv.h +++ b/gcc/config/frv/frv.h @@ -1940,7 +1940,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 diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index c21eff1e5e9..e2ba3078ee3 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -665,7 +665,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 diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 46bb52277ed..482a8407ef5 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1747,7 +1747,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 diff --git a/gcc/config/i860/i860.h b/gcc/config/i860/i860.h index 61db1fc093c..354df729010 100644 --- a/gcc/config/i860/i860.h +++ b/gcc/config/i860/i860.h @@ -464,7 +464,7 @@ struct cumulative_args { int ints, floats; }; 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) diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index cc218385756..279500ee750 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -1338,7 +1338,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; \ diff --git a/gcc/config/ip2k/ip2k.h b/gcc/config/ip2k/ip2k.h index 1ed494fa2d9..8c9a66c89d4 100644 --- a/gcc/config/ip2k/ip2k.h +++ b/gcc/config/ip2k/ip2k.h @@ -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) diff --git a/gcc/config/iq2000/iq2000.c b/gcc/config/iq2000/iq2000.c index 0490072dcbd..ca48c915d1d 100644 --- a/gcc/config/iq2000/iq2000.c +++ b/gcc/config/iq2000/iq2000.c @@ -2333,7 +2333,7 @@ iq2000_expand_prologue (void) variable arguments. This is only needed if store_args_on_stack is true. */ - INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0); + INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0, 0); regno = GP_ARG_FIRST; for (cur_arg = fnargs; cur_arg != 0; cur_arg = next_arg) diff --git a/gcc/config/iq2000/iq2000.h b/gcc/config/iq2000/iq2000.h index d4a31023e5c..a69096b4464 100644 --- a/gcc/config/iq2000/iq2000.h +++ b/gcc/config/iq2000/iq2000.h @@ -466,7 +466,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) \ diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 3ecfc8f2dd2..00bdad63e98 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1044,7 +1044,7 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER]; /* 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. */ diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h index 8c0dd19a44d..4dee10644c7 100644 --- a/gcc/config/m68hc11/m68hc11.h +++ b/gcc/config/m68hc11/m68hc11.h @@ -1070,7 +1070,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 diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 5ae893ede9a..86742fc49c1 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -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 diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h index 56d311c49b0..69558291b3e 100644 --- a/gcc/config/mcore/mcore.h +++ b/gcc/config/mcore/mcore.h @@ -700,7 +700,7 @@ extern const enum reg_class reg_class_from_letter[]; 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 diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 6b137e422bb..d899143967a 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2287,7 +2287,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 diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h index f628f278cf5..4cb3075adbe 100644 --- a/gcc/config/mmix/mmix.h +++ b/gcc/config/mmix/mmix.h @@ -737,7 +737,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) \ diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index f3eb753f33b..8508838124e 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -560,7 +560,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 diff --git a/gcc/config/ns32k/ns32k.h b/gcc/config/ns32k/ns32k.h index 96a6a37a167..a31eba61cf2 100644 --- a/gcc/config/ns32k/ns32k.h +++ b/gcc/config/ns32k/ns32k.h @@ -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 diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 95fb2f2caa2..944917fb6d2 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -785,7 +785,7 @@ struct hppa_args {int words, nargs_prototype, incoming, indirect; }; 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), \ diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h index d54146fa005..725fe25e0a0 100644 --- a/gcc/config/pdp11/pdp11.h +++ b/gcc/config/pdp11/pdp11.h @@ -591,7 +591,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 diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h index 2dcdd0df34e..1121e309db9 100644 --- a/gcc/config/rs6000/rs6000-protos.h +++ b/gcc/config/rs6000/rs6000-protos.h @@ -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 */ diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 27aef803b72..1db36b17f2e 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3836,7 +3836,8 @@ rs6000_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED) 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; @@ -3853,17 +3854,9 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype, && (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 @@ -8369,10 +8362,10 @@ addrs_ok_for_quad_peep (rtx addr1, rtx addr2) } /* Make sure the second address is a (mem (plus (reg) (const_int))) - or if it is (mem (reg)) then make sure that offset1 is -8 and the same - register as addr1. */ + or if it is (mem (reg)) then make sure that offset1 is -8 and the same + register as addr1. */ if (offset1 == -8 && GET_CODE (addr2) == REG && reg1 == REGNO (addr2)) - return 1; + return 1; if (GET_CODE (addr2) != PLUS) return 0; diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 7b87f59bdbb..8ca547ada50 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1767,19 +1767,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. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index d3c903f5e80..1acdeadfd6a 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -8958,7 +8958,7 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED, 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; diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index b83a24eb568..c3677977bd4 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1820,7 +1820,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; \ @@ -1851,7 +1851,7 @@ struct sh_args { #define INIT_CUMULATIVE_LIBCALL_ARGS(CUM, MODE, LIBNAME) \ do { \ - INIT_CUMULATIVE_ARGS ((CUM), NULL_TREE, (LIBNAME), 0); \ + INIT_CUMULATIVE_ARGS ((CUM), NULL_TREE, (LIBNAME), 0, 0); \ (CUM).call_cookie \ = (CALL_COOKIE_RET_TRAMP \ (TARGET_SHCOMPACT && GET_MODE_SIZE (MODE) > 4 \ @@ -1860,7 +1860,7 @@ struct sh_args { #define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \ do { \ - INIT_CUMULATIVE_ARGS ((CUM), (FNTYPE), (LIBNAME), 0); \ + INIT_CUMULATIVE_ARGS ((CUM), (FNTYPE), (LIBNAME), 0, 0); \ (CUM).outgoing = 0; \ } while (0) diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index bfe3e32f227..81a1be3b0ed 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1673,7 +1673,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 diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h index 726ef4b313d..09584adca4c 100644 --- a/gcc/config/stormy16/stormy16.h +++ b/gcc/config/stormy16/stormy16.h @@ -424,7 +424,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)) diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index 4233d7258d0..74a080c83cb 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -753,7 +753,7 @@ struct cum_arg { int nbytes; int anonymous_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).nbytes = 0, (CUM).anonymous_args = 0) /* Update the data in CUM to advance over an argument diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index 3902c4b749e..c2de0f64715 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -441,7 +441,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; 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 diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index cc6d1b2d4d4..0e97229820e 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -749,7 +749,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) \ |