On Thu, Jan 21, 2016 at 08:28:05AM -0500, David Edelsohn wrote:
> On Wed, Jan 20, 2016 at 8:00 PM, Michael Meissner
> <meiss...@linux.vnet.ibm.com> wrote:
> > This is revision 4 of the IEEE 128-bit floating point libgcc support.
> >
> > Since revision 3, I have removed the gcc changes that broke AIX.  I rewrote 
> > the
> > IBM extended double pack/unpack support to not use the builtin functions, 
> > but
> > instead uses a union.  The libgcc code that I wrote tickles a bug in the 
> > pack
> > function.  While I would like to fix the pack function bug, I will need to 
> > make
> > sure I don't break AIX, so I didn't want to couple this library to getting
> > those bugs fixed.
> >
> > I have also rewritten how the ifunc support is done, so that ifunc is only 
> > done
> > if the target assembler supports ISA 3.0 instructions AND the compiler 
> > supports
> > ifunc functions.  This is so that the compiler can build on 64-bit systems 
> > if
> > --enable-gnu-indirect-function is not specified without the ifunc functions
> > being flagged.
> >
> > I have done bootstraps on both a big endian power7 system and a little 
> > endian
> > power8 with no regressions.  In addition, I have built a compiler explicitly
> > disabling ifunc support, and it built and ran the ieee 128-bit floating 
> > point
> > unit tests correctly.
> >
> > Can I install this into libgcc?
> >
> > Assuming I can install these changes, the one final change that I would 
> > like to
> > make is to enable float128 automatically on VSX powerpc Linux systems, but 
> > not
> > on other systems (AIX, *BSD, etc.) since those systems do not build float128
> > emulator functions.
> 
> What does "enable" mean?

I would prefer users being able to use __float128 without having to use the
-mfloat128 option on power7/power8/power9 systems.  Since we currently only
build the emulation for PowerPC Linux systems, I don't think we want to enable
it by default without enabling the emulation on those other systems.

This means, I probably don't want to put OPTION_MASK_FLOAT128 into
ISA_2_6_MASKS_SERVER in rs6000-cpus.def, but instead turn it on in the option
handling in rs6000.c if the switch was not done by the user, and we are
targetting a VSX Linux system.

If you want AIX support, in theory it should be doable. However, it has been a
long time since I used AIX, and I will need to refresh my memories on the
capabilities of the object file format currently used (in particular, does
ifunc and aliases work).

For *BSD, it may be more problematical.  We've had at least one query about
getting __float128 to work on non-VSX systems.  Obviously, it won't be in GCC
6, but it may come up in GCC 7.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797

Reply via email to