From: Wilco Dijkstra Date: Mon, 10 Nov 2025 13:52:14 +0000 (+0000) Subject: math: Remove ldbl-128/s_fma.c X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b7bb7b2f27358f87019af11ef72fbf8e0a5e1f4;p=thirdparty%2Fglibc.git math: Remove ldbl-128/s_fma.c Remove ldbl-128/s_fma.c - it makes no sense to use emulated float128 operations to emulate FMA. Benchmarking shows dbl-64/s_fma.c is about twice as fast. Remove redundant dbl-64/s_fma.c includes in targets that were trying to work around this issue. Reviewed-by: Adhemerval Zanella  --- diff --git a/sysdeps/alpha/fpu/s_fma.c b/sysdeps/alpha/fpu/s_fma.c deleted file mode 100644 index 8f626058704..00000000000 --- a/sysdeps/alpha/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include diff --git a/sysdeps/ieee754/ldbl-128/s_fma.c b/sysdeps/ieee754/ldbl-128/s_fma.c deleted file mode 100644 index 01ca5562608..00000000000 --- a/sysdeps/ieee754/ldbl-128/s_fma.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2025 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. - - 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 - . */ - -#define NO_MATH_REDIRECT -#define dfmal __hide_dfmal -#define f32xfmaf64 __hide_f32xfmaf64 -#include -#undef dfmal -#undef f32xfmaf64 -#include -#include -#include -#include -#include - -/* This implementation relies on long double being more than twice as - precise as double and uses rounding to odd in order to avoid problems - with double rounding. - See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -double -__fma (double x, double y, double z) -{ -#if USE_FMA_BUILTIN - return __builtin_fma (x, y, z); -#else - fenv_t env; - /* Multiplication is always exact. */ - long double temp = (long double) x * (long double) y; - - /* Ensure correct sign of an exact zero result by performing the - addition in the original rounding mode in that case. */ - if (temp == -z) - return (double) temp + z; - - union ieee854_long_double u; - __feholdexcept (&env); - __fesetround (FE_TOWARDZERO); - /* Perform addition with round to odd. */ - u.d = temp + (long double) z; - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= __fetestexcept (FE_INEXACT) != 0; - __feupdateenv (&env); - /* And finally truncation with round to nearest. */ - return (double) u.d; -#endif /* ! USE_FMA_BUILTIN */ -} -#ifndef __fma -libm_alias_double (__fma, fma) -libm_alias_double_narrow (__fma, fma) -#endif diff --git a/sysdeps/mips/mips64/n32/fpu/s_fma.c b/sysdeps/mips/mips64/n32/fpu/s_fma.c deleted file mode 100644 index b61fa643de9..00000000000 --- a/sysdeps/mips/mips64/n32/fpu/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips64/n64/fpu/s_fma.c b/sysdeps/mips/mips64/n64/fpu/s_fma.c deleted file mode 100644 index b61fa643de9..00000000000 --- a/sysdeps/mips/mips64/n64/fpu/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/fpu/s_fma.c b/sysdeps/sparc/sparc32/fpu/s_fma.c deleted file mode 100644 index 8f626058704..00000000000 --- a/sysdeps/sparc/sparc32/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include diff --git a/sysdeps/sparc/sparc64/fpu/s_fma.c b/sysdeps/sparc/sparc64/fpu/s_fma.c deleted file mode 100644 index 8f626058704..00000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include