From a98e0d991b50a70215744bac7eba2124c7f1b2be Mon Sep 17 00:00:00 2001 From: segher Date: Mon, 2 Jul 2018 21:25:10 +0000 Subject: 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 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 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/rs6000/rs6000.c | 13 ++++++++----- 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 + + Backport from trunk + 2018-06-26 Segher Boessenkool + + 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 * 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"); } -- cgit v1.2.3