[PATCH] powerpc: define USE_FMAF128_BUILTIN in math-use-builtins.h
Adhemerval Zanella
adhemerval.zanella@linaro.org
Thu Jun 4 11:39:26 GMT 2020
On 03/06/2020 17:07, Paul E. Murphy via Libc-alpha wrote:
> Commit a7a3435c9a0769744c7748f9d95510d0a99be7d1 caused an undefined
> macro evaluation error when building powerpc64le. This defines the
> macro such that it should behave correctly on all supported powerpc64le
> targets. Likewise, this allows us to remove the ppc64le specific
> s_fmaf128.c for power9.
>
> powerpc{,64} will not support FMA using the ibm128 long double, so
> it can be left undefined for now to avoid ambiguity with ppc64le.
>
> I have verified powerpc64le multiarch and powerpc64le power9
> no-multiarch builds continue to generate optimize fmaf128.
I should have spotted that testing only powerpc-linux-gnu for the
patch [1] was not suffice.
[1] https://sourceware.org/pipermail/libc-alpha/2020-June/114565.html
> ---
> sysdeps/powerpc/fpu/math-use-builtins.h | 4 +++
> .../le/fpu/multiarch/s_fmaf128-power9.c | 4 ++-
> .../powerpc64/le/power9/fpu/s_fmaf128.c | 36 -------------------
> 3 files changed, 7 insertions(+), 37 deletions(-)
> delete mode 100644 sysdeps/powerpc/powerpc64/le/power9/fpu/s_fmaf128.c
>
> diff --git a/sysdeps/powerpc/fpu/math-use-builtins.h b/sysdeps/powerpc/fpu/math-use-builtins.h
> index 4780934379..e4b9b18659 100644
> --- a/sysdeps/powerpc/fpu/math-use-builtins.h
> +++ b/sysdeps/powerpc/fpu/math-use-builtins.h
> @@ -66,4 +66,8 @@
> #define USE_FMA_BUILTIN 1
> #define USE_FMAF_BUILTIN 1
>
> +/* This is not available for P8 or BE targets. */
> +#define USE_FMAF128_BUILTIN (defined(__FP_FAST_FMAF128) \
> + && __FP_FAST_FMAF128 == 1)
> +
> #endif
I think it should be:
#ifdef __FP_FAST_FMAF128
# define USE_FMAF128_BUILTIN 1
#else
# define USE_FMAF128_BUILTIN 0
#endif
I don't think you need to check for define value, afaik gcc will
always define it to 1 if you are targeting a architecture that
supports it.
However I will push a quick fix to enable powerpc64le (with
USE_FMAF128_BUILTIN set to 0) and and we can enable fmaf128 in a
subsequent patch (since it requires more fixes for ifunc).
> diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/s_fmaf128-power9.c b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/s_fmaf128-power9.c
> index 8df77ceade..49aeb3a8f4 100644
> --- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/s_fmaf128-power9.c
> +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/s_fmaf128-power9.c
> @@ -20,7 +20,9 @@
>
> #undef libm_alias_float128
> #define libm_alias_float128(a, b)
> +#undef strong_alias
> +#define strong_alias(a, b)
>
> #define __fmaf128 __fmaf128_power9
>
> -#include <sysdeps/powerpc/powerpc64/le/power9/fpu/s_fmaf128.c>
> +#include <sysdeps/ieee754/float128/s_fmaf128.c>
> diff --git a/sysdeps/powerpc/powerpc64/le/power9/fpu/s_fmaf128.c b/sysdeps/powerpc/powerpc64/le/power9/fpu/s_fmaf128.c
> deleted file mode 100644
> index f02e810fb9..0000000000
> --- a/sysdeps/powerpc/powerpc64/le/power9/fpu/s_fmaf128.c
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -/* Compute x * y + z as a ternary operation for _Float128. POWER9 version.
> - Copyright (C) 2020 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> -
> - The GNU C Library is free software; you can redistribute it and/or
> - modify it under the terms of the GNU Lesser General Public
> - License as published by the Free Software Foundation; either
> - version 2.1 of the License, or (at your option) any later version.
> -
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file into
> - combinations with other programs, and to distribute those
> - combinations without any restriction coming from the use of this
> - file. (The Lesser General Public License restrictions do apply in
> - other respects; for example, they cover modification of the file,
> - and distribution when not linked into a combine executable.)
> -
> - The GNU C Library is distributed in the hope that it will be useful,
> - but WITHOUT ANY WARRANTY; without even the implied warranty of
> - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> - Lesser General Public License for more details.
> -
> - You should have received a copy of the GNU Lesser General Public
> - License along with the GNU C Library; if not, see
> - <http://www.gnu.org/licenses/>. */
> -
> -#include <libm-alias-float128.h>
> -
> -__float128
> -__fmaf128 (__float128 x, __float128 y, __float128 z)
> -{
> - return x * y + z;
> -}
> -
> -libm_alias_float128 (__fma, fma)
>
More information about the Libc-alpha
mailing list