On Tue, Oct 23, 2018 at 05:53:15PM -0400, Michael Meissner wrote:
> > > +static tree
> > > +rs6000_mangle_decl_assembler_name (tree decl, tree id)
> > > +{
> > > +  if (!TARGET_IEEEQUAD_DEFAULT && TARGET_IEEEQUAD && 
> > > TARGET_LONG_DOUBLE_128
> > 
> > Write this is in the opposite order?
> >   if (TARGET_LONG_DOUBLE_128 && TARGET_IEEEQUAD && !TARGET_IEEEQUAD_DEFAULT
> 
> Because !TARGET_IEEEQUAD_DEFAULT is a constant test.  If you are on a system
> that defaults to IEEE 128-bit, the whole code gets deleted.  I would hope the
> tests still get deleted if it occurs later in the test, but I tend to put the
> things that can be optimized at compile time first.

The compiler can work out what is constant by itself just fine ;-)  Please
try to optimise our code for readability, instead.

TARGET_IEEEQUAD_DEFAULT does not make much sense unless TARGET_IEEEQUAD is
set, and that itself not unless TARGET_LONG_DOUBLE is set.

> > This comment is a bit misleading I think?  The code checks if it is the
> > same mode as would be used for long double, not if that is the actual
> > asked-for type.  The code is fine AFAICS, the comment isn't so great
> > though.
> 
> Well the long double type is 'TFmode'.  Though _Float128 does get mapped to
> TFmode instead of KFmode also.  But explicit f128 built-ins won't go through
> here, since they don't end in 'l'.  I'm just trying to avoid things like CLZL
> that take long arguments and not long double.

modes and types are very different things.  A mode is something on the
level of your machine language, while a type is something on the level of
your source language.  "long double" is a type, and it can be DFmode,
TFmode, IFmode, KFmode.  IFmode can also be __ibm128, etc.

Talking about "types" here is very confusing.


Segher

Reply via email to