Hello,

With a forthcoming micro cleanup patch to the 32bits powerpc-vxworks
port (arranging to define __powerpc__ in addition to a few others), 
the port fails to build with:

  In file included from ../../../../src/libgcc/config/rs6000/ibm-ldouble.c:384:
  ../../../../src/libgcc/soft-fp/quad.h:72:1: error: unable to emulate 'TF'

The port doesn't support 128bit floats so the attempt to compile
ibm-ldouble.c is surprising.

The whole source is guarded with a number of conditions already:

#if (defined (__MACH__) || defined (__powerpc__) || defined (_AIX)) \
  && !defined (__rtems__)

The file starts with:

/* 128-bit long double support routines for Darwin.

so presumably none of this is needed when the target
doesn't have support for 128bit FP types at all.

rs6000_init_libfuncs tells us when we get to initialize
float128 libcalls:

rs6000_init_libfuncs (void)
{
/* __float128 support.  */
if (TARGET_FLOAT128_TYPE)
  ...

/* AIX/Darwin/64-bit Linux quad floating point routines.  */
if (TARGET_LONG_DOUBLE_128)
  ...
}

Then rs6000_cpu_cpp_builtins tells what macros get
defined when the two target attributes above are true:

if (TARGET_FLOAT128_TYPE)
  builtin_define ("__FLOAT128_TYPE__");

if (TARGET_LONG_DOUBLE_128)
  {
    builtin_define ("__LONG_DOUBLE_128__");

This suggests the attached patchlet, which cures the VxWorks
build issue.

I'd appreciate feedback on the idea before going on with
further testing deemed appropriate.

How does that look ?

Thanks in advance!

With Kind Regards,

Olivier

2018-10-03  Olivier Hainque  <hain...@adacore.com>

        libgcc/
        * config/rs6000/ibm-ldouble.c: Augment the toplevel guard with
        defined (__FLOAT128_TYPE__) || defined (__LONG_DOUBLE_128__).

Attachment: ibm-ldouble.diff
Description: Binary data

Reply via email to