Commit c05fb645 by Michael Meissner

re PR target/85657 (Make __ibm128 a separate type, even if long double uses the…

re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)

2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

	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.
	(extend<mode>tf2_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  <meissner@linux.ibm.com>

	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
parent 75705fa9
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
PR target/85657 PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double. define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Always create * config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128
__ibm128 as a distinct type. as a distinct type when IEEE 128-bit support is enabled.
(init_float128_ieee): Fix up conversions between IFmode and IEEE (init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions. 128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to (rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment