diff options
author | Oleg Endo <olegendo@gcc.gnu.org> | 2016-05-08 14:15:24 +0000 |
---|---|---|
committer | Oleg Endo <olegendo@gcc.gnu.org> | 2016-05-08 14:15:24 +0000 |
commit | 0983497fad139a95bc9d9e8c1ea7a5d377ae273e (patch) | |
tree | 80acfed56c2a983ee68a4f0382c078d60667916b /gcc | |
parent | df4bacab135cf6c92e3b5c46900d58c1592e8ada (diff) | |
download | gcc-0983497fad139a95bc9d9e8c1ea7a5d377ae273e.zip gcc-0983497fad139a95bc9d9e8c1ea7a5d377ae273e.tar.gz gcc-0983497fad139a95bc9d9e8c1ea7a5d377ae273e.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 22 | ||||
-rw-r--r-- | gcc/config/sh/sh.h | 7 |
3 files changed, 24 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62fe152..2643739 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 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.c: Define and declare variables on first use throughout the file. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 51f983c..a36b098 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -7898,6 +7898,20 @@ sh_callee_copies (cumulative_args_t cum, machine_mode mode, % 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 MODE. 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) && (mode == DFmode || mode == DCmode) && cum.arg_count[(int) SH_ARG_FLOAT] < NPARM_REGS (mode))) && 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)] & 1)) - : 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)]); } /* 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, if (! ((TARGET_SH4 || TARGET_SH2A) || ca->renesas_abi) || 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) + (mode == BLKmode ? CEIL (int_size_in_bytes (type), UNITS_PER_WORD) diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 34dd135..f725535 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1198,13 +1198,6 @@ extern bool current_function_interrupt; #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 for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. |