On Thu, Oct 08, 2015 at 09:30:45PM +0000, Joseph Myers wrote: > Question: what happens if you mix __float128 and __ibm128 in an arithmetic > or conditional expression? > > __float128 a; > __ibm128 b; > int x; > /* ... */ > a + b; > x ? a : b; > > (And likewise if one or both are the corresponding complex types.) As I > suggested in <https://gcc.gnu.org/ml/gcc/2014-06/msg00033.html> I think > this would best be rejected for both C and C++ (with testcases). That > accords with TS 18661-3 (just published) making floating-point conversions > undefined where neither type's set of values is a subset of the other's. > > The invalid_binary_op target hook should be usable to cover the case where > a binary operation would cause implicit conversions, but I don't see an > existing hook that would deal with ? : expressions.
Good points. I hadn't delved into error conditions, but I will code up a target hook not allowing inter-mixing different formats. I believe every non-NaN value that IBM extended double supports is representable in IEEE 754R 128-bit floating point, since IEEE has 112 bits of mantissa plus the hidden bit, while IBM extended double has 106 bits (52 bits of mantissa for each part plus 2 hidden bits). Even with all of the extra bits that you can hand craft into silent/signalling NaNs, you should be able represent those values in IEEE 128-bit floating point as similar NaNs. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797