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__).
ibm-ldouble.diff
Description: Binary data