Commit 0983497f by Oleg Endo

sh.h (GET_SH_ARG_CLASS): Convert macro into ...

gcc/
	* config/sh/sh.h (GET_SH_ARG_CLASS): Convert macro into ...
	* config/sh/sh.c (get_sh_arg_class): ... this new function.  Update its
	users.

From-SVN: r236009
parent df4bacab
2016-05-08 Oleg Endo <olegendo@gcc.gnu.org> 2016-05-08 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh.h (GET_SH_ARG_CLASS): Convert macro into ...
* config/sh/sh.c (get_sh_arg_class): ... this new function. Update its
users.
2016-05-08 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh-protos.h (sh_media_register_for_return): Remove. * config/sh/sh-protos.h (sh_media_register_for_return): Remove.
* config/sh/sh.c: Define and declare variables on first use throughout * config/sh/sh.c: Define and declare variables on first use throughout
the file. the file.
......
...@@ -7898,6 +7898,20 @@ sh_callee_copies (cumulative_args_t cum, machine_mode mode, ...@@ -7898,6 +7898,20 @@ sh_callee_copies (cumulative_args_t cum, machine_mode mode,
% SH_MIN_ALIGN_FOR_CALLEE_COPY == 0)); % SH_MIN_ALIGN_FOR_CALLEE_COPY == 0));
} }
static sh_arg_class
get_sh_arg_class (machine_mode mode)
{
if (TARGET_FPU_ANY && mode == SFmode)
return SH_ARG_FLOAT;
if (TARGET_FPU_DOUBLE
&& (GET_MODE_CLASS (mode) == MODE_FLOAT
|| GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT))
return SH_ARG_FLOAT;
return SH_ARG_INT;
}
/* Round a register number up to a proper boundary for an arg of mode /* Round a register number up to a proper boundary for an arg of mode
MODE. MODE.
The SH doesn't care about double alignment, so we only The SH doesn't care about double alignment, so we only
...@@ -7913,9 +7927,9 @@ sh_round_reg (const CUMULATIVE_ARGS& cum, machine_mode mode) ...@@ -7913,9 +7927,9 @@ sh_round_reg (const CUMULATIVE_ARGS& cum, machine_mode mode)
&& (mode == DFmode || mode == DCmode) && (mode == DFmode || mode == DCmode)
&& cum.arg_count[(int) SH_ARG_FLOAT] < NPARM_REGS (mode))) && cum.arg_count[(int) SH_ARG_FLOAT] < NPARM_REGS (mode)))
&& GET_MODE_UNIT_SIZE (mode) > UNITS_PER_WORD) && GET_MODE_UNIT_SIZE (mode) > UNITS_PER_WORD)
? (cum.arg_count[(int) GET_SH_ARG_CLASS (mode)] ? (cum.arg_count[(int) get_sh_arg_class (mode)]
+ (cum.arg_count[(int) GET_SH_ARG_CLASS (mode)] & 1)) + (cum.arg_count[(int) get_sh_arg_class (mode)] & 1))
: cum.arg_count[(int) GET_SH_ARG_CLASS (mode)]); : cum.arg_count[(int) get_sh_arg_class (mode)]);
} }
/* Return true if arg of the specified mode should be passed in a register /* Return true if arg of the specified mode should be passed in a register
...@@ -8067,7 +8081,7 @@ sh_function_arg_advance (cumulative_args_t ca_v, machine_mode mode, ...@@ -8067,7 +8081,7 @@ sh_function_arg_advance (cumulative_args_t ca_v, machine_mode mode,
if (! ((TARGET_SH4 || TARGET_SH2A) || ca->renesas_abi) if (! ((TARGET_SH4 || TARGET_SH2A) || ca->renesas_abi)
|| sh_pass_in_reg_p (*ca, mode, type)) || sh_pass_in_reg_p (*ca, mode, type))
(ca->arg_count[(int) GET_SH_ARG_CLASS (mode)] (ca->arg_count[(int) get_sh_arg_class (mode)]
= (sh_round_reg (*ca, mode) = (sh_round_reg (*ca, mode)
+ (mode == BLKmode + (mode == BLKmode
? CEIL (int_size_in_bytes (type), UNITS_PER_WORD) ? CEIL (int_size_in_bytes (type), UNITS_PER_WORD)
......
...@@ -1198,13 +1198,6 @@ extern bool current_function_interrupt; ...@@ -1198,13 +1198,6 @@ extern bool current_function_interrupt;
#endif // __cplusplus #endif // __cplusplus
#define GET_SH_ARG_CLASS(MODE) \
((TARGET_FPU_ANY && (MODE) == SFmode) \
? SH_ARG_FLOAT \
: TARGET_FPU_DOUBLE && (GET_MODE_CLASS (MODE) == MODE_FLOAT \
|| GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \
? SH_ARG_FLOAT : SH_ARG_INT)
/* Initialize a variable CUM of type CUMULATIVE_ARGS /* Initialize a variable CUM of type CUMULATIVE_ARGS
for a call to a function whose data type is FNTYPE. for a call to a function whose data type is FNTYPE.
For a library call, FNTYPE is 0. For a library call, FNTYPE is 0.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment