diff options
author | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-02 21:25:10 +0000 |
---|---|---|
committer | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-02 21:25:10 +0000 |
commit | a98e0d991b50a70215744bac7eba2124c7f1b2be (patch) | |
tree | 5c05c2a27555ff55fbb3fb662c749921d4ec915e | |
parent | 80ddc7311c33d9e9735c064d9087b24072e7fd89 (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/ChangeLog | 10 | ||||
-rw-r--r-- | 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 <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"); } |