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