re PR middle-end/46500 (target.h includes tm.h)

PR middle-end/46500
gcc:
	* doc/tm.texi.in: Update Copyright date.
	* doc/tm.texi: Regenerate.
	* targhooks.c (default_setup_incoming_varargs): Replace
	CUMULATIVE_ARGS* argument type with cumulative_args_t.
	(default_pretend_outgoing_varargs_named): Likewise.
	(hook_pass_by_reference_must_pass_in_stack): Likewise.
	(hook_callee_copies_named): Likewise.
	(default_function_arg_advance): Likewise.
	(default_function_arg): Likewise.
	(default_function_incoming_arg): Likewise.
	(hook_bool_CUMULATIVE_ARGS_false): Likewise.
	(hook_bool_CUMULATIVE_ARGS_true): Likewise.
	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise.
	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
	(hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise.
	* targhooks.h (default_setup_incoming_varargs): Likewise.
	(default_pretend_outgoing_varargs_named): Likewise.
	(hook_pass_by_reference_must_pass_in_stack): Likewise.
	(hook_callee_copies_named): Likewise.
	(default_function_arg_advance): Likewise.
	(default_function_arg): Likewise.
	(default_function_incoming_arg): Likewise.
	(hook_bool_CUMULATIVE_ARGS_false): Likewise.
	(hook_bool_CUMULATIVE_ARGS_true): Likewise.
	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise.
	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
	(hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise.
	* target.def (pass_by_reference): Likewise.
	(setup_incoming_varargs, strict_argument_naming): Likewise.
	(pretend_outgoing_varargs_named, callee_copies): Likewise.
	(arg_partial_bytes, function_arg_advance, function_arg): Likewise.
	(function_incoming_arg): Likewise.
	* target.h: Don't include "tm.h" .
	(cumulative_args_t): New typedef.
	[GCC_TM_H] (get_cumulative_args): New static inline function.
	[GCC_TM_H] (pack_cumulative_args): Likewise.
	* config/alpha/alpha.c (alpha_function_arg): Replace CUMULATIVE_ARGS*
	argument type with cumulative_args_t.
	(alpha_function_arg_advance, alpha_arg_partial_bytes): Likewise.
	(alpha_pass_by_reference, alpha_setup_incoming_varargs): Likewise.
	* config/frv/frv.c (frv_setup_incoming_varargs): Likewise.
	(frv_arg_partial_bytes, frv_function_arg): Likewise.
	(frv_function_incoming_arg, frv_function_arg_advance): Likewise.
	(frv_function_arg_1): Likewise.
	* config/s390/s390.c (s390_pass_by_reference): Likewise.
	(s390_function_arg_advance, s390_function_arg): Likewise.
	* config/m32c/m32c.c (m32c_function_arg): Likewise.
	(m32c_pass_by_reference, m32c_function_arg_advance): Likewise.
	(m32c_strict_argument_naming): Likewise.
	* config/spu/spu.c (spu_pass_by_reference, spu_function_arg): Likewise.
	(spu_function_arg_advance): Likewise.
	(spu_setup_incoming_varargs): Likewise.  Make static.
	* config/spu/spu-protos.h (spu_setup_incoming_varargs):
	Remove prototype.
	* config/sparc/sparc.c (sparc_strict_argument_naming): Replace
	CUMULATIVE_ARGS* argument type with cumulative_args_t.
	(sparc_pass_by_reference, sparc_function_arg_advance): Likewise.
	(sparc_function_arg, sparc_function_incoming_arg): Likewise.
	(sparc_arg_partial_bytes, sparc_function_arg_1): Likewise.
	* config/mep/mep.c (mep_setup_incoming_varargs): Likewise.
	(mep_pass_by_reference, mep_function_arg): Likewise.
	(mep_function_arg_advance): Likewise.
	* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
	(m32r_pass_by_reference, m32r_arg_partial_bytes): Likewise.
	(m32r_function_arg, m32r_function_arg_advance): Likewise.
	* config/rx/rx.c (rx_function_arg, rx_function_arg_advance): Likewise.
	* config/i386/i386.c (ix86_function_arg_advance): Likewise.
	(ix86_function_arg, ix86_pass_by_reference): Likewise.
	(ix86_setup_incoming_varargs): Likewise.
	* config/sh/sh.c (sh_setup_incoming_varargs): Likewise.
	(sh_strict_argument_naming): Likewise.
	(sh_pretend_outgoing_varargs_named, sh_pass_by_reference): Likewise.
	(sh_callee_copies, sh_arg_partial_bytes): Likewise.
	(sh_function_arg_advance, sh_function_arg): Likewise.
	* config/pdp11/pdp11.c (pdp11_function_arg): Likewise.
	(pdp11_function_arg_advance): Likewise.
	* config/microblaze/microblaze.c (microblaze_function_arg_advance):
	Likewise.
	(microblaze_function_arg, function_arg_partial_bytes): Likewise.
	* config/avr/avr.c (avr_function_arg): Likewise.
	(avr_function_arg_advance): Likewise.
	* config/xtensa/xtensa.c (xtensa_function_arg_advance): Likewise.
	(xtensa_function_arg, xtensa_function_incoming_arg): Likewise.
	(xtensa_function_arg_1): Likewise.
	* config/stormy16/stormy16.c (xstormy16_function_arg_advance): Likewise.
	(xstormy16_function_arg): Likewise.
	* config/fr30/fr30.c (fr30_setup_incoming_varargs): Likewise.
	(fr30_arg_partial_bytes, fr30_function_arg): Likewise.
	(fr30_function_arg_advance): Likewise.
	* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.
	(lm32_function_arg, lm32_function_arg_advance): Likewise.
	* config/moxie/moxie.c (moxie_setup_incoming_varargs): Likewise.
	(moxie_function_arg, moxie_function_arg_advance): Likewise.
	(moxie_pass_by_reference, moxie_arg_partial_bytes): Likewise.
	* config/cris/cris.c (cris_setup_incoming_varargs): Likewise.
	(cris_pass_by_reference, cris_arg_partial_bytes): Likewise.
	(cris_function_arg, cris_function_incoming_arg): Likewise.
	(cris_function_arg_advance, cris_function_arg_1): Likewise.
	* config/iq2000/iq2000.c (iq2000_setup_incoming_varargs): Likewise.
	(iq2000_pass_by_reference, iq2000_arg_partial_bytes): Likewise.
	(iq2000_function_arg, iq2000_function_arg_advance): Likewise.
	* config/mn10300/mn10300.c (mn10300_pass_by_reference): Likewise.
	(mn10300_function_arg, mn10300_function_arg_advance): Likewise.
	(mn10300_arg_partial_bytes): Likewise.
	* config/ia64/ia64.c (ia64_setup_incoming_varargs): Likewise.
	(ia64_arg_partial_bytes, ia64_function_arg): Likewise.
	(ia64_function_incoming_arg, ia64_function_arg_advance): Likewise.
	(ia64_function_arg_1): Likewise.
	* config/m68k/m68k.c (m68k_function_arg_advance): Likewise.
	(m68k_function_arg): Likewise.
	* config/rs6000/rs6000.c (rs6000_function_arg_advance): Likewise.
	(rs6000_function_arg, setup_incoming_varargs): Likewise.
	(rs6000_pass_by_reference, rs6000_arg_partial_bytes): Likewise.
	* config/picochip/picochip.c (picochip_arg_partial_bytes): Likewise.
	(picochip_function_arg, picochip_incoming_function_arg): Likewise.
	(picochip_arg_advance): Likewise.
	* config/mcore/mcore.c (mcore_setup_incoming_varargs): Likewise.
	(mcore_arg_partial_bytes, mcore_function_arg): Likewise.
	(mcore_function_arg_advance): Likewise.
	* config/score/score.c (score_pass_by_reference): Likewise.
	(score_function_arg_advance): Likewise.
	(score_arg_partial_bytes): Likewise.  Make static.
	* config/score/score-protos.h (score_arg_partial_bytes): Don't declare.
	* config/arm/arm.c (arm_arg_partial_bytes): Replace
	CUMULATIVE_ARGS* argument type with cumulative_args_t.
	(arm_function_arg, arm_function_arg_advance): Likewise.
	(arm_setup_incoming_varargs, arm_pass_by_reference): Likewise.
	* config/pa/pa.c (pa_pass_by_reference): Likewise.
	(pa_arg_partial_bytes, pa_function_arg_advance): Likewise.
	(pa_function_arg): Likewise.
	* config/mips/mips.c (mips_strict_argument_naming): Likewise.
	(mips_function_arg, mips_function_arg_advance): Likewise.
	(mips_arg_partial_bytes, mips_pass_by_reference): Likewise.
	(mips_callee_copies, mips_setup_incoming_varargs): Likewise.
	* config/vax/vax.c (vax_function_arg): Likewise.
	(vax_function_arg_advance): Likewise.
	* config/h8300/h8300.c (h8300_function_arg): Likewise.
	(h8300_function_arg_advance): Likewise.
	* config/v850/v850.c (v850_pass_by_reference): Likewise.
	(v850_strict_argument_naming, v850_function_arg): Likewise.
	(v850_arg_partial_bytes, v850_function_arg_advance): Likewise.
	(v850_setup_incoming_varargs): Likewise.
	* config/mmix/mmix.c (mmix_setup_incoming_varargs): Likewise.
	(mmix_function_arg_advance, mmix_function_incoming_arg): Likewise.
	(mmix_function_arg, mmix_pass_by_reference): Likewise.
	(mmix_function_arg_1): Replace const CUMULATIVE_ARGS* argument type
	with const void *.
	* config/bfin/bfin.c (setup_incoming_varargs): Replace
	CUMULATIVE_ARGS* argument type with cumulative_args_t.
	(bfin_function_arg_advance, bfin_function_arg): Likewise.
	(bfin_arg_partial_bytes, bfin_pass_by_reference): Likewise.
	* calls.c (emit_call_1): Change type of args_so_far to
	cumulative_args_t.  Changed all callers.
	(initialize_argument_information): Likewise.
	(expand_call, emit_library_call_value_1): Use pack_cumulative_args.
	* dse.c (get_call_args): Likewise.
	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
	* function.c (pass_by_reference, reference_callee_copied): Likewise.
	(struct assign_parm_data_all): Rename args_so_far to args_so_far_v.
	New member args_so_far_v.  Changed all users.
	* var-tracking.c (prepare_call_arguments): Use pack_cumulative_args.
	* config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise.
	* config/mips/mips.c (mips_output_args_xfer): Likewise.
	* config/s390/s390.c (s390_call_saved_register_used): Likewise.
	* config/sh/sh.c (sh_output_mi_thunk): Likewise.
	* config/microblaze/microblaze.c (microblaze_expand_prologue): Likewise.
	* config/m32r/m32r.c (m32r_return_in_memory): Adjust for changed
	m32r_pass_by_reference.
gcc/ada:
	* gcc-interface/decl.c (gnat_to_gnu_param): Use pack_cumulative_args.

From-SVN: r175103
This commit is contained in:
Joern Rennecke 2011-06-16 13:45:47 +00:00 committed by Joern Rennecke
parent 5131223306
commit d5cc91810e
51 changed files with 824 additions and 430 deletions

View File

@ -1,3 +1,175 @@
2010-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
PR middle-end/46500
* doc/tm.texi.in: Update Copyright date.
* doc/tm.texi: Regenerate.
* targhooks.c (default_setup_incoming_varargs): Replace
CUMULATIVE_ARGS* argument type with cumulative_args_t.
(default_pretend_outgoing_varargs_named): Likewise.
(hook_pass_by_reference_must_pass_in_stack): Likewise.
(hook_callee_copies_named): Likewise.
(default_function_arg_advance): Likewise.
(default_function_arg): Likewise.
(default_function_incoming_arg): Likewise.
(hook_bool_CUMULATIVE_ARGS_false): Likewise.
(hook_bool_CUMULATIVE_ARGS_true): Likewise.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
(hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise.
* targhooks.h (default_setup_incoming_varargs): Likewise.
(default_pretend_outgoing_varargs_named): Likewise.
(hook_pass_by_reference_must_pass_in_stack): Likewise.
(hook_callee_copies_named): Likewise.
(default_function_arg_advance): Likewise.
(default_function_arg): Likewise.
(default_function_incoming_arg): Likewise.
(hook_bool_CUMULATIVE_ARGS_false): Likewise.
(hook_bool_CUMULATIVE_ARGS_true): Likewise.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
(hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise.
* target.def (pass_by_reference): Likewise.
(setup_incoming_varargs, strict_argument_naming): Likewise.
(pretend_outgoing_varargs_named, callee_copies): Likewise.
(arg_partial_bytes, function_arg_advance, function_arg): Likewise.
(function_incoming_arg): Likewise.
* target.h: Don't include "tm.h" .
(cumulative_args_t): New typedef.
[GCC_TM_H] (get_cumulative_args): New static inline function.
[GCC_TM_H] (pack_cumulative_args): Likewise.
* config/alpha/alpha.c (alpha_function_arg): Replace CUMULATIVE_ARGS*
argument type with cumulative_args_t.
(alpha_function_arg_advance, alpha_arg_partial_bytes): Likewise.
(alpha_pass_by_reference, alpha_setup_incoming_varargs): Likewise.
* config/frv/frv.c (frv_setup_incoming_varargs): Likewise.
(frv_arg_partial_bytes, frv_function_arg): Likewise.
(frv_function_incoming_arg, frv_function_arg_advance): Likewise.
(frv_function_arg_1): Likewise.
* config/s390/s390.c (s390_pass_by_reference): Likewise.
(s390_function_arg_advance, s390_function_arg): Likewise.
* config/m32c/m32c.c (m32c_function_arg): Likewise.
(m32c_pass_by_reference, m32c_function_arg_advance): Likewise.
(m32c_strict_argument_naming): Likewise.
* config/spu/spu.c (spu_pass_by_reference, spu_function_arg): Likewise.
(spu_function_arg_advance): Likewise.
(spu_setup_incoming_varargs): Likewise. Make static.
* config/spu/spu-protos.h (spu_setup_incoming_varargs):
Remove prototype.
* config/sparc/sparc.c (sparc_strict_argument_naming): Replace
CUMULATIVE_ARGS* argument type with cumulative_args_t.
(sparc_pass_by_reference, sparc_function_arg_advance): Likewise.
(sparc_function_arg, sparc_function_incoming_arg): Likewise.
(sparc_arg_partial_bytes, sparc_function_arg_1): Likewise.
* config/mep/mep.c (mep_setup_incoming_varargs): Likewise.
(mep_pass_by_reference, mep_function_arg): Likewise.
(mep_function_arg_advance): Likewise.
* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
(m32r_pass_by_reference, m32r_arg_partial_bytes): Likewise.
(m32r_function_arg, m32r_function_arg_advance): Likewise.
* config/rx/rx.c (rx_function_arg, rx_function_arg_advance): Likewise.
* config/i386/i386.c (ix86_function_arg_advance): Likewise.
(ix86_function_arg, ix86_pass_by_reference): Likewise.
(ix86_setup_incoming_varargs): Likewise.
* config/sh/sh.c (sh_setup_incoming_varargs): Likewise.
(sh_strict_argument_naming): Likewise.
(sh_pretend_outgoing_varargs_named, sh_pass_by_reference): Likewise.
(sh_callee_copies, sh_arg_partial_bytes): Likewise.
(sh_function_arg_advance, sh_function_arg): Likewise.
* config/pdp11/pdp11.c (pdp11_function_arg): Likewise.
(pdp11_function_arg_advance): Likewise.
* config/microblaze/microblaze.c (microblaze_function_arg_advance):
Likewise.
(microblaze_function_arg, function_arg_partial_bytes): Likewise.
* config/avr/avr.c (avr_function_arg): Likewise.
(avr_function_arg_advance): Likewise.
* config/xtensa/xtensa.c (xtensa_function_arg_advance): Likewise.
(xtensa_function_arg, xtensa_function_incoming_arg): Likewise.
(xtensa_function_arg_1): Likewise.
* config/stormy16/stormy16.c (xstormy16_function_arg_advance): Likewise.
(xstormy16_function_arg): Likewise.
* config/fr30/fr30.c (fr30_setup_incoming_varargs): Likewise.
(fr30_arg_partial_bytes, fr30_function_arg): Likewise.
(fr30_function_arg_advance): Likewise.
* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.
(lm32_function_arg, lm32_function_arg_advance): Likewise.
* config/moxie/moxie.c (moxie_setup_incoming_varargs): Likewise.
(moxie_function_arg, moxie_function_arg_advance): Likewise.
(moxie_pass_by_reference, moxie_arg_partial_bytes): Likewise.
* config/cris/cris.c (cris_setup_incoming_varargs): Likewise.
(cris_pass_by_reference, cris_arg_partial_bytes): Likewise.
(cris_function_arg, cris_function_incoming_arg): Likewise.
(cris_function_arg_advance, cris_function_arg_1): Likewise.
* config/iq2000/iq2000.c (iq2000_setup_incoming_varargs): Likewise.
(iq2000_pass_by_reference, iq2000_arg_partial_bytes): Likewise.
(iq2000_function_arg, iq2000_function_arg_advance): Likewise.
* config/mn10300/mn10300.c (mn10300_pass_by_reference): Likewise.
(mn10300_function_arg, mn10300_function_arg_advance): Likewise.
(mn10300_arg_partial_bytes): Likewise.
* config/ia64/ia64.c (ia64_setup_incoming_varargs): Likewise.
(ia64_arg_partial_bytes, ia64_function_arg): Likewise.
(ia64_function_incoming_arg, ia64_function_arg_advance): Likewise.
(ia64_function_arg_1): Likewise.
* config/m68k/m68k.c (m68k_function_arg_advance): Likewise.
(m68k_function_arg): Likewise.
* config/rs6000/rs6000.c (rs6000_function_arg_advance): Likewise.
(rs6000_function_arg, setup_incoming_varargs): Likewise.
(rs6000_pass_by_reference, rs6000_arg_partial_bytes): Likewise.
* config/picochip/picochip.c (picochip_arg_partial_bytes): Likewise.
(picochip_function_arg, picochip_incoming_function_arg): Likewise.
(picochip_arg_advance): Likewise.
* config/mcore/mcore.c (mcore_setup_incoming_varargs): Likewise.
(mcore_arg_partial_bytes, mcore_function_arg): Likewise.
(mcore_function_arg_advance): Likewise.
* config/score/score.c (score_pass_by_reference): Likewise.
(score_function_arg_advance): Likewise.
(score_arg_partial_bytes): Likewise. Make static.
* config/score/score-protos.h (score_arg_partial_bytes): Don't declare.
* config/arm/arm.c (arm_arg_partial_bytes): Replace
CUMULATIVE_ARGS* argument type with cumulative_args_t.
(arm_function_arg, arm_function_arg_advance): Likewise.
(arm_setup_incoming_varargs, arm_pass_by_reference): Likewise.
* config/pa/pa.c (pa_pass_by_reference): Likewise.
(pa_arg_partial_bytes, pa_function_arg_advance): Likewise.
(pa_function_arg): Likewise.
* config/mips/mips.c (mips_strict_argument_naming): Likewise.
(mips_function_arg, mips_function_arg_advance): Likewise.
(mips_arg_partial_bytes, mips_pass_by_reference): Likewise.
(mips_callee_copies, mips_setup_incoming_varargs): Likewise.
* config/vax/vax.c (vax_function_arg): Likewise.
(vax_function_arg_advance): Likewise.
* config/h8300/h8300.c (h8300_function_arg): Likewise.
(h8300_function_arg_advance): Likewise.
* config/v850/v850.c (v850_pass_by_reference): Likewise.
(v850_strict_argument_naming, v850_function_arg): Likewise.
(v850_arg_partial_bytes, v850_function_arg_advance): Likewise.
(v850_setup_incoming_varargs): Likewise.
* config/mmix/mmix.c (mmix_setup_incoming_varargs): Likewise.
(mmix_function_arg_advance, mmix_function_incoming_arg): Likewise.
(mmix_function_arg, mmix_pass_by_reference): Likewise.
(mmix_function_arg_1): Replace const CUMULATIVE_ARGS* argument type
with const void *.
* config/bfin/bfin.c (setup_incoming_varargs): Replace
CUMULATIVE_ARGS* argument type with cumulative_args_t.
(bfin_function_arg_advance, bfin_function_arg): Likewise.
(bfin_arg_partial_bytes, bfin_pass_by_reference): Likewise.
* calls.c (emit_call_1): Change type of args_so_far to
cumulative_args_t. Changed all callers.
(initialize_argument_information): Likewise.
(expand_call, emit_library_call_value_1): Use pack_cumulative_args.
* dse.c (get_call_args): Likewise.
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
* function.c (pass_by_reference, reference_callee_copied): Likewise.
(struct assign_parm_data_all): Rename args_so_far to args_so_far_v.
New member args_so_far_v. Changed all users.
* var-tracking.c (prepare_call_arguments): Use pack_cumulative_args.
* config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise.
* config/mips/mips.c (mips_output_args_xfer): Likewise.
* config/s390/s390.c (s390_call_saved_register_used): Likewise.
* config/sh/sh.c (sh_output_mi_thunk): Likewise.
* config/microblaze/microblaze.c (microblaze_expand_prologue): Likewise.
* config/m32r/m32r.c (m32r_return_in_memory): Adjust for changed
m32r_pass_by_reference.
2011-06-16 Ira Rosen <ira.rosen@linaro.org>
* tree-vectorizer.h (vect_recog_func_ptr): Change the first

View File

@ -1,3 +1,8 @@
2010-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
PR middle-end/46500
* gcc-interface/decl.c (gnat_to_gnu_param): Use pack_cumulative_args.
2011-06-14 Joseph Myers <joseph@codesourcery.com>
* gcc-interface/Make-lang.in (gnatbind$(exeext)): Use ggc-none.o.

View File

@ -5452,7 +5452,7 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech,
passed by reference. Pass them by explicit reference, this will
generate more debuggable code at -O0. */
if (TYPE_IS_FAT_POINTER_P (gnu_param_type)
&& targetm.calls.pass_by_reference (NULL,
&& targetm.calls.pass_by_reference (pack_cumulative_args (NULL),
TYPE_MODE (gnu_param_type),
gnu_param_type,
true))

View File

@ -125,7 +125,7 @@ static int stack_arg_under_construction;
static void emit_call_1 (rtx, tree, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
HOST_WIDE_INT, rtx, rtx, int, rtx, int,
CUMULATIVE_ARGS *);
cumulative_args_t);
static void precompute_register_parameters (int, struct arg_data *, int *);
static int store_one_arg (struct arg_data *, rtx, int, int, int);
static void store_unaligned_arguments_into_pseudos (struct arg_data *, int);
@ -136,7 +136,7 @@ static int compute_argument_block_size (int, struct args_size *, tree, tree, int
static void initialize_argument_information (int, struct arg_data *,
struct args_size *, int,
tree, tree,
tree, tree, CUMULATIVE_ARGS *, int,
tree, tree, cumulative_args_t, int,
rtx *, int *, int *, int *,
bool *, bool);
static void compute_argument_addresses (struct arg_data *, rtx, int);
@ -252,7 +252,7 @@ emit_call_1 (rtx funexp, tree fntree ATTRIBUTE_UNUSED, tree fndecl ATTRIBUTE_UNU
HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
rtx next_arg_reg ATTRIBUTE_UNUSED, rtx valreg,
int old_inhibit_defer_pop, rtx call_fusage, int ecf_flags,
CUMULATIVE_ARGS *args_so_far ATTRIBUTE_UNUSED)
cumulative_args_t args_so_far ATTRIBUTE_UNUSED)
{
rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
rtx call_insn, call, funmem;
@ -261,7 +261,7 @@ emit_call_1 (rtx funexp, tree fntree ATTRIBUTE_UNUSED, tree fndecl ATTRIBUTE_UNU
= targetm.calls.return_pops_args (fndecl, funtype, stack_size);
#ifdef CALL_POPS_ARGS
n_popped += CALL_POPS_ARGS (* args_so_far);
n_popped += CALL_POPS_ARGS (*get_cumulative_args (args_so_far));
#endif
/* Ensure address is valid. SYMBOL_REF is already valid, so no need,
@ -967,12 +967,13 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
int n_named_args ATTRIBUTE_UNUSED,
tree exp, tree struct_value_addr_value,
tree fndecl, tree fntype,
CUMULATIVE_ARGS *args_so_far,
cumulative_args_t args_so_far,
int reg_parm_stack_space,
rtx *old_stack_level, int *old_pending_adj,
int *must_preallocate, int *ecf_flags,
bool *may_tailcall, bool call_from_thunk_p)
{
CUMULATIVE_ARGS *args_so_far_pnt = get_cumulative_args (args_so_far);
location_t loc = EXPR_LOCATION (exp);
/* 1 if scanning parms front to back, -1 if scanning back to front. */
int inc;
@ -1064,14 +1065,14 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
with those made by function.c. */
/* See if this argument should be passed by invisible reference. */
if (pass_by_reference (args_so_far, TYPE_MODE (type),
if (pass_by_reference (args_so_far_pnt, TYPE_MODE (type),
type, argpos < n_named_args))
{
bool callee_copies;
tree base;
callee_copies
= reference_callee_copied (args_so_far, TYPE_MODE (type),
= reference_callee_copied (args_so_far_pnt, TYPE_MODE (type),
type, argpos < n_named_args);
/* If we're compiling a thunk, pass through invisible references
@ -2005,7 +2006,8 @@ expand_call (tree exp, rtx target, int ignore)
/* Size of arguments before any adjustments (such as rounding). */
int unadjusted_args_size;
/* Data on reg parms scanned so far. */
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
/* Nonzero if a reg parm has been scanned. */
int reg_parm_seen;
/* Nonzero if this is an indirect function call. */
@ -2243,7 +2245,8 @@ expand_call (tree exp, rtx target, int ignore)
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);
INIT_CUMULATIVE_ARGS (args_so_far_v, funtype, NULL_RTX, fndecl, n_named_args);
args_so_far = pack_cumulative_args (&args_so_far_v);
/* Now possibly adjust the number of named args.
Normally, don't include the last named arg if anonymous args follow.
@ -2264,10 +2267,10 @@ expand_call (tree exp, rtx target, int ignore)
registers, so we must force them into memory. */
if (type_arg_types != 0
&& targetm.calls.strict_argument_naming (&args_so_far))
&& targetm.calls.strict_argument_naming (args_so_far))
;
else if (type_arg_types != 0
&& ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
&& ! targetm.calls.pretend_outgoing_varargs_named (args_so_far))
/* Don't include the last named arg. */
--n_named_args;
else
@ -2283,7 +2286,7 @@ expand_call (tree exp, rtx target, int ignore)
initialize_argument_information (num_actuals, args, &args_size,
n_named_args, exp,
structure_value_addr_value, fndecl, fntype,
&args_so_far, reg_parm_stack_space,
args_so_far, reg_parm_stack_space,
&old_stack_level, &old_pending_adj,
&must_preallocate, &flags,
&try_tail_call, CALL_FROM_THUNK_P (exp));
@ -2873,12 +2876,12 @@ expand_call (tree exp, rtx target, int ignore)
/* 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,
next_arg_reg = targetm.calls.function_incoming_arg (args_so_far,
VOIDmode,
void_type_node,
true);
else
next_arg_reg = targetm.calls.function_arg (&args_so_far,
next_arg_reg = targetm.calls.function_arg (args_so_far,
VOIDmode, void_type_node,
true);
@ -2893,7 +2896,7 @@ expand_call (tree exp, rtx target, int ignore)
emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
adjusted_args_size.constant, struct_value_size,
next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
flags, & args_so_far);
flags, args_so_far);
/* If the call setup or the call itself overlaps with anything
of the argument setup we probably clobbered our call address.
@ -3324,7 +3327,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
int inc;
int count;
rtx argblock = 0;
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
struct arg
{
rtx value;
@ -3436,10 +3440,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
memset (argvec, 0, (nargs + 1) * sizeof (struct arg));
#ifdef INIT_CUMULATIVE_LIBCALL_ARGS
INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far, outmode, fun);
INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far_v, outmode, fun);
#else
INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0, nargs);
INIT_CUMULATIVE_ARGS (args_so_far_v, NULL_TREE, fun, 0, nargs);
#endif
args_so_far = pack_cumulative_args (&args_so_far_v);
args_size.constant = 0;
args_size.var = 0;
@ -3466,9 +3471,9 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
argvec[count].mode = Pmode;
argvec[count].partial = 0;
argvec[count].reg = targetm.calls.function_arg (&args_so_far,
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,
gcc_assert (targetm.calls.arg_partial_bytes (args_so_far, Pmode,
NULL_TREE, 1) == 0);
locate_and_pad_parm (Pmode, NULL_TREE,
@ -3483,7 +3488,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|| 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);
targetm.calls.function_arg_advance (args_so_far, Pmode, (tree) 0, true);
count++;
}
@ -3504,11 +3509,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
&& !(CONSTANT_P (val) && targetm.legitimate_constant_p (mode, val)))
val = force_operand (val, NULL_RTX);
if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
if (pass_by_reference (&args_so_far_v, mode, NULL_TREE, 1))
{
rtx slot;
int must_copy
= !reference_callee_copied (&args_so_far, mode, NULL_TREE, 1);
= !reference_callee_copied (&args_so_far_v, mode, NULL_TREE, 1);
/* If this was a CONST function, it is now PURE since it now
reads memory. */
@ -3543,11 +3548,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
mode = promote_function_mode (NULL_TREE, mode, &unsigned_p, NULL_TREE, 0);
argvec[count].mode = mode;
argvec[count].value = convert_modes (mode, GET_MODE (val), val, unsigned_p);
argvec[count].reg = targetm.calls.function_arg (&args_so_far, mode,
argvec[count].reg = targetm.calls.function_arg (args_so_far, mode,
NULL_TREE, true);
argvec[count].partial
= targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1);
= targetm.calls.arg_partial_bytes (args_so_far, mode, NULL_TREE, 1);
locate_and_pad_parm (mode, NULL_TREE,
#ifdef STACK_PARMS_IN_REG_PARM_AREA
@ -3564,7 +3569,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
|| 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);
targetm.calls.function_arg_advance (args_so_far, mode, (tree) 0, true);
}
/* If this machine requires an external definition for library
@ -3876,10 +3881,10 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
build_function_type (tfom, NULL_TREE),
original_args_size.constant, args_size.constant,
struct_value_size,
targetm.calls.function_arg (&args_so_far,
targetm.calls.function_arg (args_so_far,
VOIDmode, void_type_node, true),
valreg,
old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
old_inhibit_defer_pop + 1, call_fusage, flags, args_so_far);
/* For calls to `setjmp', etc., inform function.c:setjmp_warnings
that it should complain if nonvolatile values are live. For

View File

@ -5380,9 +5380,10 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
and the rest are pushed. */
static rtx
alpha_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
alpha_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int basereg;
int num_args;
@ -5441,9 +5442,10 @@ alpha_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
alpha_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
alpha_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
bool onstack = targetm.calls.must_pass_in_stack (mode, type);
int increment = onstack ? 6 : ALPHA_ARG_SIZE (mode, type, named);
@ -5457,12 +5459,13 @@ alpha_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static int
alpha_arg_partial_bytes (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
alpha_arg_partial_bytes (cumulative_args_t cum_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
int words = 0;
CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED = get_cumulative_args (cum_v);
#if TARGET_ABI_OPEN_VMS
if (cum->num_args < 6
@ -5537,7 +5540,7 @@ alpha_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
/* Return true if TYPE should be passed by invisible reference. */
static bool
alpha_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
alpha_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -5875,13 +5878,14 @@ escapes:
variable number of arguments. */
static void
alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
alpha_setup_incoming_varargs (cumulative_args_t pcum, enum machine_mode mode,
tree type, int *pretend_size, int no_rtl)
{
CUMULATIVE_ARGS cum = *pcum;
CUMULATIVE_ARGS cum = *get_cumulative_args (pcum);
/* Skip the current argument. */
targetm.calls.function_arg_advance (&cum, mode, type, true);
targetm.calls.function_arg_advance (pack_cumulative_args (&cum), mode, type,
true);
#if TARGET_ABI_OPEN_VMS
/* For VMS, we allocate space for all 6 arg registers plus a count.

View File

@ -166,11 +166,11 @@ static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
static tree arm_builtin_decl (unsigned, bool);
static void emit_constant_insn (rtx cond, rtx pattern);
static rtx emit_set_insn (rtx, rtx);
static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int arm_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx arm_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx arm_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void arm_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void arm_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int arm_function_arg_boundary (enum machine_mode, const_tree);
static rtx aapcs_allocate_return_reg (enum machine_mode, const_tree,
@ -188,9 +188,9 @@ static void arm_encode_section_info (tree, rtx, int);
static void arm_file_end (void);
static void arm_file_start (void);
static void arm_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void arm_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree, int *, int);
static bool arm_pass_by_reference (CUMULATIVE_ARGS *,
static bool arm_pass_by_reference (cumulative_args_t,
enum machine_mode, const_tree, bool);
static bool arm_promote_prototypes (const_tree);
static bool arm_default_short_enums (void);
@ -4389,9 +4389,10 @@ arm_needs_doubleword_align (enum machine_mode mode, const_tree type)
indeed make it pass in the stack if necessary). */
static rtx
arm_function_arg (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
arm_function_arg (cumulative_args_t pcum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
int nregs;
/* Handle the special case quickly. Pick an arbitrary value for op2 of
@ -4449,9 +4450,10 @@ arm_function_arg_boundary (enum machine_mode mode, const_tree type)
}
static int
arm_arg_partial_bytes (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
arm_arg_partial_bytes (cumulative_args_t pcum_v, enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
int nregs = pcum->nregs;
if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
@ -4476,9 +4478,11 @@ arm_arg_partial_bytes (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
arm_function_arg_advance (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
arm_function_arg_advance (cumulative_args_t pcum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
{
aapcs_layout_arg (pcum, mode, type, named);
@ -4512,7 +4516,7 @@ arm_function_arg_advance (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
extension to the ARM ABI. */
static bool
arm_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
arm_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
@ -21933,12 +21937,13 @@ arm_output_load_gr (rtx *operands)
that way. */
static void
arm_setup_incoming_varargs (CUMULATIVE_ARGS *pcum,
arm_setup_incoming_varargs (cumulative_args_t pcum_v,
enum machine_mode mode,
tree type,
int *pretend_size,
int second_time ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
int nregs;
cfun->machine->uses_anonymous_args = 1;

View File

@ -102,9 +102,9 @@ static unsigned int avr_case_values_threshold (void);
static bool avr_frame_pointer_required_p (void);
static bool avr_can_eliminate (const int, const int);
static bool avr_class_likely_spilled_p (reg_class_t c);
static rtx avr_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx avr_function_arg (cumulative_args_t , enum machine_mode,
const_tree, bool);
static void avr_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void avr_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void avr_help (void);
static bool avr_function_ok_for_sibcall (tree, tree);
@ -1743,9 +1743,10 @@ avr_num_arg_regs (enum machine_mode mode, const_tree type)
in a register, and which register. */
static rtx
avr_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
avr_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int bytes = avr_num_arg_regs (mode, type);
if (cum->nregs && bytes <= cum->nregs)
@ -1758,9 +1759,10 @@ avr_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
in the argument list. */
static void
avr_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
avr_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int bytes = avr_num_arg_regs (mode, type);
cum->nregs -= bytes;

View File

@ -560,7 +560,7 @@ expand_epilogue_reg_restore (rtx spreg, bool saveall, bool is_inthandler)
- now, the vastart pointer can access all arguments from the stack. */
static void
setup_incoming_varargs (CUMULATIVE_ARGS *cum,
setup_incoming_varargs (cumulative_args_t cum,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED, int *pretend_size,
int no_rtl)
@ -576,7 +576,7 @@ setup_incoming_varargs (CUMULATIVE_ARGS *cum,
if they are in the first 3 words. We assume at least 1 named argument
exists, so we never generate [ARGP] = R0 here. */
for (i = cum->words + 1; i < max_arg_registers; i++)
for (i = get_cumulative_args (cum)->words + 1; i < max_arg_registers; i++)
{
mem = gen_rtx_MEM (Pmode,
plus_constant (arg_pointer_rtx, (i * UNITS_PER_WORD)));
@ -1647,9 +1647,10 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
(TYPE is null for libcalls where that information may not be available.) */
static void
bfin_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
bfin_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int count, bytes, words;
bytes = (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
@ -1686,9 +1687,10 @@ bfin_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
(otherwise it is an extra parameter matching an ellipsis). */
static rtx
bfin_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
bfin_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int bytes
= (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
@ -1715,13 +1717,13 @@ bfin_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
stack. */
static int
bfin_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
bfin_arg_partial_bytes (cumulative_args_t cum, enum machine_mode mode,
tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
int bytes
= (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
int bytes_left = cum->nregs * UNITS_PER_WORD;
int bytes_left = get_cumulative_args (cum)->nregs * UNITS_PER_WORD;
if (bytes == -1)
return 0;
@ -1736,7 +1738,7 @@ bfin_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Variable sized types are passed by reference. */
static bool
bfin_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
bfin_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type, bool named ATTRIBUTE_UNUSED)
{

View File

@ -98,7 +98,7 @@ static struct machine_function * cris_init_machine_status (void);
static rtx cris_struct_value_rtx (tree, int);
static void cris_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void cris_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree type, int *, int);
static int cris_initial_frame_pointer_offset (void);
@ -125,15 +125,15 @@ static int cris_register_move_cost (enum machine_mode, reg_class_t, reg_class_t)
static int cris_memory_move_cost (enum machine_mode, reg_class_t, bool);
static bool cris_rtx_costs (rtx, int, int, int *, bool);
static int cris_address_cost (rtx, bool);
static bool cris_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool cris_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int cris_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int cris_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx cris_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx cris_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx cris_function_incoming_arg (CUMULATIVE_ARGS *,
static rtx cris_function_incoming_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static void cris_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void cris_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static tree cris_md_asm_clobbers (tree, tree, tree);
@ -3676,12 +3676,14 @@ cris_struct_value_rtx (tree fntype ATTRIBUTE_UNUSED,
/* Worker function for TARGET_SETUP_INCOMING_VARARGS. */
static void
cris_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
cris_setup_incoming_varargs (cumulative_args_t ca_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
int *pretend_arg_size,
int second_time)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
if (ca->regs < CRIS_MAX_ARGS_IN_REGS)
{
int stdarg_regs = CRIS_MAX_ARGS_IN_REGS - ca->regs;
@ -3699,7 +3701,7 @@ cris_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
For cris, we pass <= 8 bytes by value, others by reference. */
static bool
cris_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
cris_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -3757,10 +3759,10 @@ cris_function_value_regno_p (const unsigned int regno)
}
static int
cris_arg_partial_bytes (CUMULATIVE_ARGS *ca, enum machine_mode mode,
cris_arg_partial_bytes (cumulative_args_t ca, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
if (ca->regs == CRIS_MAX_ARGS_IN_REGS - 1
if (get_cumulative_args (ca)->regs == CRIS_MAX_ARGS_IN_REGS - 1
&& !targetm.calls.must_pass_in_stack (mode, type)
&& CRIS_FUNCTION_ARG_SIZE (mode, type) > 4
&& CRIS_FUNCTION_ARG_SIZE (mode, type) <= 8)
@ -3770,11 +3772,13 @@ cris_arg_partial_bytes (CUMULATIVE_ARGS *ca, enum machine_mode mode,
}
static rtx
cris_function_arg_1 (const CUMULATIVE_ARGS *ca,
cris_function_arg_1 (cumulative_args_t ca_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named, bool incoming)
{
const CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
if ((!incoming || named) && ca->regs < CRIS_MAX_ARGS_IN_REGS)
return gen_rtx_REG (mode, CRIS_FIRST_ARG_REG + ca->regs);
else
@ -3785,7 +3789,7 @@ cris_function_arg_1 (const CUMULATIVE_ARGS *ca,
The void_type_node is sent as a "closing" call. */
static rtx
cris_function_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
cris_function_arg (cumulative_args_t ca, enum machine_mode mode,
const_tree type, bool named)
{
return cris_function_arg_1 (ca, mode, type, named, false);
@ -3799,7 +3803,7 @@ cris_function_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
void_type_node TYPE parameter. */
static rtx
cris_function_incoming_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
cris_function_incoming_arg (cumulative_args_t ca, enum machine_mode mode,
const_tree type, bool named)
{
return cris_function_arg_1 (ca, mode, type, named, true);
@ -3808,9 +3812,11 @@ cris_function_incoming_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
/* Worker function for TARGET_FUNCTION_ARG_ADVANCE. */
static void
cris_function_arg_advance (CUMULATIVE_ARGS *ca, enum machine_mode mode,
cris_function_arg_advance (cumulative_args_t ca_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
ca->regs += (3 + CRIS_FUNCTION_ARG_SIZE (mode, type)) / 4;
}

View File

@ -114,14 +114,14 @@ static struct fr30_frame_info current_frame_info;
/* Zero structure to initialize current_frame_info. */
static struct fr30_frame_info zero_frame_info;
static void fr30_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void fr30_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree, int *, int);
static bool fr30_must_pass_in_stack (enum machine_mode, const_tree);
static int fr30_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int fr30_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx fr30_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx fr30_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void fr30_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void fr30_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool fr30_frame_pointer_required (void);
static rtx fr30_function_value (const_tree, const_tree, bool);
@ -454,12 +454,14 @@ fr30_expand_epilogue (void)
ARG_REGS_USED_SO_FAR has *not* been updated for the last named argument
which has type TYPE and mode MODE, and we rely on this fact. */
void
fr30_setup_incoming_varargs (CUMULATIVE_ARGS *arg_regs_used_so_far,
fr30_setup_incoming_varargs (cumulative_args_t arg_regs_used_so_far_v,
enum machine_mode mode,
tree type ATTRIBUTE_UNUSED,
int *pretend_size,
int second_time ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *arg_regs_used_so_far
= get_cumulative_args (arg_regs_used_so_far_v);
int size;
/* All BLKmode values are passed by reference. */
@ -467,9 +469,10 @@ fr30_setup_incoming_varargs (CUMULATIVE_ARGS *arg_regs_used_so_far,
/* ??? This run-time test as well as the code inside the if
statement is probably unnecessary. */
if (targetm.calls.strict_argument_naming (arg_regs_used_so_far))
if (targetm.calls.strict_argument_naming (arg_regs_used_so_far_v))
/* If TARGET_STRICT_ARGUMENT_NAMING returns true, then the last named
arg must not be treated as an anonymous arg. */
/* ??? This is a pointer increment, which makes no sense. */
arg_regs_used_so_far += fr30_num_arg_regs (mode, type);
size = FR30_NUM_ARG_REGS - (* arg_regs_used_so_far);
@ -769,9 +772,11 @@ fr30_num_arg_regs (enum machine_mode mode, const_tree type)
parameters to the function. */
static int
fr30_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
fr30_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
/* Unnamed arguments, i.e. those that are prototyped as ...
are always passed on the stack.
Also check here to see if all the argument registers are full. */
@ -791,9 +796,11 @@ fr30_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static rtx
fr30_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
fr30_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (!named
|| fr30_must_pass_in_stack (mode, type)
|| *cum >= FR30_NUM_ARG_REGS)
@ -811,10 +818,10 @@ fr30_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
the stack. The compiler knows how to track the amount of stack space used
for arguments without any special help. */
static void
fr30_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
fr30_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
*cum += named * fr30_num_arg_regs (mode, type);
*get_cumulative_args (cum) += named * fr30_num_arg_regs (mode, type);
}
/*}}}*/

View File

@ -359,7 +359,7 @@ static void frv_init_libfuncs (void);
static bool frv_in_small_data_p (const_tree);
static void frv_asm_output_mi_thunk
(FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree);
static void frv_setup_incoming_varargs (CUMULATIVE_ARGS *,
static void frv_setup_incoming_varargs (cumulative_args_t,
enum machine_mode,
tree, int *, int);
static rtx frv_expand_builtin_saveregs (void);
@ -380,13 +380,13 @@ static void frv_output_const_unspec (FILE *,
static bool frv_function_ok_for_sibcall (tree, tree);
static rtx frv_struct_value_rtx (tree, int);
static bool frv_must_pass_in_stack (enum machine_mode mode, const_tree type);
static int frv_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int frv_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx frv_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx frv_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx frv_function_incoming_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx frv_function_incoming_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void frv_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void frv_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int frv_function_arg_boundary (enum machine_mode,
const_tree);
@ -2110,12 +2110,14 @@ frv_initial_elimination_offset (int from, int to)
/* Worker function for TARGET_SETUP_INCOMING_VARARGS. */
static void
frv_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
frv_setup_incoming_varargs (cumulative_args_t cum_v,
enum machine_mode mode,
tree type ATTRIBUTE_UNUSED,
int *pretend_size,
int second_time)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (TARGET_DEBUG_ARG)
fprintf (stderr,
"setup_vararg: words = %2d, mode = %4s, pretend_size = %d, second_time = %d\n",
@ -3102,10 +3104,12 @@ frv_function_arg_boundary (enum machine_mode mode ATTRIBUTE_UNUSED,
}
static rtx
frv_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
frv_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED, bool named,
bool incoming ATTRIBUTE_UNUSED)
{
const CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
enum machine_mode xmode = (mode == BLKmode) ? SImode : mode;
int arg_num = *cum;
rtx ret;
@ -3139,14 +3143,14 @@ frv_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static rtx
frv_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
frv_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
return frv_function_arg_1 (cum, mode, type, named, false);
}
static rtx
frv_function_incoming_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
frv_function_incoming_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
return frv_function_arg_1 (cum, mode, type, named, true);
@ -3163,11 +3167,13 @@ frv_function_incoming_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
for arguments without any special help. */
static void
frv_function_arg_advance (CUMULATIVE_ARGS *cum,
frv_function_arg_advance (cumulative_args_t cum_v,
enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
enum machine_mode xmode = (mode == BLKmode) ? SImode : mode;
int bytes = GET_MODE_SIZE (xmode);
int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
@ -3199,13 +3205,14 @@ frv_function_arg_advance (CUMULATIVE_ARGS *cum,
the called function. */
static int
frv_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
frv_arg_partial_bytes (cumulative_args_t cum, enum machine_mode mode,
tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
{
enum machine_mode xmode = (mode == BLKmode) ? SImode : mode;
int bytes = GET_MODE_SIZE (xmode);
int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
int arg_num = *cum;
int arg_num = *get_cumulative_args (cum);
int ret;
ret = ((arg_num <= LAST_ARG_REGNUM && arg_num + words > LAST_ARG_REGNUM+1)

View File

@ -1031,9 +1031,11 @@ h8300_pr_saveall (struct cpp_reader *pfile ATTRIBUTE_UNUSED)
case the first 3 arguments are passed in registers. */
static rtx
h8300_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
h8300_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
static const char *const hand_list[] = {
"__main",
"__cmpsi2",
@ -1102,9 +1104,11 @@ h8300_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
h8300_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
h8300_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
cum->nbytes += (mode != BLKmode
? (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD
: (int_size_in_bytes (type) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD);

View File

@ -6338,9 +6338,10 @@ function_arg_advance_ms_64 (CUMULATIVE_ARGS *cum, HOST_WIDE_INT bytes,
may not be available.) */
static void
ix86_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ix86_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
HOST_WIDE_INT bytes, words;
if (mode == BLKmode)
@ -6585,9 +6586,10 @@ function_arg_ms_64 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
ellipsis). */
static rtx
ix86_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode omode,
ix86_function_arg (cumulative_args_t cum_v, enum machine_mode omode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
enum machine_mode mode = omode;
HOST_WIDE_INT bytes, words;
rtx arg;
@ -6629,10 +6631,12 @@ ix86_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode omode,
appropriate for passing a pointer to that type. */
static bool
ix86_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
ix86_pass_by_reference (cumulative_args_t cum_v ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
/* See Windows x64 Software Convention. */
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
{
@ -7380,10 +7384,11 @@ setup_incoming_varargs_ms_64 (CUMULATIVE_ARGS *cum)
}
static void
ix86_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ix86_setup_incoming_varargs (cumulative_args_t cum_v, enum machine_mode mode,
tree type, int *pretend_size ATTRIBUTE_UNUSED,
int no_rtl)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
CUMULATIVE_ARGS next_cum;
tree fntype;
@ -7400,7 +7405,8 @@ ix86_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
For stdargs, we do want to skip the last named argument. */
next_cum = *cum;
if (stdarg_p (fntype))
ix86_function_arg_advance (&next_cum, mode, type, true);
ix86_function_arg_advance (pack_cumulative_args (&next_cum), mode, type,
true);
if (cum->call_abi == MS_ABI)
setup_incoming_varargs_ms_64 (&next_cum);

View File

@ -195,17 +195,17 @@ static void ia64_option_override (void);
static void ia64_option_default_params (void);
static bool ia64_can_eliminate (const int, const int);
static enum machine_mode hfa_element_mode (const_tree, bool);
static void ia64_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void ia64_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree, int *, int);
static int ia64_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int ia64_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx ia64_function_arg_1 (const CUMULATIVE_ARGS *, enum machine_mode,
static rtx ia64_function_arg_1 (cumulative_args_t, enum machine_mode,
const_tree, bool, bool);
static rtx ia64_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx ia64_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx ia64_function_incoming_arg (CUMULATIVE_ARGS *,
static rtx ia64_function_incoming_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static void ia64_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void ia64_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int ia64_function_arg_boundary (enum machine_mode,
const_tree);
@ -4157,14 +4157,14 @@ ia64_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
We generate the actual spill instructions during prologue generation. */
static void
ia64_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ia64_setup_incoming_varargs (cumulative_args_t cum, enum machine_mode mode,
tree type, int * pretend_size,
int second_time ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS next_cum = *cum;
CUMULATIVE_ARGS next_cum = *get_cumulative_args (cum);
/* Skip the current argument. */
ia64_function_arg_advance (&next_cum, mode, type, 1);
ia64_function_arg_advance (pack_cumulative_args (&next_cum), mode, type, 1);
if (next_cum.words < MAX_ARGUMENT_SLOTS)
{
@ -4312,9 +4312,11 @@ ia64_function_arg_offset (const CUMULATIVE_ARGS *cum,
registers. */
static rtx
ia64_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
ia64_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named, bool incoming)
{
const CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int basereg = (incoming ? GR_ARG_FIRST : AR_ARG_FIRST);
int words = ia64_function_arg_words (type, mode);
int offset = ia64_function_arg_offset (cum, type, words);
@ -4505,7 +4507,7 @@ ia64_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_FUNCION_ARG target hook. */
static rtx
ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ia64_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
return ia64_function_arg_1 (cum, mode, type, named, false);
@ -4514,7 +4516,7 @@ ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_FUNCION_INCOMING_ARG target hook. */
static rtx
ia64_function_incoming_arg (CUMULATIVE_ARGS *cum,
ia64_function_incoming_arg (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named)
{
@ -4526,9 +4528,11 @@ ia64_function_incoming_arg (CUMULATIVE_ARGS *cum,
in memory. */
static int
ia64_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ia64_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int words = ia64_function_arg_words (type, mode);
int offset = ia64_function_arg_offset (cum, type, words);
@ -4567,9 +4571,10 @@ ia64_arg_type (enum machine_mode mode)
ia64_function_arg. */
static void
ia64_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
ia64_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int words = ia64_function_arg_words (type, mode);
int offset = ia64_function_arg_offset (cum, type, words);
enum machine_mode hfa_mode = VOIDmode;

View File

@ -148,20 +148,20 @@ static section *iq2000_select_rtx_section (enum machine_mode, rtx,
static void iq2000_init_builtins (void);
static rtx iq2000_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
static bool iq2000_return_in_memory (const_tree, const_tree);
static void iq2000_setup_incoming_varargs (CUMULATIVE_ARGS *,
static void iq2000_setup_incoming_varargs (cumulative_args_t,
enum machine_mode, tree, int *,
int);
static bool iq2000_rtx_costs (rtx, int, int, int *, bool);
static int iq2000_address_cost (rtx, bool);
static section *iq2000_select_section (tree, int, unsigned HOST_WIDE_INT);
static rtx iq2000_legitimize_address (rtx, rtx, enum machine_mode);
static bool iq2000_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool iq2000_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int iq2000_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int iq2000_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx iq2000_function_arg (CUMULATIVE_ARGS *,
static rtx iq2000_function_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static void iq2000_function_arg_advance (CUMULATIVE_ARGS *,
static void iq2000_function_arg_advance (cumulative_args_t,
enum machine_mode, const_tree, bool);
static unsigned int iq2000_function_arg_boundary (enum machine_mode,
const_tree);
@ -1129,9 +1129,11 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
position in CUM. */
static void
iq2000_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
iq2000_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (TARGET_DEBUG_D_MODE)
{
fprintf (stderr,
@ -1198,9 +1200,10 @@ iq2000_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
and type TYPE in CUM, or 0 if the argument is to be passed on the stack. */
static rtx
iq2000_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
iq2000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
rtx ret;
int regbase = -1;
int bias = 0;
@ -1374,10 +1377,12 @@ iq2000_function_arg_boundary (enum machine_mode mode, const_tree type)
}
static int
iq2000_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
iq2000_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (mode == DImode && cum->arg_words == MAX_ARGS_IN_REGISTERS - 1)
{
if (TARGET_DEBUG_D_MODE)
@ -1879,7 +1884,8 @@ iq2000_expand_prologue (void)
int i;
tree next_arg;
tree cur_arg;
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
int store_args_on_stack = (iq2000_can_use_return_insn ());
/* If struct value address is treated as the first argument. */
@ -1903,7 +1909,8 @@ 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, 0);
INIT_CUMULATIVE_ARGS (args_so_far_v, fntype, NULL_RTX, 0, 0);
args_so_far = pack_cumulative_args (&args_so_far_v);
regno = GP_ARG_FIRST;
for (cur_arg = fnargs; cur_arg != 0; cur_arg = next_arg)
@ -1918,10 +1925,10 @@ iq2000_expand_prologue (void)
passed_mode = Pmode;
}
entry_parm = iq2000_function_arg (&args_so_far, passed_mode,
entry_parm = iq2000_function_arg (args_so_far, passed_mode,
passed_type, true);
iq2000_function_arg_advance (&args_so_far, passed_mode,
iq2000_function_arg_advance (args_so_far, passed_mode,
passed_type, true);
next_arg = DECL_CHAIN (cur_arg);
@ -1964,7 +1971,7 @@ iq2000_expand_prologue (void)
iq2000_unction_arg has encoded a PARALLEL rtx, holding a vector of
adjustments to be made as the next_arg_reg variable, so we split up
the insns, and emit them separately. */
next_arg_reg = iq2000_function_arg (&args_so_far, VOIDmode,
next_arg_reg = iq2000_function_arg (args_so_far, VOIDmode,
void_type_node, true);
if (next_arg_reg != 0 && GET_CODE (next_arg_reg) == PARALLEL)
{
@ -2238,9 +2245,10 @@ iq2000_function_value_regno_p (const unsigned int regno)
/* Return true when an argument must be passed by reference. */
static bool
iq2000_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_mode mode,
iq2000_pass_by_reference (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int size;
/* We must pass by reference if we would be both passing in registers
@ -2254,7 +2262,8 @@ iq2000_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_mode mode,
CUMULATIVE_ARGS temp;
temp = *cum;
if (iq2000_function_arg (&temp, mode, type, named) != 0)
if (iq2000_function_arg (pack_cumulative_args (&temp), mode, type, named)
!= 0)
return 1;
}
@ -2835,11 +2844,12 @@ iq2000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
/* Worker function for TARGET_SETUP_INCOMING_VARARGS. */
static void
iq2000_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
iq2000_setup_incoming_varargs (cumulative_args_t cum_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED, int * pretend_size,
int no_rtl)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
unsigned int iq2000_off = ! cum->last_arg_fp;
unsigned int iq2000_fp_off = cum->last_arg_fp;

View File

@ -65,7 +65,7 @@ static rtx emit_add (rtx dest, rtx src0, rtx src1);
static void expand_save_restore (struct lm32_frame_info *info, int op);
static void stack_adjust (HOST_WIDE_INT amount);
static bool lm32_in_small_data_p (const_tree);
static void lm32_setup_incoming_varargs (CUMULATIVE_ARGS * cum,
static void lm32_setup_incoming_varargs (cumulative_args_t cum,
enum machine_mode mode, tree type,
int *pretend_size, int no_rtl);
static bool lm32_rtx_costs (rtx x, int code, int outer_code, int *total,
@ -75,10 +75,10 @@ static bool
lm32_legitimate_address_p (enum machine_mode mode, rtx x, bool strict);
static HOST_WIDE_INT lm32_compute_frame_size (int size);
static void lm32_option_override (void);
static rtx lm32_function_arg (CUMULATIVE_ARGS * cum,
static rtx lm32_function_arg (cumulative_args_t cum,
enum machine_mode mode, const_tree type,
bool named);
static void lm32_function_arg_advance (CUMULATIVE_ARGS * cum,
static void lm32_function_arg_advance (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named);
static bool lm32_legitimate_constant_p (enum machine_mode, rtx);
@ -623,9 +623,11 @@ lm32_print_operand_address (FILE * file, rtx addr)
(otherwise it is an extra parameter matching an ellipsis). */
static rtx
lm32_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
lm32_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (mode == VOIDmode)
/* Compute operand 2 of the call insn. */
return GEN_INT (0);
@ -640,10 +642,10 @@ lm32_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static void
lm32_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
lm32_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
*cum += LM32_NUM_REGS2 (mode, type);
*get_cumulative_args (cum) += LM32_NUM_REGS2 (mode, type);
}
HOST_WIDE_INT
@ -676,9 +678,10 @@ lm32_compute_initial_elimination_offset (int from, int to)
}
static void
lm32_setup_incoming_varargs (CUMULATIVE_ARGS * cum, enum machine_mode mode,
lm32_setup_incoming_varargs (cumulative_args_t cum_v, enum machine_mode mode,
tree type, int *pretend_size, int no_rtl)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int first_anon_arg;
tree fntype;

View File

@ -73,15 +73,15 @@ static struct machine_function *m32c_init_machine_status (void);
static void m32c_insert_attributes (tree, tree *);
static bool m32c_legitimate_address_p (enum machine_mode, rtx, bool);
static bool m32c_addr_space_legitimate_address_p (enum machine_mode, rtx, bool, addr_space_t);
static rtx m32c_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx m32c_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool m32c_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool m32c_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void m32c_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void m32c_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int m32c_function_arg_boundary (enum machine_mode, const_tree);
static int m32c_pushm_popm (Push_Pop_Type);
static bool m32c_strict_argument_naming (CUMULATIVE_ARGS *);
static bool m32c_strict_argument_naming (cumulative_args_t);
static rtx m32c_struct_value_rtx (tree, int);
static rtx m32c_subreg (enum machine_mode, rtx, enum machine_mode, int);
static int need_to_save (int);
@ -1536,9 +1536,11 @@ m32c_push_rounding (int n)
#undef TARGET_FUNCTION_ARG
#define TARGET_FUNCTION_ARG m32c_function_arg
static rtx
m32c_function_arg (CUMULATIVE_ARGS * ca,
m32c_function_arg (cumulative_args_t ca_v,
enum machine_mode mode, const_tree type, bool named)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
/* Can return a reg, parallel, or 0 for stack */
rtx rv = NULL_RTX;
#if DEBUG0
@ -1587,7 +1589,7 @@ m32c_function_arg (CUMULATIVE_ARGS * ca,
#undef TARGET_PASS_BY_REFERENCE
#define TARGET_PASS_BY_REFERENCE m32c_pass_by_reference
static bool
m32c_pass_by_reference (CUMULATIVE_ARGS * ca ATTRIBUTE_UNUSED,
m32c_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -1617,11 +1619,13 @@ m32c_init_cumulative_args (CUMULATIVE_ARGS * ca,
#undef TARGET_FUNCTION_ARG_ADVANCE
#define TARGET_FUNCTION_ARG_ADVANCE m32c_function_arg_advance
static void
m32c_function_arg_advance (CUMULATIVE_ARGS * ca,
m32c_function_arg_advance (cumulative_args_t ca_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
if (ca->force_mem)
ca->force_mem = 0;
else
@ -1783,7 +1787,7 @@ m32c_epilogue_uses (int regno ATTRIBUTE_UNUSED)
#undef TARGET_STRICT_ARGUMENT_NAMING
#define TARGET_STRICT_ARGUMENT_NAMING m32c_strict_argument_naming
static bool
m32c_strict_argument_naming (CUMULATIVE_ARGS * ca ATTRIBUTE_UNUSED)
m32c_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return 1;
}

View File

@ -81,18 +81,18 @@ static bool m32r_return_in_memory (const_tree, const_tree);
static rtx m32r_function_value (const_tree, const_tree, bool);
static rtx m32r_libcall_value (enum machine_mode, const_rtx);
static bool m32r_function_value_regno_p (const unsigned int);
static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void m32r_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree, int *, int);
static void init_idents (void);
static bool m32r_rtx_costs (rtx, int, int, int *, bool speed);
static int m32r_memory_move_cost (enum machine_mode, reg_class_t, bool);
static bool m32r_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool m32r_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int m32r_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static rtx m32r_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx m32r_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void m32r_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void m32r_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool m32r_can_eliminate (const int, const int);
static void m32r_conditional_register_usage (void);
@ -648,7 +648,7 @@ memreg_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
/* Return nonzero if TYPE must be passed by indirect reference. */
static bool
m32r_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
m32r_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -1138,9 +1138,11 @@ gen_split_move_double (rtx operands[])
static int
m32r_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
m32r_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int words;
unsigned int size =
(((mode == BLKmode && type)
@ -1196,10 +1198,12 @@ m32r_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
and the rest are pushed. */
static rtx
m32r_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
m32r_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
return (PASS_IN_REG_P (*cum, mode, type)
? gen_rtx_REG (mode, ROUND_ADVANCE_CUM (*cum, mode, type))
: NULL_RTX);
@ -1210,9 +1214,11 @@ m32r_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
m32r_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
m32r_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum = (ROUND_ADVANCE_CUM (*cum, mode, type)
+ ROUND_ADVANCE_ARG (mode, type));
}
@ -1222,7 +1228,9 @@ m32r_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
static bool
m32r_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
{
return m32r_pass_by_reference (NULL, TYPE_MODE (type), type, false);
cumulative_args_t dummy = pack_cumulative_args (NULL);
return m32r_pass_by_reference (dummy, TYPE_MODE (type), type, false);
}
/* Worker function for TARGET_FUNCTION_VALUE. */
@ -1262,7 +1270,7 @@ m32r_function_value_regno_p (const unsigned int regno)
and mode MODE, and we rely on this fact. */
static void
m32r_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
m32r_setup_incoming_varargs (cumulative_args_t cum, enum machine_mode mode,
tree type, int *pretend_size, int no_rtl)
{
int first_anon_arg;
@ -1273,7 +1281,7 @@ m32r_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* All BLKmode values are passed by reference. */
gcc_assert (mode != BLKmode);
first_anon_arg = (ROUND_ADVANCE_CUM (*cum, mode, type)
first_anon_arg = (ROUND_ADVANCE_CUM (*get_cumulative_args (cum), mode, type)
+ ROUND_ADVANCE_ARG (mode, type));
if (first_anon_arg < M32R_MAX_PARM_REGS)

View File

@ -157,9 +157,9 @@ static void m68k_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
static void m68k_trampoline_init (rtx, tree, rtx);
static int m68k_return_pops_args (tree, tree, int);
static rtx m68k_delegitimize_address (rtx);
static void m68k_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void m68k_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx m68k_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx m68k_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool m68k_cannot_force_const_mem (enum machine_mode mode, rtx x);
@ -1372,7 +1372,7 @@ m68k_ok_for_sibcall_p (tree decl, tree exp)
/* On the m68k all args are always pushed. */
static rtx
m68k_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
m68k_function_arg (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -1381,9 +1381,11 @@ m68k_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
}
static void
m68k_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
m68k_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum += (mode != BLKmode
? (GET_MODE_SIZE (mode) + 3) & ~3
: (int_size_in_bytes (type) + 3) & ~3);

View File

@ -96,7 +96,7 @@ static int calc_live_regs (int *);
static int try_constant_tricks (long, HOST_WIDE_INT *, HOST_WIDE_INT *);
static const char * output_inline_const (enum machine_mode, rtx *);
static void layout_mcore_frame (struct mcore_frame *);
static void mcore_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int);
static void mcore_setup_incoming_varargs (cumulative_args_t, enum machine_mode, tree, int *, int);
static cond_type is_cond_candidate (rtx);
static rtx emit_new_cond_insn (rtx, int);
static rtx conditionalize_block (rtx);
@ -124,13 +124,13 @@ static int mcore_ior_cost (rtx);
static bool mcore_rtx_costs (rtx, int, int, int *, bool);
static void mcore_external_libcall (rtx);
static bool mcore_return_in_memory (const_tree, const_tree);
static int mcore_arg_partial_bytes (CUMULATIVE_ARGS *,
static int mcore_arg_partial_bytes (cumulative_args_t,
enum machine_mode,
tree, bool);
static rtx mcore_function_arg (CUMULATIVE_ARGS *,
static rtx mcore_function_arg (cumulative_args_t,
enum machine_mode,
const_tree, bool);
static void mcore_function_arg_advance (CUMULATIVE_ARGS *,
static void mcore_function_arg_advance (cumulative_args_t,
enum machine_mode,
const_tree, bool);
static unsigned int mcore_function_arg_boundary (enum machine_mode,
@ -1911,11 +1911,13 @@ mcore_initial_elimination_offset (int from, int to)
/* Keep track of some information about varargs for the prolog. */
static void
mcore_setup_incoming_varargs (CUMULATIVE_ARGS *args_so_far,
mcore_setup_incoming_varargs (cumulative_args_t args_so_far_v,
enum machine_mode mode, tree type,
int * ptr_pretend_size ATTRIBUTE_UNUSED,
int second_time ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *args_so_far = get_cumulative_args (args_so_far_v);
current_function_anonymous_args = 1;
/* We need to know how many argument registers are used before
@ -2783,7 +2785,7 @@ mcore_function_value (const_tree valtype, const_tree func)
its data type forbids. */
static rtx
mcore_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mcore_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
int arg_reg;
@ -2794,7 +2796,7 @@ mcore_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
if (targetm.calls.must_pass_in_stack (mode, type))
return 0;
arg_reg = ROUND_REG (*cum, mode);
arg_reg = ROUND_REG (*get_cumulative_args (cum), mode);
if (arg_reg < NPARM_REGS)
return handle_structs_in_regs (mode, type, FIRST_PARM_REG + arg_reg);
@ -2803,9 +2805,11 @@ mcore_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static void
mcore_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mcore_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum = (ROUND_REG (*cum, mode)
+ (int)named * mcore_num_arg_regs (mode, type));
}
@ -2828,10 +2832,10 @@ mcore_function_arg_boundary (enum machine_mode mode,
the function. */
static int
mcore_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mcore_arg_partial_bytes (cumulative_args_t cum, enum machine_mode mode,
tree type, bool named)
{
int reg = ROUND_REG (*cum, mode);
int reg = ROUND_REG (*get_cumulative_args (cum), mode);
if (named == 0)
return 0;

View File

@ -213,13 +213,13 @@ static rtx mep_make_bundle (rtx, rtx);
static void mep_bundle_insns (rtx);
static bool mep_rtx_cost (rtx, int, int, int *, bool);
static int mep_address_cost (rtx, bool);
static void mep_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
static void mep_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
tree, int *, int);
static bool mep_pass_by_reference (CUMULATIVE_ARGS * cum, enum machine_mode,
static bool mep_pass_by_reference (cumulative_args_t cum, enum machine_mode,
const_tree, bool);
static rtx mep_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx mep_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void mep_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void mep_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool mep_vector_mode_supported_p (enum machine_mode);
static rtx mep_allocate_initial_value (rtx);
@ -3494,12 +3494,12 @@ mep_final_prescan_insn (rtx insn, rtx *operands ATTRIBUTE_UNUSED,
/* Function args in registers. */
static void
mep_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
mep_setup_incoming_varargs (cumulative_args_t cum,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED, int *pretend_size,
int second_time ATTRIBUTE_UNUSED)
{
int nsave = 4 - (cum->nregs + 1);
int nsave = 4 - (get_cumulative_args (cum)->nregs + 1);
if (nsave > 0)
cfun->machine->arg_regs_to_save = nsave;
@ -3770,10 +3770,12 @@ mep_init_cumulative_args (CUMULATIVE_ARGS *pcum, tree fntype,
first arg. For varargs, we copy $1..$4 to the stack. */
static rtx
mep_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mep_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
/* VOIDmode is a signal for the backend to pass data to the call
expander via the second operand to the call pattern. We use
this to determine whether to use "jsr" or "jsrv". */
@ -3794,7 +3796,7 @@ mep_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static bool
mep_pass_by_reference (CUMULATIVE_ARGS * cum ATTRIBUTE_UNUSED,
mep_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode,
const_tree type,
bool named ATTRIBUTE_UNUSED)
@ -3810,18 +3812,19 @@ mep_pass_by_reference (CUMULATIVE_ARGS * cum ATTRIBUTE_UNUSED,
return true;
if (size <= 4)
return false;
if (TARGET_IVC2 && cum->nregs < 4 && type != NULL_TREE && VECTOR_TYPE_P (type))
if (TARGET_IVC2 && get_cumulative_args (cum)->nregs < 4
&& type != NULL_TREE && VECTOR_TYPE_P (type))
return false;
return true;
}
static void
mep_function_arg_advance (CUMULATIVE_ARGS *pcum,
mep_function_arg_advance (cumulative_args_t pcum,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
pcum->nregs += 1;
get_cumulative_args (pcum)->nregs += 1;
}
bool

View File

@ -1091,9 +1091,12 @@ init_cumulative_args (CUMULATIVE_ARGS * cum, tree fntype,
/* Advance the argument to the next argument position. */
static void
microblaze_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
microblaze_function_arg_advance (cumulative_args_t cum_v,
enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
cum->arg_number++;
switch (mode)
{
@ -1146,10 +1149,12 @@ microblaze_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
or 0 if the argument is to be passed on the stack. */
static rtx
microblaze_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
microblaze_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
rtx ret;
int regbase = -1;
int *arg_words = &cum->arg_words;
@ -1197,9 +1202,11 @@ microblaze_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
/* Return number of bytes of argument to put in registers. */
static int
function_arg_partial_bytes (CUMULATIVE_ARGS * cum, enum machine_mode mode,
function_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if ((mode == BLKmode
|| GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
|| GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
@ -2220,7 +2227,8 @@ microblaze_expand_prologue (void)
int i;
tree next_arg;
tree cur_arg;
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
rtx mem_rtx, reg_rtx;
/* If struct value address is treated as the first argument, make it so. */
@ -2238,7 +2246,8 @@ microblaze_expand_prologue (void)
/* Determine the last argument, and get its name. */
INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0, 0);
INIT_CUMULATIVE_ARGS (args_so_far_v, fntype, NULL_RTX, 0, 0);
args_so_far = pack_cumulative_args (&args_so_far_v);
regno = GP_ARG_FIRST;
for (cur_arg = fnargs; cur_arg != 0; cur_arg = next_arg)
@ -2253,7 +2262,7 @@ microblaze_expand_prologue (void)
passed_mode = Pmode;
}
entry_parm = targetm.calls.function_arg (&args_so_far, passed_mode,
entry_parm = targetm.calls.function_arg (args_so_far, passed_mode,
passed_type, true);
if (entry_parm)
@ -2274,7 +2283,7 @@ microblaze_expand_prologue (void)
break;
}
targetm.calls.function_arg_advance (&args_so_far, passed_mode,
targetm.calls.function_arg_advance (args_so_far, passed_mode,
passed_type, true);
next_arg = TREE_CHAIN (cur_arg);
@ -2289,7 +2298,7 @@ microblaze_expand_prologue (void)
/* Split parallel insn into a sequence of insns. */
next_arg_reg = targetm.calls.function_arg (&args_so_far, VOIDmode,
next_arg_reg = targetm.calls.function_arg (args_so_far, VOIDmode,
void_type_node, true);
if (next_arg_reg != 0 && GET_CODE (next_arg_reg) == PARALLEL)
{

View File

@ -4715,7 +4715,7 @@ mips_arg_regno (const struct mips_arg_info *info, bool hard_float_p)
/* Implement TARGET_STRICT_ARGUMENT_NAMING. */
static bool
mips_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
mips_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return !TARGET_OLDABI;
}
@ -4723,9 +4723,10 @@ mips_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
/* Implement TARGET_FUNCTION_ARG. */
static rtx
mips_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mips_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
struct mips_arg_info info;
/* We will be called with a mode of VOIDmode after the last argument
@ -4849,9 +4850,10 @@ mips_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_FUNCTION_ARG_ADVANCE. */
static void
mips_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mips_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
struct mips_arg_info info;
mips_get_arg_info (&info, cum, mode, type, named);
@ -4885,12 +4887,12 @@ mips_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_ARG_PARTIAL_BYTES. */
static int
mips_arg_partial_bytes (CUMULATIVE_ARGS *cum,
mips_arg_partial_bytes (cumulative_args_t cum,
enum machine_mode mode, tree type, bool named)
{
struct mips_arg_info info;
mips_get_arg_info (&info, cum, mode, type, named);
mips_get_arg_info (&info, get_cumulative_args (cum), mode, type, named);
return info.stack_words > 0 ? info.reg_words * UNITS_PER_WORD : 0;
}
@ -4969,7 +4971,7 @@ mips_pad_reg_upward (enum machine_mode mode, tree type)
/* Return nonzero when an argument must be passed by reference. */
static bool
mips_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
mips_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -4996,7 +4998,7 @@ mips_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
/* Implement TARGET_CALLEE_COPIES. */
static bool
mips_callee_copies (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
mips_callee_copies (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED, bool named)
{
@ -5263,7 +5265,7 @@ mips_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
/* Implement TARGET_SETUP_INCOMING_VARARGS. */
static void
mips_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mips_setup_incoming_varargs (cumulative_args_t cum, enum machine_mode mode,
tree type, int *pretend_size ATTRIBUTE_UNUSED,
int no_rtl)
{
@ -5273,8 +5275,9 @@ mips_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* The caller has advanced CUM up to, but not beyond, the last named
argument. Advance a local copy of CUM past the last "real" named
argument, to find out how many registers are left over. */
local_cum = *cum;
mips_function_arg_advance (&local_cum, mode, type, true);
local_cum = *get_cumulative_args (cum);
mips_function_arg_advance (pack_cumulative_args (&local_cum), mode, type,
true);
/* Found out how many registers we need to save. */
gp_saved = MAX_ARGS_IN_REGISTERS - local_cum.num_gprs;
@ -5925,7 +5928,7 @@ mips_output_args_xfer (int fp_code, char direction)
else
mips_output_64bit_xfer (direction, gparg, fparg);
mips_function_arg_advance (&cum, mode, NULL, true);
mips_function_arg_advance (pack_cumulative_args (&cum), mode, NULL, true);
}
}

View File

@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for MMIX.
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010
2010, 2011
Free Software Foundation, Inc.
Contributed by Hans-Peter Nilsson (hp@bitrange.com)
@ -135,7 +135,7 @@ static void mmix_reorg (void);
static void mmix_asm_output_mi_thunk
(FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree);
static void mmix_setup_incoming_varargs
(CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int);
(cumulative_args_t, enum machine_mode, tree, int *, int);
static void mmix_file_start (void);
static void mmix_file_end (void);
static bool mmix_rtx_costs (rtx, int, int, int *, bool);
@ -143,18 +143,18 @@ static rtx mmix_struct_value_rtx (tree, int);
static enum machine_mode mmix_promote_function_mode (const_tree,
enum machine_mode,
int *, const_tree, int);
static void mmix_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void mmix_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx mmix_function_arg_1 (const CUMULATIVE_ARGS *, enum machine_mode,
static rtx mmix_function_arg_1 (const cumulative_args_t, enum machine_mode,
const_tree, bool, bool);
static rtx mmix_function_incoming_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx mmix_function_incoming_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx mmix_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx mmix_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx mmix_function_value (const_tree, const_tree, bool);
static rtx mmix_libcall_value (enum machine_mode, const_rtx);
static bool mmix_function_value_regno_p (const unsigned int);
static bool mmix_pass_by_reference (CUMULATIVE_ARGS *,
static bool mmix_pass_by_reference (cumulative_args_t,
enum machine_mode, const_tree, bool);
static bool mmix_frame_pointer_required (void);
static void mmix_asm_trampoline_template (FILE *);
@ -627,9 +627,10 @@ mmix_initial_elimination_offset (int fromreg, int toreg)
}
static void
mmix_function_arg_advance (CUMULATIVE_ARGS *argsp, enum machine_mode mode,
mmix_function_arg_advance (cumulative_args_t argsp_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *argsp = get_cumulative_args (argsp_v);
int arg_size = MMIX_FUNCTION_ARG_SIZE (mode, type);
argsp->regs = ((targetm.calls.must_pass_in_stack (mode, type)
@ -643,12 +644,14 @@ mmix_function_arg_advance (CUMULATIVE_ARGS *argsp, enum machine_mode mode,
/* Helper function for mmix_function_arg and mmix_function_incoming_arg. */
static rtx
mmix_function_arg_1 (const CUMULATIVE_ARGS *argsp,
mmix_function_arg_1 (const cumulative_args_t argsp_v,
enum machine_mode mode,
const_tree type,
bool named ATTRIBUTE_UNUSED,
bool incoming)
{
CUMULATIVE_ARGS *argsp = get_cumulative_args (argsp_v);
/* Last-argument marker. */
if (type == void_type_node)
return (argsp->regs < MMIX_MAX_ARGS_IN_REGS)
@ -675,7 +678,7 @@ mmix_function_arg_1 (const CUMULATIVE_ARGS *argsp,
one that must go on stack. */
static rtx
mmix_function_arg (CUMULATIVE_ARGS *argsp,
mmix_function_arg (cumulative_args_t argsp,
enum machine_mode mode,
const_tree type,
bool named)
@ -684,7 +687,7 @@ mmix_function_arg (CUMULATIVE_ARGS *argsp,
}
static rtx
mmix_function_incoming_arg (CUMULATIVE_ARGS *argsp,
mmix_function_incoming_arg (cumulative_args_t argsp,
enum machine_mode mode,
const_tree type,
bool named)
@ -696,9 +699,11 @@ mmix_function_incoming_arg (CUMULATIVE_ARGS *argsp,
everything that goes by value. */
static bool
mmix_pass_by_reference (CUMULATIVE_ARGS *argsp, enum machine_mode mode,
mmix_pass_by_reference (cumulative_args_t argsp_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *argsp = get_cumulative_args (argsp_v);
/* FIXME: Check: I'm not sure the must_pass_in_stack check is
necessary. */
if (targetm.calls.must_pass_in_stack (mode, type))
@ -961,12 +966,14 @@ mmix_function_profiler (FILE *stream ATTRIBUTE_UNUSED,
can parse all arguments in registers, to improve performance. */
static void
mmix_setup_incoming_varargs (CUMULATIVE_ARGS *args_so_farp,
mmix_setup_incoming_varargs (cumulative_args_t args_so_farp_v,
enum machine_mode mode,
tree vartype,
int *pretend_sizep,
int second_time ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *args_so_farp = get_cumulative_args (args_so_farp_v);
/* The last named variable has been handled, but
args_so_farp has not been advanced for it. */
if (args_so_farp->regs + 1 < MMIX_MAX_ARGS_IN_REGS)

View File

@ -1492,7 +1492,7 @@ mn10300_va_start (tree valist, rtx nextarg)
/* Return true when a parameter should be passed by reference. */
static bool
mn10300_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
mn10300_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -1510,9 +1510,10 @@ mn10300_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
from a function. If the result is NULL_RTX, the argument is pushed. */
static rtx
mn10300_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mn10300_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
rtx result = NULL_RTX;
int size;
@ -1558,9 +1559,11 @@ mn10300_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
mn10300_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mn10300_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
cum->nbytes += (mode != BLKmode
? (GET_MODE_SIZE (mode) + 3) & ~3
: (int_size_in_bytes (type) + 3) & ~3);
@ -1570,9 +1573,10 @@ mn10300_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
partially in registers and partially in memory. */
static int
mn10300_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
mn10300_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int size;
/* We only support using 2 data registers as argument registers. */

View File

@ -1,5 +1,5 @@
/* Target Code for moxie
Copyright (C) 2008, 2009, 2010 Free Software Foundation
Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation
Contributed by Anthony Green.
This file is part of GCC.
@ -370,11 +370,12 @@ moxie_initial_elimination_offset (int from, int to)
/* Worker function for TARGET_SETUP_INCOMING_VARARGS. */
static void
moxie_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
moxie_setup_incoming_varargs (cumulative_args_t cum_v,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
int *pretend_size, int no_rtl)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int regno;
int regs = 8 - *cum;
@ -409,10 +410,12 @@ moxie_fixed_condition_code_regs (unsigned int *p1, unsigned int *p2)
NULL_RTX if there's no more space. */
static rtx
moxie_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
moxie_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (*cum < 8)
return gen_rtx_REG (mode, *cum);
else
@ -424,9 +427,11 @@ moxie_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
: (unsigned) int_size_in_bytes (TYPE))
static void
moxie_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
moxie_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum = (*cum < MOXIE_R6
? *cum + ((3 + MOXIE_FUNCTION_ARG_SIZE (mode, type)) / 4)
: *cum);
@ -436,7 +441,7 @@ moxie_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
passed by reference. */
static bool
moxie_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
moxie_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -459,16 +464,17 @@ moxie_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
that fit in argument passing registers. */
static int
moxie_arg_partial_bytes (CUMULATIVE_ARGS *cum,
moxie_arg_partial_bytes (cumulative_args_t cum_v,
enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int bytes_left, size;
if (*cum >= 8)
return 0;
if (moxie_pass_by_reference (cum, mode, type, named))
if (moxie_pass_by_reference (cum_v, mode, type, named))
size = 4;
else if (type)
{

View File

@ -158,13 +158,13 @@ static void pa_hpux_file_end (void);
static void pa_hpux_init_libfuncs (void);
#endif
static rtx pa_struct_value_rtx (tree, int);
static bool pa_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool pa_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int pa_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int pa_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static void pa_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void pa_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx pa_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx pa_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int pa_function_arg_boundary (enum machine_mode, const_tree);
static struct machine_function * pa_init_machine_status (void);
@ -5948,7 +5948,7 @@ pa_eh_return_handler_rtx (void)
or updates the ABI. */
static bool
pa_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
pa_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -9386,9 +9386,10 @@ pa_function_value_regno_p (const unsigned int regno)
(TYPE is null for libcalls where that information may not be available.) */
static void
pa_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
pa_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int arg_size = FUNCTION_ARG_SIZE (mode, type);
cum->nargs_prototype--;
@ -9407,9 +9408,10 @@ pa_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
??? We might want to restructure this so that it looks more like other
ports. */
static rtx
pa_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
pa_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int max_arg_words = (TARGET_64BIT ? 8 : 4);
int alignment = 0;
int arg_size;
@ -9617,9 +9619,10 @@ pa_function_arg_boundary (enum machine_mode mode, const_tree type)
then this routine should return zero. */
static int
pa_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
pa_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
unsigned int max_arg_words = 8;
unsigned int offset = 0;

View File

@ -149,9 +149,9 @@ static rtx pdp11_function_value (const_tree, const_tree, bool);
static rtx pdp11_libcall_value (enum machine_mode, const_rtx);
static bool pdp11_function_value_regno_p (const unsigned int);
static void pdp11_trampoline_init (rtx, tree, rtx);
static rtx pdp11_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx pdp11_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void pdp11_function_arg_advance (CUMULATIVE_ARGS *,
static void pdp11_function_arg_advance (cumulative_args_t,
enum machine_mode, const_tree, bool);
static void pdp11_conditional_register_usage (void);
static bool pdp11_legitimate_constant_p (enum machine_mode, rtx);
@ -1813,7 +1813,7 @@ pdp11_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
(otherwise it is an extra parameter matching an ellipsis). */
static rtx
pdp11_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
pdp11_function_arg (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -1828,9 +1828,11 @@ pdp11_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
may not be available.) */
static void
pdp11_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
pdp11_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum += (mode != BLKmode
? GET_MODE_SIZE (mode)
: int_size_in_bytes (type));

View File

@ -77,16 +77,16 @@ void picochip_asm_file_end (void);
void picochip_init_libfuncs (void);
void picochip_reorg (void);
int picochip_arg_partial_bytes (CUMULATIVE_ARGS * p_cum,
int picochip_arg_partial_bytes (cumulative_args_t p_cum,
enum machine_mode mode,
tree type, bool named);
rtx picochip_function_arg (CUMULATIVE_ARGS * p_cum,
rtx picochip_function_arg (cumulative_args_t p_cum,
enum machine_mode mode,
const_tree type, bool named);
rtx picochip_incoming_function_arg (CUMULATIVE_ARGS * p_cum,
rtx picochip_incoming_function_arg (cumulative_args_t p_cum,
enum machine_mode mode,
const_tree type, bool named);
void picochip_arg_advance (CUMULATIVE_ARGS * p_cum, enum machine_mode mode,
void picochip_arg_advance (cumulative_args_t p_cum, enum machine_mode mode,
const_tree type, bool named);
unsigned int picochip_function_arg_boundary (enum machine_mode mode,
const_tree type);
@ -821,9 +821,10 @@ picochip_compute_arg_size (const_tree type, enum machine_mode mode)
/* Determine where the next outgoing arg should be placed. */
rtx
picochip_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
picochip_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int reg = 0;
int type_align_in_units = 0;
int type_size_in_units;
@ -919,7 +920,7 @@ picochip_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
passed in registers, which are then pushed onto the stack by the
function prologue). */
rtx
picochip_incoming_function_arg (CUMULATIVE_ARGS *cum,
picochip_incoming_function_arg (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named)
{
@ -953,7 +954,7 @@ picochip_function_arg_boundary (enum machine_mode mode,
/* Compute partial registers. */
int
picochip_arg_partial_bytes (CUMULATIVE_ARGS * p_cum, enum machine_mode mode,
picochip_arg_partial_bytes (cumulative_args_t p_cum, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
int type_align_in_units = 0;
@ -961,7 +962,7 @@ picochip_arg_partial_bytes (CUMULATIVE_ARGS * p_cum, enum machine_mode mode,
int new_offset = 0;
int offset_overflow = 0;
unsigned cum = *((unsigned *) p_cum);
unsigned cum = *get_cumulative_args (p_cum);
/* VOIDmode is passed when computing the second argument to a `call'
pattern. This can be ignored. */
@ -1009,9 +1010,10 @@ picochip_arg_partial_bytes (CUMULATIVE_ARGS * p_cum, enum machine_mode mode,
/* Advance the cumulative args counter CUM. */
void
picochip_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
picochip_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int type_align_in_units = 0;
int type_size_in_units;
int new_offset = 0;

View File

@ -1081,19 +1081,19 @@ static void rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *,
rtx[], int *);
static rtx rs6000_darwin64_record_arg (CUMULATIVE_ARGS *, const_tree, bool, bool);
static rtx rs6000_mixed_function_arg (enum machine_mode, const_tree, int);
static void rs6000_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void rs6000_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx rs6000_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx rs6000_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static unsigned int rs6000_function_arg_boundary (enum machine_mode,
const_tree);
static void rs6000_move_block_from_reg (int regno, rtx x, int nregs);
static void setup_incoming_varargs (CUMULATIVE_ARGS *,
static void setup_incoming_varargs (cumulative_args_t,
enum machine_mode, tree,
int *, int);
static bool rs6000_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool rs6000_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int rs6000_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int rs6000_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static const char *invalid_arg_for_unprototyped_fn (const_tree, const_tree, const_tree);
#if TARGET_MACHO
@ -8040,10 +8040,11 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static void
rs6000_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
rs6000_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
rs6000_function_arg_advance_1 (cum, mode, type, named, 0);
rs6000_function_arg_advance_1 (get_cumulative_args (cum), mode, type, named,
0);
}
static rtx
@ -8407,9 +8408,10 @@ rs6000_mixed_function_arg (enum machine_mode mode, const_tree type,
itself. */
static rtx
rs6000_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
rs6000_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
enum rs6000_abi abi = DEFAULT_ABI;
/* Return a marker to indicate whether CR1 needs to set or clear the
@ -8679,9 +8681,10 @@ rs6000_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
returns the number of bytes used by the first element of the PARALLEL. */
static int
rs6000_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
rs6000_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int ret = 0;
int align_words;
@ -8742,7 +8745,7 @@ rs6000_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
reference. */
static bool
rs6000_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
rs6000_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -8842,7 +8845,7 @@ rs6000_move_block_from_reg (int regno, rtx x, int nregs)
stack and set PRETEND_SIZE to the length of the registers pushed. */
static void
setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
setup_incoming_varargs (cumulative_args_t cum, enum machine_mode mode,
tree type, int *pretend_size ATTRIBUTE_UNUSED,
int no_rtl)
{
@ -8853,7 +8856,7 @@ setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
alias_set_type set;
/* Skip the last named argument. */
next_cum = *cum;
next_cum = *get_cumulative_args (cum);
rs6000_function_arg_advance_1 (&next_cum, mode, type, true, 0);
if (DEFAULT_ABI == ABI_V4)

View File

@ -832,11 +832,11 @@ rx_function_arg_size (enum machine_mode mode, const_tree type)
variable parameter list. */
static rtx
rx_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
rx_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
unsigned int next_reg;
unsigned int bytes_so_far = *cum;
unsigned int bytes_so_far = *get_cumulative_args (cum);
unsigned int size;
unsigned int rounded_size;
@ -870,10 +870,10 @@ rx_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
}
static void
rx_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
rx_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
*cum += rx_function_arg_size (mode, type);
*get_cumulative_args (cum) += rx_function_arg_size (mode, type);
}
static unsigned int

View File

@ -8511,7 +8511,7 @@ s390_function_arg_integer (enum machine_mode mode, const_tree type)
reference. */
static bool
s390_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
s390_pass_by_reference (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -8539,9 +8539,11 @@ s390_pass_by_reference (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
matching an ellipsis). */
static void
s390_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
s390_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (s390_function_arg_float (mode, type))
{
cum->fprs += 1;
@ -8575,9 +8577,11 @@ s390_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
are pushed to the stack. */
static rtx
s390_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
s390_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (s390_function_arg_float (mode, type))
{
if (cum->fprs + 1 > FP_ARG_NUM_REG)
@ -9622,14 +9626,16 @@ s390_valid_pointer_mode (enum machine_mode mode)
static bool
s390_call_saved_register_used (tree call_expr)
{
CUMULATIVE_ARGS cum;
CUMULATIVE_ARGS cum_v;
cumulative_args_t cum;
tree parameter;
enum machine_mode mode;
tree type;
rtx parm_rtx;
int reg, i;
INIT_CUMULATIVE_ARGS (cum, NULL, NULL, 0, 0);
INIT_CUMULATIVE_ARGS (cum_v, NULL, NULL, 0, 0);
cum = pack_cumulative_args (&cum_v);
for (i = 0; i < call_expr_nargs (call_expr); i++)
{
@ -9647,15 +9653,15 @@ s390_call_saved_register_used (tree call_expr)
mode = TYPE_MODE (type);
gcc_assert (mode);
if (pass_by_reference (&cum, mode, type, true))
if (pass_by_reference (&cum_v, mode, type, true))
{
mode = Pmode;
type = build_pointer_type (type);
}
parm_rtx = s390_function_arg (&cum, mode, type, 0);
parm_rtx = s390_function_arg (cum, mode, type, 0);
s390_function_arg_advance (&cum, mode, type, 0);
s390_function_arg_advance (cum, mode, type, 0);
if (!parm_rtx)
continue;

View File

@ -1,5 +1,6 @@
/* score-protos.h for Sunplus S+CORE processor
Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
@ -63,9 +64,6 @@ extern enum reg_class score_preferred_reload_class (rtx x,
extern HOST_WIDE_INT score_initial_elimination_offset (int from, int to);
extern void score_print_operand (FILE *file, rtx op, int letter);
extern void score_print_operand_address (FILE *file, rtx addr);
extern int score_arg_partial_bytes (CUMULATIVE_ARGS *cum,
enum machine_mode mode,
tree type, bool named);
extern int score_symbolic_constant_p (rtx x,
enum score_symbol_type *symbol_type);
extern void score_movsicc (rtx *ops);

View File

@ -152,7 +152,7 @@ score_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
/* Return nonzero when an argument must be passed by reference. */
static bool
score_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
score_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -352,33 +352,34 @@ score_init_cumulative_args (CUMULATIVE_ARGS *cum,
/* Implement TARGET_FUNCTION_ARG_ADVANCE hook. */
static void
score_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
score_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
if (TARGET_SCORE7 || TARGET_SCORE7D)
score7_function_arg_advance (cum, mode, type, named);
score7_function_arg_advance (get_cumulative_args (cum), mode, type, named);
else
gcc_unreachable ();
}
/* Implement TARGET_ARG_PARTIAL_BYTES macro. */
int
score_arg_partial_bytes (CUMULATIVE_ARGS *cum,
score_arg_partial_bytes (cumulative_args_t cum,
enum machine_mode mode, tree type, bool named)
{
if (TARGET_SCORE7 || TARGET_SCORE7D)
return score7_arg_partial_bytes (cum, mode, type, named);
return score7_arg_partial_bytes (get_cumulative_args (cum), mode, type,
named);
else
gcc_unreachable ();
}
/* Implement TARGET_FUNCTION_ARG hook. */
static rtx
score_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
score_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
if (TARGET_SCORE7 || TARGET_SCORE7D)
return score7_function_arg (cum, mode, type, named);
return score7_function_arg (get_cumulative_args (cum), mode, type, named);
else
gcc_unreachable ();
}

View File

@ -273,9 +273,9 @@ static bool sh_function_value_regno_p (const unsigned int);
static rtx sh_libcall_value (enum machine_mode, const_rtx);
static bool sh_return_in_memory (const_tree, const_tree);
static rtx sh_builtin_saveregs (void);
static void sh_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int);
static bool sh_strict_argument_naming (CUMULATIVE_ARGS *);
static bool sh_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *);
static void sh_setup_incoming_varargs (cumulative_args_t, enum machine_mode, tree, int *, int);
static bool sh_strict_argument_naming (cumulative_args_t);
static bool sh_pretend_outgoing_varargs_named (cumulative_args_t);
static tree sh_build_builtin_va_list (void);
static void sh_va_start (tree, rtx);
static tree sh_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *);
@ -285,15 +285,15 @@ static enum machine_mode sh_promote_function_mode (const_tree type,
int *punsignedp,
const_tree funtype,
int for_return);
static bool sh_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
static bool sh_pass_by_reference (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool sh_callee_copies (CUMULATIVE_ARGS *, enum machine_mode,
static bool sh_callee_copies (cumulative_args_t, enum machine_mode,
const_tree, bool);
static int sh_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
static int sh_arg_partial_bytes (cumulative_args_t, enum machine_mode,
tree, bool);
static void sh_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void sh_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx sh_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx sh_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static bool sh_scalar_mode_supported_p (enum machine_mode);
static int sh_dwarf_calling_convention (const_tree);
@ -8182,9 +8182,11 @@ shcompact_byref (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static bool
sh_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sh_pass_by_reference (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (targetm.calls.must_pass_in_stack (mode, type))
return true;
@ -8204,21 +8206,22 @@ sh_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static bool
sh_callee_copies (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sh_callee_copies (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
/* ??? How can it possibly be correct to return true only on the
caller side of the equation? Is there someplace else in the
sh backend that's magically producing the copies? */
return (cum->outgoing
return (get_cumulative_args (cum)->outgoing
&& ((mode == BLKmode ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode))
% SH_MIN_ALIGN_FOR_CALLEE_COPY == 0));
}
static int
sh_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sh_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int words = 0;
if (!TARGET_SH5
@ -8258,9 +8261,11 @@ sh_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
its data type forbids. */
static rtx
sh_function_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
sh_function_arg (cumulative_args_t ca_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
if (! TARGET_SH5 && mode == VOIDmode)
return GEN_INT (ca->renesas_abi ? 1 : 0);
@ -8346,9 +8351,11 @@ sh_function_arg (CUMULATIVE_ARGS *ca, enum machine_mode mode,
available.) */
static void
sh_function_arg_advance (CUMULATIVE_ARGS *ca, enum machine_mode mode,
sh_function_arg_advance (cumulative_args_t ca_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
if (ca->force_mem)
ca->force_mem = 0;
else if (TARGET_SH5)
@ -8574,7 +8581,7 @@ sh_return_in_memory (const_tree type, const_tree fndecl)
later. Fortunately, we already have two flags that are part of struct
function that tell if a function uses varargs or stdarg. */
static void
sh_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
sh_setup_incoming_varargs (cumulative_args_t ca,
enum machine_mode mode,
tree type,
int *pretend_arg_size,
@ -8585,7 +8592,7 @@ sh_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
{
int named_parm_regs, anon_parm_regs;
named_parm_regs = (ROUND_REG (*ca, mode)
named_parm_regs = (ROUND_REG (*get_cumulative_args (ca), mode)
+ (mode == BLKmode
? ROUND_ADVANCE (int_size_in_bytes (type))
: ROUND_ADVANCE (GET_MODE_SIZE (mode))));
@ -8596,14 +8603,16 @@ sh_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
}
static bool
sh_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
sh_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return TARGET_SH5;
}
static bool
sh_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca)
sh_pretend_outgoing_varargs_named (cumulative_args_t ca_v)
{
CUMULATIVE_ARGS *ca = get_cumulative_args (ca_v);
return ! (TARGET_HITACHI || ca->renesas_abi) && ! TARGET_SH5;
}
@ -11568,9 +11577,10 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
{
tree ptype = build_pointer_type (TREE_TYPE (funtype));
sh_function_arg_advance (&cum, Pmode, ptype, true);
sh_function_arg_advance (pack_cumulative_args (&cum), Pmode, ptype, true);
}
this_rtx = sh_function_arg (&cum, Pmode, ptr_type_node, true);
this_rtx
= sh_function_arg (pack_cumulative_args (&cum), Pmode, ptr_type_node, true);
/* For SHcompact, we only have r0 for a scratch register: r1 is the
static chain pointer (even if you can't have nested virtual functions

View File

@ -436,7 +436,7 @@ static rtx sparc_struct_value_rtx (tree, int);
static enum machine_mode sparc_promote_function_mode (const_tree, enum machine_mode,
int *, const_tree, int);
static bool sparc_return_in_memory (const_tree, const_tree);
static bool sparc_strict_argument_naming (CUMULATIVE_ARGS *);
static bool sparc_strict_argument_naming (cumulative_args_t);
static void sparc_va_start (tree, rtx);
static tree sparc_gimplify_va_arg (tree, tree, gimple_seq *, gimple_seq *);
static bool sparc_vector_mode_supported_p (enum machine_mode);
@ -446,19 +446,19 @@ static rtx sparc_legitimize_pic_address (rtx, rtx);
static rtx sparc_legitimize_address (rtx, rtx, enum machine_mode);
static rtx sparc_delegitimize_address (rtx);
static bool sparc_mode_dependent_address_p (const_rtx);
static bool sparc_pass_by_reference (CUMULATIVE_ARGS *,
static bool sparc_pass_by_reference (cumulative_args_t,
enum machine_mode, const_tree, bool);
static void sparc_function_arg_advance (CUMULATIVE_ARGS *,
static void sparc_function_arg_advance (cumulative_args_t,
enum machine_mode, const_tree, bool);
static rtx sparc_function_arg_1 (const CUMULATIVE_ARGS *,
static rtx sparc_function_arg_1 (cumulative_args_t,
enum machine_mode, const_tree, bool, bool);
static rtx sparc_function_arg (CUMULATIVE_ARGS *,
static rtx sparc_function_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static rtx sparc_function_incoming_arg (CUMULATIVE_ARGS *,
static rtx sparc_function_incoming_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static unsigned int sparc_function_arg_boundary (enum machine_mode,
const_tree);
static int sparc_arg_partial_bytes (CUMULATIVE_ARGS *,
static int sparc_arg_partial_bytes (cumulative_args_t,
enum machine_mode, tree, bool);
static void sparc_dwarf_handle_frame_unspec (const char *, rtx, int);
static void sparc_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
@ -5429,7 +5429,7 @@ sparc_promote_function_mode (const_tree type,
/* Handle the TARGET_STRICT_ARGUMENT_NAMING target hook. */
static bool
sparc_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
sparc_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return TARGET_ARCH64 ? true : false;
}
@ -6075,9 +6075,11 @@ function_arg_vector_value (int size, int regno)
TARGET_FUNCTION_INCOMING_ARG. */
static rtx
sparc_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
sparc_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named, bool incoming_p)
{
const CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int regbase = (incoming_p
? SPARC_INCOMING_INT_ARG_FIRST
: SPARC_OUTGOING_INT_ARG_FIRST);
@ -6211,7 +6213,7 @@ sparc_function_arg_1 (const CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Handle the TARGET_FUNCTION_ARG target hook. */
static rtx
sparc_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sparc_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
return sparc_function_arg_1 (cum, mode, type, named, false);
@ -6220,7 +6222,7 @@ sparc_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Handle the TARGET_FUNCTION_INCOMING_ARG target hook. */
static rtx
sparc_function_incoming_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sparc_function_incoming_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named)
{
return sparc_function_arg_1 (cum, mode, type, named, true);
@ -6249,14 +6251,14 @@ sparc_function_arg_boundary (enum machine_mode mode, const_tree type)
mode] will be split between that reg and memory. */
static int
sparc_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
sparc_arg_partial_bytes (cumulative_args_t cum, enum machine_mode mode,
tree type, bool named)
{
int slotno, regno, padding;
/* We pass false for incoming_p here, it doesn't matter. */
slotno = function_arg_slotno (cum, mode, type, named, false,
&regno, &padding);
slotno = function_arg_slotno (get_cumulative_args (cum), mode, type, named,
false, &regno, &padding);
if (slotno == -1)
return 0;
@ -6307,7 +6309,7 @@ sparc_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode,
Specify whether to pass the argument by reference. */
static bool
sparc_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
sparc_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -6360,9 +6362,10 @@ sparc_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
TYPE is null for libcalls where that information may not be available. */
static void
sparc_function_arg_advance (struct sparc_args *cum, enum machine_mode mode,
sparc_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int regno, padding;
/* We pass false for incoming_p here, it doesn't matter. */

View File

@ -55,9 +55,6 @@ extern int spu_constant_address_p (rtx x);
extern bool spu_legitimate_constant_p (enum machine_mode, rtx);
extern int spu_initial_elimination_offset (int from, int to);
extern rtx spu_function_value (const_tree type, const_tree func);
extern void spu_setup_incoming_varargs (int *cum, enum machine_mode mode,
tree type, int *pretend_size,
int no_rtl);
extern int spu_expand_mov (rtx * ops, enum machine_mode mode);
extern int spu_split_load (rtx * ops);
extern int spu_split_store (rtx * ops);

View File

@ -187,11 +187,13 @@ static tree spu_handle_vector_attribute (tree * node, tree name, tree args,
int flags,
bool *no_add_attrs);
static int spu_naked_function_p (tree func);
static bool spu_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_mode mode,
static bool spu_pass_by_reference (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named);
static rtx spu_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
static rtx spu_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named);
static void spu_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
static void spu_function_arg_advance (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named);
static tree spu_build_builtin_va_list (void);
static void spu_va_start (tree, rtx);
@ -412,6 +414,10 @@ static const struct attribute_spec spu_attribute_table[] =
#undef TARGET_EXPAND_BUILTIN_VA_START
#define TARGET_EXPAND_BUILTIN_VA_START spu_va_start
static void spu_setup_incoming_varargs (cumulative_args_t cum,
enum machine_mode mode,
tree type, int *pretend_size,
int no_rtl);
#undef TARGET_SETUP_INCOMING_VARARGS
#define TARGET_SETUP_INCOMING_VARARGS spu_setup_incoming_varargs
@ -4039,10 +4045,11 @@ spu_function_value (const_tree type, const_tree func ATTRIBUTE_UNUSED)
}
static rtx
spu_function_arg (CUMULATIVE_ARGS *cum,
spu_function_arg (cumulative_args_t cum_v,
enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int byte_size;
if (*cum >= MAX_REGISTER_ARGS)
@ -4075,9 +4082,11 @@ spu_function_arg (CUMULATIVE_ARGS *cum,
}
static void
spu_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
spu_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum += (type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
? 1
: mode == BLKmode
@ -4089,7 +4098,7 @@ spu_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
/* Variable sized types are passed by reference. */
static bool
spu_pass_by_reference (CUMULATIVE_ARGS * cum ATTRIBUTE_UNUSED,
spu_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
@ -4282,8 +4291,8 @@ spu_gimplify_va_arg_expr (tree valist, tree type, gimple_seq * pre_p,
to the first unnamed parameters. If the first unnamed parameter is
in the stack then save no registers. Set pretend_args_size to the
amount of space needed to save the registers. */
void
spu_setup_incoming_varargs (CUMULATIVE_ARGS * cum, enum machine_mode mode,
static void
spu_setup_incoming_varargs (cumulative_args_t cum, enum machine_mode mode,
tree type, int *pretend_size, int no_rtl)
{
if (!no_rtl)
@ -4291,11 +4300,11 @@ spu_setup_incoming_varargs (CUMULATIVE_ARGS * cum, enum machine_mode mode,
rtx tmp;
int regno;
int offset;
int ncum = *cum;
int ncum = *get_cumulative_args (cum);
/* cum currently points to the last named argument, we want to
start at the next argument. */
spu_function_arg_advance (&ncum, mode, type, true);
spu_function_arg_advance (pack_cumulative_args (&ncum), mode, type, true);
offset = -STACK_POINTER_OFFSET;
for (regno = ncum; regno < MAX_REGISTER_ARGS; regno++)

View File

@ -1201,9 +1201,11 @@ xstormy16_function_profiler (void)
the word count. */
static void
xstormy16_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xstormy16_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
/* If an argument would otherwise be passed partially in registers,
and partially on the stack, the whole of it is passed on the
stack. */
@ -1215,9 +1217,11 @@ xstormy16_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
}
static rtx
xstormy16_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xstormy16_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
if (mode == VOIDmode)
return const0_rtx;
if (targetm.calls.must_pass_in_stack (mode, type)

View File

@ -77,7 +77,7 @@ static GTY(()) section * zbss_section;
Specify whether to pass the argument by reference. */
static bool
v850_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
v850_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode, const_tree type,
bool named ATTRIBUTE_UNUSED)
{
@ -94,7 +94,7 @@ v850_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
/* Implementing the Varargs Macros. */
static bool
v850_strict_argument_naming (CUMULATIVE_ARGS * ca ATTRIBUTE_UNUSED)
v850_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return !TARGET_GHS ? true : false;
}
@ -104,9 +104,10 @@ v850_strict_argument_naming (CUMULATIVE_ARGS * ca ATTRIBUTE_UNUSED)
is NULL_RTX, the argument will be pushed. */
static rtx
v850_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
v850_function_arg (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
rtx result = NULL_RTX;
int size, align;
@ -165,9 +166,10 @@ v850_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
/* Return the number of bytes which must be put into registers
for values which are part in registers and part in memory. */
static int
v850_arg_partial_bytes (CUMULATIVE_ARGS * cum, enum machine_mode mode,
v850_arg_partial_bytes (cumulative_args_t cum_v, enum machine_mode mode,
tree type, bool named)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int size, align;
if (TARGET_GHS && !named)
@ -206,9 +208,11 @@ v850_arg_partial_bytes (CUMULATIVE_ARGS * cum, enum machine_mode mode,
(TYPE is null for libcalls where that information may not be available.) */
static void
v850_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
v850_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
cum->nbytes += (((type && int_size_in_bytes (type) > 8
? GET_MODE_SIZE (Pmode)
: (mode != BLKmode
@ -2964,13 +2968,13 @@ v850_function_value (const_tree valtype,
/* Worker function for TARGET_SETUP_INCOMING_VARARGS. */
static void
v850_setup_incoming_varargs (CUMULATIVE_ARGS *ca,
v850_setup_incoming_varargs (cumulative_args_t ca,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
int *pretend_arg_size ATTRIBUTE_UNUSED,
int second_time ATTRIBUTE_UNUSED)
{
ca->anonymous_args = (!TARGET_GHS ? 1 : 0);
get_cumulative_args (ca)->anonymous_args = (!TARGET_GHS ? 1 : 0);
}
/* Worker function for TARGET_CAN_ELIMINATE. */

View File

@ -56,9 +56,9 @@ static void vax_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
static int vax_address_cost_1 (rtx);
static int vax_address_cost (rtx, bool);
static bool vax_rtx_costs (rtx, int, int, int *, bool);
static rtx vax_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx vax_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static void vax_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void vax_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx vax_struct_value_rtx (tree, int);
static rtx vax_builtin_setjmp_frame_value (void);
@ -2106,7 +2106,7 @@ vax_return_pops_args (tree fundecl ATTRIBUTE_UNUSED,
/* On the VAX all args are pushed. */
static rtx
vax_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
vax_function_arg (cumulative_args_t cum ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -2119,9 +2119,11 @@ vax_function_arg (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
may not be available.) */
static void
vax_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
vax_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
*cum += (mode != BLKmode
? (GET_MODE_SIZE (mode) + 3) & ~3
: (int_size_in_bytes (type) + 3) & ~3);

View File

@ -144,11 +144,11 @@ static tree xtensa_build_builtin_va_list (void);
static bool xtensa_return_in_memory (const_tree, const_tree);
static tree xtensa_gimplify_va_arg_expr (tree, tree, gimple_seq *,
gimple_seq *);
static void xtensa_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
static void xtensa_function_arg_advance (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx xtensa_function_arg (CUMULATIVE_ARGS *, enum machine_mode,
static rtx xtensa_function_arg (cumulative_args_t, enum machine_mode,
const_tree, bool);
static rtx xtensa_function_incoming_arg (CUMULATIVE_ARGS *,
static rtx xtensa_function_incoming_arg (cumulative_args_t,
enum machine_mode, const_tree, bool);
static rtx xtensa_function_value (const_tree, const_tree, bool);
static rtx xtensa_libcall_value (enum machine_mode, const_rtx);
@ -2061,13 +2061,13 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, int incoming)
/* Advance the argument to the next argument position. */
static void
xtensa_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xtensa_function_arg_advance (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
int words, max;
int *arg_words;
arg_words = &cum->arg_words;
arg_words = &get_cumulative_args (cum)->arg_words;
max = MAX_ARGS_IN_REGISTERS;
words = (((mode != BLKmode)
@ -2088,9 +2088,10 @@ xtensa_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
if this is an incoming argument to the current function. */
static rtx
xtensa_function_arg_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xtensa_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool incoming_p)
{
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int regbase, words, max;
int *arg_words;
int regno;
@ -2123,7 +2124,7 @@ xtensa_function_arg_1 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_FUNCTION_ARG. */
static rtx
xtensa_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xtensa_function_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
return xtensa_function_arg_1 (cum, mode, type, false);
@ -2132,7 +2133,7 @@ xtensa_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
/* Implement TARGET_FUNCTION_INCOMING_ARG. */
static rtx
xtensa_function_incoming_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
xtensa_function_incoming_arg (cumulative_args_t cum, enum machine_mode mode,
const_tree type, bool named ATTRIBUTE_UNUSED)
{
return xtensa_function_arg_1 (cum, mode, type, true);

View File

@ -3968,7 +3968,7 @@ This section describes the macros which let you control how various
types of arguments are passed in registers or how they are arranged in
the stack.
@deftypefn {Target Hook} rtx TARGET_FUNCTION_ARG (CUMULATIVE_ARGS *@var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
@deftypefn {Target Hook} rtx TARGET_FUNCTION_ARG (cumulative_args_t @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
Return an RTX indicating whether a function argument is passed in a
register and if so, which register.
@ -4028,7 +4028,7 @@ definition that is usually appropriate, refer to @file{expr.h} for additional
documentation.
@end deftypefn
@deftypefn {Target Hook} rtx TARGET_FUNCTION_INCOMING_ARG (CUMULATIVE_ARGS *@var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
@deftypefn {Target Hook} rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
Define this hook if the target machine has ``register windows'', so
that the register in which a function sees an arguments is not
necessarily the same as the one in which the caller passed the
@ -4044,7 +4044,7 @@ If @code{TARGET_FUNCTION_INCOMING_ARG} is not defined,
@code{TARGET_FUNCTION_ARG} serves both purposes.
@end deftypefn
@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *@var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t @var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named})
This target hook returns the number of bytes at the beginning of an
argument that must be put in registers. The value must be zero for
arguments that are passed entirely in registers or that are entirely
@ -4063,7 +4063,7 @@ register to be used by the caller for this argument; likewise
@code{TARGET_FUNCTION_INCOMING_ARG}, for the called function.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (cumulative_args_t @var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
This target hook should return @code{true} if an argument at the
position indicated by @var{cum} should be passed by reference. This
predicate is queried after target independent reasons for being
@ -4075,7 +4075,7 @@ The pointer is passed in whatever way is appropriate for passing a pointer
to that type.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (cumulative_args_t @var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
The function argument described by the parameters to this hook is
known to be passed by reference. The hook should return true if the
function argument should be copied by the callee instead of copied
@ -4154,7 +4154,7 @@ argument @var{libname} exists for symmetry with
@c --mew 5feb93 i switched the order of the sentences. --mew 10feb93
@end defmac
@deftypefn {Target Hook} void TARGET_FUNCTION_ARG_ADVANCE (CUMULATIVE_ARGS *@var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
@deftypefn {Target Hook} void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t @var{ca}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named})
This hook updates the summarizer variable pointed to by @var{ca} to
advance past an argument in the argument list. The values @var{mode},
@var{type} and @var{named} describe that argument. Once this is done,
@ -5045,7 +5045,7 @@ return value of this function should be an RTX that contains the value
to use as the return of @code{__builtin_saveregs}.
@end deftypefn
@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS *@var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int *@var{pretend_args_size}, int @var{second_time})
@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t @var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int *@var{pretend_args_size}, int @var{second_time})
This target hook offers an alternative to using
@code{__builtin_saveregs} and defining the hook
@code{TARGET_EXPAND_BUILTIN_SAVEREGS}. Use it to store the anonymous
@ -5079,7 +5079,7 @@ end of the source file. The hook @code{TARGET_SETUP_INCOMING_VARARGS} should
not generate any instructions in this case.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS *@var{ca})
@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t @var{ca})
Define this hook to return @code{true} if the location where a function
argument is passed depends on whether or not it is a named argument.
@ -5094,7 +5094,7 @@ except the last are treated as named.
You need not define this hook if it always returns @code{false}.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED (CUMULATIVE_ARGS *@var{ca})
@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED (cumulative_args_t @var{ca})
If you need to conditionally change ABIs so that one works with
@code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither
@code{TARGET_SETUP_INCOMING_VARARGS} nor @code{TARGET_STRICT_ARGUMENT_NAMING} was

View File

@ -2321,11 +2321,13 @@ check_mem_read_use (rtx *loc, void *data)
static bool
get_call_args (rtx call_insn, tree fn, rtx *args, int nargs)
{
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
tree arg;
int idx;
INIT_CUMULATIVE_ARGS (args_so_far, TREE_TYPE (fn), NULL_RTX, 0, 3);
INIT_CUMULATIVE_ARGS (args_so_far_v, TREE_TYPE (fn), NULL_RTX, 0, 3);
args_so_far = pack_cumulative_args (&args_so_far_v);
arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
for (idx = 0;
@ -2334,7 +2336,7 @@ get_call_args (rtx call_insn, tree fn, rtx *args, int nargs)
{
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 = targetm.calls.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;
@ -2368,7 +2370,7 @@ get_call_args (rtx call_insn, tree fn, rtx *args, int nargs)
if (tmp)
args[idx] = tmp;
targetm.calls.function_arg_advance (&args_so_far, mode, NULL_TREE, true);
targetm.calls.function_arg_advance (args_so_far, mode, NULL_TREE, true);
}
if (arg != void_list_node || idx != nargs)
return false;

View File

@ -1228,23 +1228,25 @@ block_move_libcall_safe_for_call_parm (void)
/* If any argument goes in memory, then it might clobber an outgoing
argument. */
{
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
tree fn, arg;
fn = emit_block_move_libcall_fn (false);
INIT_CUMULATIVE_ARGS (args_so_far, TREE_TYPE (fn), NULL_RTX, 0, 3);
INIT_CUMULATIVE_ARGS (args_so_far_v, TREE_TYPE (fn), NULL_RTX, 0, 3);
args_so_far = pack_cumulative_args (&args_so_far_v);
arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
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,
rtx tmp = targetm.calls.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 (targetm.calls.arg_partial_bytes (args_so_far, mode, NULL, 1))
return false;
targetm.calls.function_arg_advance (&args_so_far, mode,
targetm.calls.function_arg_advance (args_so_far, mode,
NULL_TREE, true);
}
}

View File

@ -2128,7 +2128,8 @@ pass_by_reference (CUMULATIVE_ARGS *ca, enum machine_mode mode,
}
}
return targetm.calls.pass_by_reference (ca, mode, type, named_arg);
return targetm.calls.pass_by_reference (pack_cumulative_args (ca), mode,
type, named_arg);
}
/* Return true if TYPE, which is passed by reference, should be callee
@ -2140,7 +2141,8 @@ reference_callee_copied (CUMULATIVE_ARGS *ca, enum machine_mode mode,
{
if (type && TREE_ADDRESSABLE (type))
return false;
return targetm.calls.callee_copies (ca, mode, type, named_arg);
return targetm.calls.callee_copies (pack_cumulative_args (ca), mode, type,
named_arg);
}
/* Structures to communicate between the subroutines of assign_parms.
@ -2149,7 +2151,10 @@ reference_callee_copied (CUMULATIVE_ARGS *ca, enum machine_mode mode,
struct assign_parm_data_all
{
CUMULATIVE_ARGS args_so_far;
/* When INIT_CUMULATIVE_ARGS gets revamped, allocating CUMULATIVE_ARGS
should become a job of the target or otherwise encapsulated. */
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
struct args_size stack_args_size;
tree function_result_decl;
tree orig_fnargs;
@ -2189,11 +2194,12 @@ assign_parms_initialize_all (struct assign_parm_data_all *all)
fntype = TREE_TYPE (current_function_decl);
#ifdef INIT_CUMULATIVE_INCOMING_ARGS
INIT_CUMULATIVE_INCOMING_ARGS (all->args_so_far, fntype, NULL_RTX);
INIT_CUMULATIVE_INCOMING_ARGS (all->args_so_far_v, fntype, NULL_RTX);
#else
INIT_CUMULATIVE_ARGS (all->args_so_far, fntype, NULL_RTX,
INIT_CUMULATIVE_ARGS (all->args_so_far_v, fntype, NULL_RTX,
current_function_decl, -1);
#endif
all->args_so_far = pack_cumulative_args (&all->args_so_far_v);
#ifdef REG_PARM_STACK_SPACE
all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
@ -2314,7 +2320,7 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
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 (targetm.calls.strict_argument_naming (all->args_so_far))
data->named_arg = 1; /* Only variadic ones are unnamed. */
else
data->named_arg = 0; /* Treat as variadic. */
@ -2350,7 +2356,7 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
passed_type = TREE_TYPE (first_field (passed_type));
/* See if this arg was passed by invisible reference. */
if (pass_by_reference (&all->args_so_far, passed_mode,
if (pass_by_reference (&all->args_so_far_v, passed_mode,
passed_type, data->named_arg))
{
passed_type = nominal_type = build_pointer_type (passed_type);
@ -2379,7 +2385,7 @@ assign_parms_setup_varargs (struct assign_parm_data_all *all,
{
int varargs_pretend_bytes = 0;
targetm.calls.setup_incoming_varargs (&all->args_so_far,
targetm.calls.setup_incoming_varargs (all->args_so_far,
data->promoted_mode,
data->passed_type,
&varargs_pretend_bytes, no_rtl);
@ -2408,7 +2414,7 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
return;
}
entry_parm = targetm.calls.function_incoming_arg (&all->args_so_far,
entry_parm = targetm.calls.function_incoming_arg (all->args_so_far,
data->promoted_mode,
data->passed_type,
data->named_arg);
@ -2432,10 +2438,10 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
#endif
if (!in_regs && !data->named_arg)
{
if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
if (targetm.calls.pretend_outgoing_varargs_named (all->args_so_far))
{
rtx tem;
tem = targetm.calls.function_incoming_arg (&all->args_so_far,
tem = targetm.calls.function_incoming_arg (all->args_so_far,
data->promoted_mode,
data->passed_type, true);
in_regs = tem != NULL;
@ -2452,7 +2458,7 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
{
int partial;
partial = targetm.calls.arg_partial_bytes (&all->args_so_far,
partial = targetm.calls.arg_partial_bytes (all->args_so_far,
data->promoted_mode,
data->passed_type,
data->named_arg);
@ -3388,7 +3394,7 @@ assign_parms (tree fndecl)
set_decl_incoming_rtl (parm, data.entry_parm, false);
/* Update info on where next arg arrives in registers. */
targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
targetm.calls.function_arg_advance (all.args_so_far, data.promoted_mode,
data.passed_type, data.named_arg);
assign_parm_adjust_stack_rtl (&data);
@ -3498,7 +3504,7 @@ assign_parms (tree fndecl)
/* For stdarg.h function, save info about
regs and stack space used by the named args. */
crtl->args.info = all.args_so_far;
crtl->args.info = all.args_so_far_v;
/* Set the rtx used for the function return value. Put this in its
own variable so any optimizers that need this information don't have
@ -3587,7 +3593,7 @@ 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,
targetm.calls.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
@ -3606,7 +3612,7 @@ gimplify_parameters (void)
if (data.passed_pointer)
{
tree type = TREE_TYPE (data.passed_type);
if (reference_callee_copied (&all.args_so_far, TYPE_MODE (type),
if (reference_callee_copied (&all.args_so_far_v, TYPE_MODE (type),
type, data.named_arg))
{
tree local, t;

View File

@ -1924,7 +1924,7 @@ DEFHOOK
(pass_by_reference,
"",
bool,
(CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
(cumulative_args_t cum, enum machine_mode mode, const_tree type, bool named),
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
DEFHOOK
@ -1937,14 +1937,14 @@ DEFHOOK
DEFHOOK
(setup_incoming_varargs,
"",
void, (CUMULATIVE_ARGS *args_so_far, enum machine_mode mode, tree type,
void, (cumulative_args_t 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),
bool, (cumulative_args_t ca),
hook_bool_CUMULATIVE_ARGS_false)
/* Returns true if we should use
@ -1953,7 +1953,7 @@ DEFHOOK
DEFHOOK
(pretend_outgoing_varargs_named,
"",
bool, (CUMULATIVE_ARGS *ca),
bool, (cumulative_args_t ca),
default_pretend_outgoing_varargs_named)
/* Given a complex type T, return true if a parameter of type T
@ -1980,7 +1980,7 @@ DEFHOOK
(callee_copies,
"",
bool,
(CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
(cumulative_args_t 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
@ -1989,7 +1989,7 @@ DEFHOOK
DEFHOOK
(arg_partial_bytes,
"",
int, (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, bool named),
int, (cumulative_args_t 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
@ -1999,7 +1999,7 @@ DEFHOOK
(function_arg_advance,
"",
void,
(CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, bool named),
(cumulative_args_t 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
@ -2009,7 +2009,7 @@ DEFHOOK
DEFHOOK
(function_arg,
"",
rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
rtx, (cumulative_args_t ca, enum machine_mode mode, const_tree type,
bool named),
default_function_arg)
@ -2018,7 +2018,7 @@ DEFHOOK
DEFHOOK
(function_incoming_arg,
"",
rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
rtx, (cumulative_args_t ca, enum machine_mode mode, const_tree type,
bool named),
default_function_incoming_arg)

View File

@ -1,5 +1,6 @@
/* Data structure definitions for a generic GCC target.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
2011
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
@ -49,9 +50,24 @@
#ifndef GCC_TARGET_H
#define GCC_TARGET_H
#include "tm.h"
#include "insn-modes.h"
#ifdef ENABLE_CHECKING
typedef struct { void *magic; void *p; } cumulative_args_t;
#else /* !ENABLE_CHECKING */
/* When using a GCC build compiler, we could use
__attribute__((transparent_union)) to get cumulative_args_t function
arguments passed like scalars where the ABI would mandate a less
efficient way of argument passing otherwise. However, that would come
at the cost of less type-safe !ENABLE_CHECKING compilation. */
typedef union { void *p; } cumulative_args_t;
#endif /* !ENABLE_CHECKING */
/* Types used by the record_gcc_switches() target function. */
typedef enum
{
@ -141,4 +157,32 @@ enum vect_cost_for_stmt
extern struct gcc_target targetm;
#ifdef GCC_TM_H
#ifndef CUMULATIVE_ARGS_MAGIC
#define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls)
#endif
static inline CUMULATIVE_ARGS *
get_cumulative_args (cumulative_args_t arg)
{
#ifdef ENABLE_CHECKING
gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
#endif /* ENABLE_CHECKING */
return (CUMULATIVE_ARGS *) arg.p;
}
static inline cumulative_args_t
pack_cumulative_args (CUMULATIVE_ARGS *arg)
{
cumulative_args_t ret;
#ifdef ENABLE_CHECKING
ret.magic = CUMULATIVE_ARGS_MAGIC;
#endif /* ENABLE_CHECKING */
ret.p = (void *) arg;
return ret;
}
#endif /* GCC_TM_H */
#endif /* GCC_TARGET_H */

View File

@ -170,7 +170,7 @@ default_expand_builtin_saveregs (void)
}
void
default_setup_incoming_varargs (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
default_setup_incoming_varargs (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
int *pretend_arg_size ATTRIBUTE_UNUSED,
@ -189,13 +189,13 @@ default_builtin_setjmp_frame_value (void)
/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */
bool
hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return false;
}
bool
default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
default_pretend_outgoing_varargs_named (cumulative_args_t ca ATTRIBUTE_UNUSED)
{
return (targetm.calls.setup_incoming_varargs
!= default_setup_incoming_varargs);
@ -253,7 +253,7 @@ default_mode_rep_extended (enum machine_mode mode ATTRIBUTE_UNUSED,
/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */
bool
hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS * a ATTRIBUTE_UNUSED)
hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t a ATTRIBUTE_UNUSED)
{
return true;
}
@ -302,7 +302,7 @@ default_cxx_get_cookie_size (tree type)
of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK. */
bool
hook_pass_by_reference_must_pass_in_stack (CUMULATIVE_ARGS *c ATTRIBUTE_UNUSED,
hook_pass_by_reference_must_pass_in_stack (cumulative_args_t c ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED,
bool named_arg ATTRIBUTE_UNUSED)
{
@ -313,7 +313,7 @@ hook_pass_by_reference_must_pass_in_stack (CUMULATIVE_ARGS *c ATTRIBUTE_UNUSED,
version of the hook is true for all named arguments. */
bool
hook_callee_copies_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
hook_callee_copies_named (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED, bool named)
{
@ -555,7 +555,7 @@ default_builtin_reciprocal (unsigned int fn ATTRIBUTE_UNUSED,
bool
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false (
CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
{
@ -564,7 +564,7 @@ hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false (
bool
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true (
CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
{
@ -573,7 +573,7 @@ hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true (
int
hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 (
CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
{
@ -581,7 +581,7 @@ hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 (
}
void
default_function_arg_advance (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
default_function_arg_advance (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -590,7 +590,7 @@ default_function_arg_advance (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
}
rtx
default_function_arg (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
default_function_arg (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)
@ -599,7 +599,7 @@ default_function_arg (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
}
rtx
default_function_incoming_arg (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED,
default_function_incoming_arg (cumulative_args_t ca ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
const_tree type ATTRIBUTE_UNUSED,
bool named ATTRIBUTE_UNUSED)

View File

@ -35,9 +35,9 @@ extern enum machine_mode default_cc_modes_compatible (enum machine_mode,
extern bool default_return_in_memory (const_tree, const_tree);
extern rtx default_expand_builtin_saveregs (void);
extern void default_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int);
extern void default_setup_incoming_varargs (cumulative_args_t, enum machine_mode, tree, int *, int);
extern rtx default_builtin_setjmp_frame_value (void);
extern bool default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *);
extern bool default_pretend_outgoing_varargs_named (cumulative_args_t);
extern enum machine_mode default_eh_return_filter_mode (void);
extern enum machine_mode default_libgcc_cmp_return_mode (void);
@ -58,9 +58,9 @@ extern tree default_cxx_guard_type (void);
extern tree default_cxx_get_cookie_size (tree);
extern bool hook_pass_by_reference_must_pass_in_stack
(CUMULATIVE_ARGS *, enum machine_mode mode, const_tree, bool);
(cumulative_args_t, enum machine_mode mode, const_tree, bool);
extern bool hook_callee_copies_named
(CUMULATIVE_ARGS *ca, enum machine_mode, const_tree, bool);
(cumulative_args_t ca, enum machine_mode, const_tree, bool);
extern void default_print_operand (FILE *, rtx, int);
extern void default_print_operand_address (FILE *, rtx);
@ -96,23 +96,23 @@ extern unsigned int default_autovectorize_vector_sizes (void);
/* These are here, and not in hooks.[ch], because not all users of
hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS. */
extern bool hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *);
extern bool hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *);
extern bool hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t);
extern bool hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t);
extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
(cumulative_args_t, enum machine_mode, const_tree, bool);
extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
(cumulative_args_t, enum machine_mode, const_tree, bool);
extern int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0
(CUMULATIVE_ARGS *, enum machine_mode, tree, bool);
(cumulative_args_t, enum machine_mode, tree, bool);
extern const char *hook_invalid_arg_for_unprototyped_fn
(const_tree, const_tree, const_tree);
extern void default_function_arg_advance
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
(cumulative_args_t, enum machine_mode, const_tree, bool);
extern rtx default_function_arg
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
(cumulative_args_t, enum machine_mode, const_tree, bool);
extern rtx default_function_incoming_arg
(CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool);
(cumulative_args_t, enum machine_mode, const_tree, bool);
extern unsigned int default_function_arg_boundary (enum machine_mode,
const_tree);
extern bool hook_bool_const_rtx_commutative_p (const_rtx, int);

View File

@ -5589,9 +5589,11 @@ prepare_call_arguments (basic_block bb, rtx insn)
rtx this_arg = NULL_RTX;
tree type = NULL_TREE, t, fndecl = NULL_TREE;
tree obj_type_ref = NULL_TREE;
CUMULATIVE_ARGS args_so_far;
CUMULATIVE_ARGS args_so_far_v;
cumulative_args_t args_so_far;
memset (&args_so_far, 0, sizeof (args_so_far));
memset (&args_so_far_v, 0, sizeof (args_so_far_v));
args_so_far = pack_cumulative_args (&args_so_far_v);
if (GET_CODE (call) == PARALLEL)
call = XVECEXP (call, 0, 0);
if (GET_CODE (call) == SET)
@ -5639,11 +5641,11 @@ prepare_call_arguments (basic_block bb, rtx insn)
tree struct_addr = build_pointer_type (TREE_TYPE (type));
enum machine_mode mode = TYPE_MODE (struct_addr);
rtx reg;
INIT_CUMULATIVE_ARGS (args_so_far, type, NULL_RTX, fndecl,
INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl,
nargs + 1);
reg = targetm.calls.function_arg (&args_so_far, mode,
reg = targetm.calls.function_arg (args_so_far, mode,
struct_addr, true);
targetm.calls.function_arg_advance (&args_so_far, mode,
targetm.calls.function_arg_advance (args_so_far, mode,
struct_addr, true);
if (reg == NULL_RTX)
{
@ -5658,14 +5660,14 @@ prepare_call_arguments (basic_block bb, rtx insn)
}
else
#endif
INIT_CUMULATIVE_ARGS (args_so_far, type, NULL_RTX, fndecl,
INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl,
nargs);
if (obj_type_ref && TYPE_ARG_TYPES (type) != void_list_node)
{
enum machine_mode mode;
t = TYPE_ARG_TYPES (type);
mode = TYPE_MODE (TREE_VALUE (t));
this_arg = targetm.calls.function_arg (&args_so_far, mode,
this_arg = targetm.calls.function_arg (args_so_far, mode,
TREE_VALUE (t), true);
if (this_arg && !REG_P (this_arg))
this_arg = NULL_RTX;
@ -5745,12 +5747,12 @@ prepare_call_arguments (basic_block bb, rtx insn)
tree argtype = TREE_VALUE (t);
enum machine_mode mode = TYPE_MODE (argtype);
rtx reg;
if (pass_by_reference (&args_so_far, mode, argtype, true))
if (pass_by_reference (&args_so_far_v, mode, argtype, true))
{
argtype = build_pointer_type (argtype);
mode = TYPE_MODE (argtype);
}
reg = targetm.calls.function_arg (&args_so_far, mode,
reg = targetm.calls.function_arg (args_so_far, mode,
argtype, true);
if (TREE_CODE (argtype) == REFERENCE_TYPE
&& INTEGRAL_TYPE_P (TREE_TYPE (argtype))
@ -5804,7 +5806,7 @@ prepare_call_arguments (basic_block bb, rtx insn)
}
}
}
targetm.calls.function_arg_advance (&args_so_far, mode,
targetm.calls.function_arg_advance (args_so_far, mode,
argtype, true);
t = TREE_CHAIN (t);
}