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.
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