summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>2018-07-02 21:25:10 +0000
committersegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>2018-07-02 21:25:10 +0000
commita98e0d991b50a70215744bac7eba2124c7f1b2be (patch)
tree5c05c2a27555ff55fbb3fb662c749921d4ec915e
parent80ddc7311c33d9e9735c064d9087b24072e7fd89 (diff)
rs6000: Set up ieee128_float_type_node correctly (PR86285)
We shouldn't init __ieee128 to be the same as long double if the latter is not even a 128-bit type. This also reorders the nearby __ibm128 code so both types use similar logic. Backport from trunk 2018-06-26 Segher Boessenkool <segher@kernel.crashing.org> PR target/86285 * config/rs6000/rs6000.c (rs6000_init_builtins): Do not set ieee128_float_type_node to long_double_type_node unless TARGET_LONG_DOUBLE_128 is set. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-8-branch@262320 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/rs6000/rs6000.c13
2 files changed, 18 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7f17eef507f..1bacd188a0a7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2018-07-02 Segher Boessenkool <segher@kernel.crashing.org>
+
+ Backport from trunk
+ 2018-06-26 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/86285
+ * config/rs6000/rs6000.c (rs6000_init_builtins): Do not set
+ ieee128_float_type_node to long_double_type_node unless
+ TARGET_LONG_DOUBLE_128 is set.
+
2018-07-02 Eric Botcazou <ebotcazou@adacore.com>
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Do not overrule
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f07d61c99cdf..b0176588538b 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -17097,21 +17097,24 @@ rs6000_init_builtins (void)
__ieee128. */
if (TARGET_FLOAT128_TYPE)
{
- if (TARGET_IEEEQUAD || !TARGET_LONG_DOUBLE_128)
+ if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
+ ibm128_float_type_node = long_double_type_node;
+ else
{
ibm128_float_type_node = make_node (REAL_TYPE);
TYPE_PRECISION (ibm128_float_type_node) = 128;
SET_TYPE_MODE (ibm128_float_type_node, IFmode);
layout_type (ibm128_float_type_node);
}
- else
- ibm128_float_type_node = long_double_type_node;
lang_hooks.types.register_builtin_type (ibm128_float_type_node,
"__ibm128");
- ieee128_float_type_node
- = TARGET_IEEEQUAD ? long_double_type_node : float128_type_node;
+ if (TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
+ ieee128_float_type_node = long_double_type_node;
+ else
+ ieee128_float_type_node = float128_type_node;
+
lang_hooks.types.register_builtin_type (ieee128_float_type_node,
"__ieee128");
}