This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] rs6000: Set up ieee128_float_type_node correctly (PR86285)
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: gcc-patches at gcc dot gnu dot org
- Cc: dje dot gcc at gmail dot com, Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Mon, 2 Jul 2018 21:40:03 +0000
- Subject: [PATCH] rs6000: Set up ieee128_float_type_node correctly (PR86285)
[ I wonder if I ever sent this patch to the list. I now backported it
to 8 branch as well. Apologies. ]
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.
Committing to trunk. This should also go to 8.
Segher
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.
---
gcc/config/rs6000/rs6000.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index cb228ad..5b70521 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -16414,21 +16414,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");
}
--
1.8.3.1