Mercurial > hg > CbC > CbC_gcc
diff gcc/config/lm32/lm32.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/config/lm32/lm32.c Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/config/lm32/lm32.c Thu Feb 13 11:34:05 2020 +0900 @@ -1,7 +1,7 @@ /* Subroutines used for code generation on the Lattice Mico32 architecture. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2018 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of GCC. @@ -64,7 +64,7 @@ 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_t cum, - machine_mode mode, tree type, + const function_arg_info &, int *pretend_size, int no_rtl); static bool lm32_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno, int *total, bool speed); @@ -73,12 +73,9 @@ lm32_legitimate_address_p (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_t cum, - machine_mode mode, const_tree type, - bool named); +static rtx lm32_function_arg (cumulative_args_t, const function_arg_info &); static void lm32_function_arg_advance (cumulative_args_t cum, - machine_mode mode, - const_tree type, bool named); + const function_arg_info &); static bool lm32_hard_regno_mode_ok (unsigned int, machine_mode); static bool lm32_modes_tieable_p (machine_mode, machine_mode); static HOST_WIDE_INT lm32_starting_frame_offset (void); @@ -460,7 +457,7 @@ and calculate size required to store them in the stack. */ for (regno = 1; regno < SP_REGNUM; regno++) { - if (df_regs_ever_live_p (regno) && !call_used_regs[regno]) + if (df_regs_ever_live_p (regno) && !call_used_or_fixed_reg_p (regno)) { reg_save_mask |= 1 << regno; callee_size += UNITS_PER_WORD; @@ -619,39 +616,34 @@ Value is zero to push the argument on the stack, or a hard register in which to store the argument. - MODE is the argument's machine mode. - TYPE is the data type of the argument (as a tree). - This is null for libcalls where that information may - not be available. CUM is a variable of type CUMULATIVE_ARGS which gives info about the preceding args and about the function being called. - NAMED is nonzero if this argument is a named parameter - (otherwise it is an extra parameter matching an ellipsis). */ + ARG is a description of the argument. */ static rtx -lm32_function_arg (cumulative_args_t cum_v, machine_mode mode, - const_tree type, bool named) +lm32_function_arg (cumulative_args_t cum_v, const function_arg_info &arg) { CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v); - if (mode == VOIDmode) + if (arg.end_marker_p ()) /* Compute operand 2 of the call insn. */ return GEN_INT (0); - if (targetm.calls.must_pass_in_stack (mode, type)) + if (targetm.calls.must_pass_in_stack (arg)) return NULL_RTX; - if (!named || (*cum + LM32_NUM_REGS2 (mode, type) > LM32_NUM_ARG_REGS)) + if (!arg.named + || *cum + LM32_NUM_REGS2 (arg.mode, arg.type) > LM32_NUM_ARG_REGS) return NULL_RTX; - return gen_rtx_REG (mode, *cum + LM32_FIRST_ARG_REG); + return gen_rtx_REG (arg.mode, *cum + LM32_FIRST_ARG_REG); } static void -lm32_function_arg_advance (cumulative_args_t cum, machine_mode mode, - const_tree type, bool named ATTRIBUTE_UNUSED) +lm32_function_arg_advance (cumulative_args_t cum, + const function_arg_info &arg) { - *get_cumulative_args (cum) += LM32_NUM_REGS2 (mode, type); + *get_cumulative_args (cum) += LM32_NUM_REGS2 (arg.mode, arg.type); } HOST_WIDE_INT @@ -684,8 +676,9 @@ } static void -lm32_setup_incoming_varargs (cumulative_args_t cum_v, machine_mode mode, - tree type, int *pretend_size, int no_rtl) +lm32_setup_incoming_varargs (cumulative_args_t cum_v, + const function_arg_info &arg, + int *pretend_size, int no_rtl) { CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v); int first_anon_arg; @@ -702,12 +695,7 @@ registers, if any used in passing this named paramter in order to determine which is the first registers used to pass anonymous arguments. */ - int size; - - if (mode == BLKmode) - size = int_size_in_bytes (type); - else - size = GET_MODE_SIZE (mode); + int size = arg.promoted_size_in_bytes (); first_anon_arg = *cum + LM32_FIRST_ARG_REG + @@ -868,7 +856,7 @@ src = adjust_address (src, BLKmode, offset); dest = adjust_address (dest, BLKmode, offset); move_by_pieces (dest, src, length - offset, - MIN (MEM_ALIGN (src), MEM_ALIGN (dest)), 0); + MIN (MEM_ALIGN (src), MEM_ALIGN (dest)), RETURN_BEGIN); } }