diff options
Diffstat (limited to 'gcc/config/m32r/m32r.c')
-rw-r--r-- | gcc/config/m32r/m32r.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index b5a5325724a..170c4c67b4c 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -102,6 +102,8 @@ static void init_idents (void); static bool m32r_rtx_costs (rtx, int, int, int *); static bool m32r_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); +static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, + tree, bool); /* Initialize the GCC target structure. */ #undef TARGET_ATTRIBUTE_TABLE @@ -145,6 +147,8 @@ static bool m32r_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, #define TARGET_MUST_PASS_IN_STACK must_pass_in_stack_var_size #undef TARGET_PASS_BY_REFERENCE #define TARGET_PASS_BY_REFERENCE m32r_pass_by_reference +#undef TARGET_ARG_PARTIAL_BYTES +#define TARGET_ARG_PARTIAL_BYTES m32r_arg_partial_bytes struct gcc_target targetm = TARGET_INITIALIZER; @@ -1321,13 +1325,11 @@ gen_split_move_double (rtx operands[]) } -/* Implements the FUNCTION_ARG_PARTIAL_NREGS macro. */ - -int -function_arg_partial_nregs (CUMULATIVE_ARGS *cum, enum machine_mode mode, - tree type, int named ATTRIBUTE_UNUSED) +static int +m32r_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode, + tree type, bool named ATTRIBUTE_UNUSED) { - int ret; + int words; unsigned int size = (((mode == BLKmode && type) ? (unsigned int) int_size_in_bytes (type) @@ -1335,13 +1337,13 @@ function_arg_partial_nregs (CUMULATIVE_ARGS *cum, enum machine_mode mode, / UNITS_PER_WORD; if (*cum >= M32R_MAX_PARM_REGS) - ret = 0; + words = 0; else if (*cum + size > M32R_MAX_PARM_REGS) - ret = (*cum + size) - M32R_MAX_PARM_REGS; + words = (*cum + size) - M32R_MAX_PARM_REGS; else - ret = 0; + words = 0; - return ret; + return words * UNITS_PER_WORD; } /* Worker function for TARGET_RETURN_IN_MEMORY. */ |