diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2018-06-26 17:16:58 +0200 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2018-06-26 17:16:58 +0200 |
commit | 54647e7b7284885e9eb3eda5854942fa8df4f93c (patch) | |
tree | 5814d73ce9dd9cdc3a6509b19a581baeb52365e5 | |
parent | 4f5b9c803ac4edc639d8bf4a827ba40e4dab4db0 (diff) | |
download | gcc-54647e7b7284885e9eb3eda5854942fa8df4f93c.zip gcc-54647e7b7284885e9eb3eda5854942fa8df4f93c.tar.gz gcc-54647e7b7284885e9eb3eda5854942fa8df4f93c.tar.bz2 |
rs6000: Set up ieee128_float_type_node correctly (PR82625)
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.
PR target/82625
* 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.
From-SVN: r262152
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 13 |
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 749a10f..741254d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-06-26 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/82625 + * 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-06-26 David Malcolm <dmalcolm@redhat.com> * cfgloop.c (get_loop_location): Convert return type from diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d6d324b..e61c9ce 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16421,21 +16421,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"); } |