On Wed, Nov 15, 2017 at 04:56:10PM -0500, Michael Meissner wrote:
> David tells me that the patch to enable float128 built-in functions to work
> with the -mabi=ieeelongdouble option broke AIX because on AIX, the float128
> insns are disabled, and they all become CODE_FOR_nothing.  The switch 
> statement
> that was added in rs6000.c to map KFmode built-in functions to TFmode breaks
> under AIX.

It also breaks on Linux with older binutils (no HAVE_AS_POWER9 defined).

> I changed the code to have a separate table, and the first call, I build the
> table.  If the insn was not generated, it will just be CODE_FOR_nothing, and
> the KF->TF mode conversion will not be done.
> 
> I have tested this on a little endian power8 system and there were no
> regressions.  Once David verifies that it builds on AIX, can I check this into
> the trunk?

I don't like this scheme much (huge table, initialisation at runtime, etc.),
but okay for trunk, to unbreak things there.

Some comments on the patch:

> +      if (first_time)
> +     {
> +       first_time = false;
> +       gcc_assert ((int)CODE_FOR_nothing == 0);

No useless cast please.  The whole assert is pretty useless fwiw; just
take it out?

> +       for (i = 0; i < ARRAY_SIZE (map); i++)
> +         map_insn_code[(int)map[i].from] = map[i].to;
> +     }

Space after cast.

Only do this for codes that are *not* CODE_FOR_nothing?


Segher

Reply via email to