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
This commit is contained in:
parent
11b635fe00
commit
0f6937feff
|
@ -1,3 +1,32 @@
|
|||
2004-02-06 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* 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.
|
||||
|
||||
2004-02-06 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* genemit.c (gen_exp) [CONST_INT]: Use const_int_rtx whenever
|
||||
|
|
18
gcc/calls.c
18
gcc/calls.c
|
@ -2400,14 +2400,6 @@ expand_call (tree exp, rtx target, int ignore)
|
|||
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
|
||||
|
@ -2439,6 +2431,14 @@ expand_call (tree exp, rtx target, int ignore)
|
|||
/* 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 fourth 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));
|
||||
|
@ -3783,7 +3783,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|
|||
#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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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; \
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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; \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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), \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -3725,7 +3725,7 @@ arguments are passed on the stack, there is no need to store anything in
|
|||
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 compiler support library function.
|
|||
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
|
||||
|
|
|
@ -1390,7 +1390,7 @@ block_move_libcall_safe_for_call_parm (void)
|
|||
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))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue