[PATCH], Add support for __builtin_{sqrt,fma}f128 on PowerPC ISA 3.0

Segher Boessenkool segher@kernel.crashing.org
Thu Sep 14 14:54:00 GMT 2017


On Wed, Sep 13, 2017 at 05:46:00PM -0400, Michael Meissner wrote:
> This patch adds support on PowerPC ISA 3.0 for the built-in function
> __builtin_sqrtf128 generating the XSSQRTQP hardware square root instruction and
> the built-in function __builtin_fmaf128 generating XSMADDQP, XSMSUBQP,
> XSNMADDQP, and XSNMSUBQP fused multiply-add instructions.
> 
> While I was at it, I changed the documentation so that it no longer documents
> the 'q' built-in functions (to mirror libquadmath) but instead just documented
> the 'f128' functions that matches glibc 2.26 and the technical report that
> added the _FloatF128 date.
> 
> I changed the tests that used __fabsq to use __fabsf128 instead.
> 
> I also added && lp64 to float128-5.c so that it doesn't cause errors when doing
> the test for a 32-bit target.  This is due to the fact that if you enable
> hardware IEEE 128-bit floating point, you eventually will need TImode
> supported, and that is not supported on 32-bit targets.
> 
> I did a bootstrap and make check with subversion id 252033 on a little endian
> power8 system.  The subversion id 252033 is one of the last svn ids that
> bootstrap without additional patches on the PowerPC.  There were no regressions
> in this patch, and I verified the 4 new tests were run.  Can I check this patch
> into the trunk?

Yes please.  A few trivial things:

> 	* doc/extend.texi (RS/6000 built-in functions): Document the
> 	'f128' IEEE 128-bit floating point built-in functions.  Don't
> 	document the older 'q' versions of the functions. Document the
> 	built-in IEEE 128-bit floating point square root and fused
> 	multiply-add built-ins.

Dot space space.

> +/* 1 argument IEEE 128-bit floating point functions that require ISA 3.0
> +   hardware.  We define both a 'q' version for libquadmath compatibility, and a
> +   'f128' for glibc 2.26.  We didn't need this for FABS/COPYSIGN, since the
> +   machine independent built-in support already defines the F128 versions,  */

Dot instead of comma?

> --- gcc/testsuite/gcc.target/powerpc/float128-5.c	(revision 252730)
> +++ gcc/testsuite/gcc.target/powerpc/float128-5.c	(working copy)
> @@ -1,4 +1,4 @@
> -/* { dg-do compile { target { powerpc*-*-linux* } } } */
> +/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */

Maybe add a comment why this is -m64 only?

Thanks,


Segher



More information about the Gcc-patches mailing list