On Wed, Feb 22, 2023 at 06:37:39PM +0800, Kewen.Lin wrote:
> Thanks for working on this! If updating libgcc source to workaround this
> issue
> is the best option we can have at this moment, it's fine.
Thanks. Yes, I agree that it does not fix the root issue.
> Comparing to one
> previous proposal which removes the workaround in build_common_tree_nodes for
> rs6000 KFmode, a bit concern on this one is that users can still meet the ICE
> with a simple case like:
>
> typedef float TFtype __attribute__((mode (TF)));
>
> TFtype
> test (TFtype t)
> {
> return __builtin_copysignf128 (1.0q, t);
> }
>
> but I guess they would write this kind of code very rarely?
I tend to think that it is better to consistantly use __float128/_Float128
types with the 'f128' functions, and use long double with the 'l'. It would be
nice to fix the root cause (of __float128 and _Float128 not being the same type
within the compiler).
It is complicated by the fact that until C++2x, you can't use the _Float128
type. You can use the __float128 and __ibm128 extensions, but you can't use
those extensions with _Complex. This means for C++, you have to use the
__attrbibute__((mode)) to get to the complex type. And due to the way I
initially implemented it, whether you use T{C,F}, K{C,F}, and I{C,F} depends on
the switches.
But without fixing that (which is fairly complex), I really want the master
branch fixed so you can build GCC with long double defaulting to IEEE 128-bit.
--
Michael Meissner, IBM
PO Box 98, Ayer, Massachusetts, USA, 01432
email: [email protected]