diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-20 08:52:17 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-08-20 08:52:17 +0000 |
commit | a7c81bc1fb43366ca1b4332d8a6042b648a84cdc (patch) | |
tree | 789c552939f2fbd5585369d30b3beb3dde5a2a72 /gcc/config/nds32/nds32.c | |
parent | 4f53599cb5b822cd7f95997861c2e064977ecb6a (diff) | |
download | gcc-a7c81bc1fb43366ca1b4332d8a6042b648a84cdc.zip gcc-a7c81bc1fb43366ca1b4332d8a6042b648a84cdc.tar.gz gcc-a7c81bc1fb43366ca1b4332d8a6042b648a84cdc.tar.bz2 |
Use function_arg_info for TARGET_ARG_PARTIAL_BYTES
This patch adds the function_arg_info class and uses it for
TARGET_ARG_PARTIAL_BYTES.
The hook is passed the promoted mode instead of the original type mode.
The arguments aren't mentioned in the documentation, which is why the
target.def change is so small.
The patch changes "true" to "arg.named" in:
gcc_assert (!epiphany_pass_by_reference (cum, mode, type, /* named */ true));
but epiphany_pass_by_reference doesn't care about the named flag.
2019-08-20 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* target.def (arg_partial_bytes): Take a function_arg_info instead
of a mode, type and named flag.
* doc/tm.texi: Regenerate.
* target.h (function_arg_info): Declare.
* calls.h (function_arg_info): New class.
* targhooks.h (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
(hook_int_CUMULATIVE_ARGS_arg_info_0): Declare.
* targhooks.c (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
(hook_int_CUMULATIVE_ARGS_arg_info_0): New function.
* calls.c (initialize_argument_information): Update call to
targetm.calls.partial_bytes.
(emit_library_call_value_1): Likewise.
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
* function.c (assign_parm_find_entry_rtl): Likewise.
* config/alpha/alpha.c (alpha_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/arc/arc.c (arc_arg_partial_bytes): Likewise.
* config/arm/arm.c (arm_arg_partial_bytes): Likewise.
(cmse_func_args_or_return_in_stack): Update accordingly.
* config/bfin/bfin.c (bfin_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/cris/cris.c (cris_arg_partial_bytes): Likewise.
* config/csky/csky.c (csky_arg_partial_bytes): Likewise.
* config/epiphany/epiphany.c (epiphany_arg_partial_bytes): Likewise.
* config/fr30/fr30.c: Include calls.h.
(fr30_arg_partial_bytes): Take a function_arg_info instead of a mode,
type and named flag.
* config/frv/frv.c: Include calls.h.
(frv_arg_partial_bytes): Take a function_arg_info instead of a mode,
type and named flag.
* config/ft32/ft32.c (ft32_arg_partial_bytes): Likewise.
* config/gcn/gcn.c (gcn_arg_partial_bytes): Likewise.
* config/ia64/ia64.c (ia64_arg_partial_bytes): Likewise.
* config/iq2000/iq2000.c (iq2000_arg_partial_bytes): Likewise.
* config/m32r/m32r.c (m32r_arg_partial_bytes): Likewise.
* config/mcore/mcore.c (mcore_arg_partial_bytes): Likewise.
* config/microblaze/microblaze.c (function_arg_partial_bytes):
Likewise.
* config/mips/mips.c (mips_arg_partial_bytes): Likewise.
* config/mn10300/mn10300.c (mn10300_arg_partial_bytes): Likewise.
* config/moxie/moxie.c (moxie_arg_partial_bytes): Likewise.
* config/msp430/msp430.c (msp430_arg_partial_bytes): Likewise.
* config/nds32/nds32.c (nds32_arg_partial_bytes): Likewise.
* config/nios2/nios2.c (nios2_arg_partial_bytes): Likewise.
* config/pa/pa.c (pa_arg_partial_bytes): Likewise.
* config/pru/pru.c (pru_arg_partial_bytes): Likewise.
* config/riscv/riscv.c (riscv_arg_partial_bytes): Likewise.
* config/rs6000/rs6000-internal.h (rs6000_arg_partial_bytes): Likewise.
* config/rs6000/rs6000-call.c (rs6000_arg_partial_bytes): Likewise.
(rs6000_parm_needs_stack): Update call accordingly.
* config/sh/sh.c (sh_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/sparc/sparc.c (sparc_arg_partial_bytes): Likewise.
* config/v850/v850.c (v850_arg_partial_bytes): Likewise.
From-SVN: r274697
Diffstat (limited to 'gcc/config/nds32/nds32.c')
-rw-r--r-- | gcc/config/nds32/nds32.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c index eba9812..c92a598 100644 --- a/gcc/config/nds32/nds32.c +++ b/gcc/config/nds32/nds32.c @@ -1963,8 +1963,7 @@ nds32_must_pass_in_stack (machine_mode mode, const_tree type) } static int -nds32_arg_partial_bytes (cumulative_args_t ca, machine_mode mode, - tree type, bool named ATTRIBUTE_UNUSED) +nds32_arg_partial_bytes (cumulative_args_t ca, const function_arg_info &arg) { /* 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 @@ -1985,18 +1984,19 @@ nds32_arg_partial_bytes (cumulative_args_t ca, machine_mode mode, /* If we have already runned out of argument registers, return zero so that the argument will be entirely pushed on the stack. */ - if (NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, mode, type) + if (NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, arg.mode, arg.type) >= NDS32_GPR_ARG_FIRST_REGNUM + NDS32_MAX_GPR_REGS_FOR_ARGS) return 0; /* Calculate how many registers do we need for this argument. */ - needed_reg_count = NDS32_NEED_N_REGS_FOR_ARG (mode, type); + needed_reg_count = NDS32_NEED_N_REGS_FOR_ARG (arg.mode, arg.type); /* Calculate how many argument registers have left for passing argument. Note that we should count it from next available register number. */ remaining_reg_count = NDS32_MAX_GPR_REGS_FOR_ARGS - - (NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, mode, type) + - (NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, + arg.mode, arg.type) - NDS32_GPR_ARG_FIRST_REGNUM); /* Note that we have to return the nubmer of bytes, not registers count. */ |