From: Michael Meissner Date: Mon, 21 May 2018 22:25:03 +0000 (+0000) Subject: re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c05fb6457adbdcc11146b5c9318307ba77b1fb78;p=gcc.git re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format) 2018-05-21 Michael Meissner PR target/85657 * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not define __ibm128 as long double. * config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128 as a distinct type with IEEE 128-bit floating point is supported. (init_float128_ieee): Fix up conversions between IFmode and IEEE 128-bit types to use the correct functions. (rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to convert between 128-bit floating point types that have different modes but the same representation, instead of using gen_lowpart to makean alias. * config/rs6000/rs6000.md (IFKF): New iterator for IFmode and KFmode. (IFKF_reg): New attributes to give the register constraints for IFmode and KFmode. (extendtf2_internal): New insns to mark an explicit conversion between 128-bit floating point types that have a different mode but share the same representation. [gcc/testsuite] 2018-05-21 Michael Meissner PR target/85657 * gcc.target/powerpc/pr85657-1.c: New test for converting between __float128, __ibm128, and long double. * gcc.target/powerpc/pr85657-2.c: Likewise. * gcc.target/powerpc/pr85657-3.c: Likewise. * g++.dg/pr85667.C: New test to make sure __ibm128 is implementated as a separate type internally, and is not just an alias for long double. From-SVN: r260490 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6aad0d55d6f..cec289203f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,8 +3,8 @@ PR target/85657 * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not define __ibm128 as long double. - * config/rs6000/rs6000.c (rs6000_init_builtins): Always create - __ibm128 as a distinct type. + * config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128 + as a distinct type when IEEE 128-bit support is enabled. (init_float128_ieee): Fix up conversions between IFmode and IEEE 128-bit types to use the correct functions. (rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to