Hi!
On Sun, 2024-06-02 at 22:01 -0500, Kewen Lin wrote:
> This is to remove macro LONG_DOUBLE_TYPE_SIZE define in
> sh port, and add new port specific hook implementation
> sh_c_mode_for_floating_type.
>
The SH parts look OK to me.
Best regards,
Oleg Endo
> gcc/ChangeLog:
>
> * config/sh/sh.cc (sh_c_mode_for_floating_type): New function.
> (TARGET_C_MODE_FOR_FLOATING_TYPE): New macro.
> * config/sh/sh.h (LONG_DOUBLE_TYPE_SIZE): Remove.
> ---
> gcc/config/sh/sh.cc | 18 ++++++++++++++++++
> gcc/config/sh/sh.h | 10 ----------
> 2 files changed, 18 insertions(+), 10 deletions(-)
>
> diff --git a/gcc/config/sh/sh.cc b/gcc/config/sh/sh.cc
> index ef3c2e6791d..bc017420381 100644
> --- a/gcc/config/sh/sh.cc
> +++ b/gcc/config/sh/sh.cc
> @@ -328,6 +328,7 @@ static unsigned int sh_hard_regno_nregs (unsigned int,
> machine_mode);
> static bool sh_hard_regno_mode_ok (unsigned int, machine_mode);
> static bool sh_modes_tieable_p (machine_mode, machine_mode);
> static bool sh_can_change_mode_class (machine_mode, machine_mode,
> reg_class_t);
> +static machine_mode sh_c_mode_for_floating_type (enum tree_index);
>
> TARGET_GNU_ATTRIBUTES (sh_attribute_table,
> {
> @@ -664,6 +665,9 @@ TARGET_GNU_ATTRIBUTES (sh_attribute_table,
> #undef TARGET_HAVE_SPECULATION_SAFE_VALUE
> #define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
>
> +#undef TARGET_C_MODE_FOR_FLOATING_TYPE
> +#define TARGET_C_MODE_FOR_FLOATING_TYPE sh_c_mode_for_floating_type
> +
> struct gcc_target targetm = TARGET_INITIALIZER;
>
>
> @@ -10674,6 +10678,20 @@ sh_can_change_mode_class (machine_mode from,
> machine_mode to,
> return true;
> }
>
> +/* Implement TARGET_C_MODE_FOR_FLOATING_TYPE. Return SFmode or DFmode
> + for TI_DOUBLE_TYPE which is for double type, go with the default one
> + for the others. */
> +
> +static machine_mode
> +sh_c_mode_for_floating_type (enum tree_index ti)
> +{
> + /* Since the SH2e has only `float' support, it is desirable to make all
> + floating point types equivalent to `float'. */
> + if (ti == TI_DOUBLE_TYPE)
> + return TARGET_FPU_SINGLE_ONLY ? SFmode : DFmode;
> + return default_mode_for_floating_type (ti);
> +}
> +
> /* Return true if registers in machine mode MODE will likely be
> allocated to registers in small register classes. */
> bool
> diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
> index 7d3a3f08338..53cad85d122 100644
> --- a/gcc/config/sh/sh.h
> +++ b/gcc/config/sh/sh.h
> @@ -425,9 +425,6 @@ extern const sh_atomic_model& selected_atomic_model
> (void);
> /* Width in bits of a `long long'. */
> #define LONG_LONG_TYPE_SIZE 64
>
> -/* Width in bits of a `long double'. */
> -#define LONG_DOUBLE_TYPE_SIZE 64
> -
> /* Width of a word, in units (bytes). */
> #define UNITS_PER_WORD (4)
> #define MIN_UNITS_PER_WORD 4
> @@ -1433,13 +1430,6 @@ extern bool current_function_interrupt;
> Do not define this if the table should contain absolute addresses. */
> #define CASE_VECTOR_PC_RELATIVE 1
>
> -/* Define it here, so that it doesn't get bumped to 64-bits on SHmedia. */
> -#define FLOAT_TYPE_SIZE 32
> -
> -/* Since the SH2e has only `float' support, it is desirable to make all
> - floating point types equivalent to `float'. */
> -#define DOUBLE_TYPE_SIZE (TARGET_FPU_SINGLE_ONLY ? 32 : 64)
> -
> /* 'char' is signed by default. */
> #define DEFAULT_SIGNED_CHAR 1
>
> --
> 2.43.0
>