Message ID | 59B90D0F.1000207@arm.com |
---|---|
State | New |
Headers | show |
Series | Optimized generic expf and exp2f | expand |
On Wed, 13 Sep 2017, Szabolcs Nagy wrote:
> * sysdeps/x86_64/fpu/w_expf.c: New file.
I don't think having w_expf.c alongside w_expf.S in the same directory
makes sense. (An IFUNC w_expf.c in the multiarch subdirectory, used to
build both fma and non-fma versions and replacing the existing
e_expf-fma.S, may well make sense if benchmarks show improvements on the
fma and non-fma .S files.)
On 9/13/2017 1:19 PM, Joseph Myers wrote: > On Wed, 13 Sep 2017, Szabolcs Nagy wrote: > >> * sysdeps/x86_64/fpu/w_expf.c: New file. > > I don't think having w_expf.c alongside w_expf.S in the same directory > makes sense. (An IFUNC w_expf.c in the multiarch subdirectory, used to > build both fma and non-fma versions and replacing the existing > e_expf-fma.S, may well make sense if benchmarks show improvements on the > fma and non-fma .S files.) fwiw I am assuming we'll retire the x86-64 .S files and use the C version (for both FMA and non-FMA with some IFUNC selector) once this lands. Optimizing the .S file was fun for FMA, but the C version has a smaller polynomial and is faster ... data speaks and this wins.
From ba8143da8b2d0a25e1c4ed42704d46a720ebc3e1 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy <szabolcs.nagy@arm.com> Date: Tue, 12 Sep 2017 12:44:18 +0100 Subject: [PATCH 4/4] no wrapper --- sysdeps/i386/fpu/w_exp2f.c | 1 + sysdeps/i386/fpu/w_expf.c | 1 + sysdeps/i386/i686/fpu/multiarch/w_expf.c | 1 + sysdeps/ieee754/flt-32/e_exp2f.c | 7 +++++-- sysdeps/ieee754/flt-32/e_expf.c | 8 ++++++-- sysdeps/ieee754/flt-32/w_exp2f.c | 1 + sysdeps/ieee754/flt-32/w_expf.c | 1 + sysdeps/m68k/m680x0/fpu/w_expf.c | 1 + sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c | 7 ++++++- sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c | 1 + sysdeps/x86_64/fpu/w_expf.c | 1 + 11 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 sysdeps/i386/fpu/w_exp2f.c create mode 100644 sysdeps/i386/fpu/w_expf.c create mode 100644 sysdeps/i386/i686/fpu/multiarch/w_expf.c create mode 100644 sysdeps/ieee754/flt-32/w_exp2f.c create mode 100644 sysdeps/ieee754/flt-32/w_expf.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_expf.c create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c create mode 100644 sysdeps/x86_64/fpu/w_expf.c diff --git a/sysdeps/i386/fpu/w_exp2f.c b/sysdeps/i386/fpu/w_exp2f.c new file mode 100644 index 0000000000..4418f8bed5 --- /dev/null +++ b/sysdeps/i386/fpu/w_exp2f.c @@ -0,0 +1 @@ +#include <math/w_exp2f.c> diff --git a/sysdeps/i386/fpu/w_expf.c b/sysdeps/i386/fpu/w_expf.c new file mode 100644 index 0000000000..b471bccdb1 --- /dev/null +++ b/sysdeps/i386/fpu/w_expf.c @@ -0,0 +1 @@ +#include <math/w_expf.c> diff --git a/sysdeps/i386/i686/fpu/multiarch/w_expf.c b/sysdeps/i386/i686/fpu/multiarch/w_expf.c new file mode 100644 index 0000000000..b471bccdb1 --- /dev/null +++ b/sysdeps/i386/i686/fpu/multiarch/w_expf.c @@ -0,0 +1 @@ +#include <math/w_expf.c> diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c index be53e5c699..7a3c5fdcff 100644 --- a/sysdeps/ieee754/flt-32/e_exp2f.c +++ b/sysdeps/ieee754/flt-32/e_exp2f.c @@ -18,6 +18,7 @@ #include <math.h> #include <stdint.h> +#include <shlib-compat.h> #include "math_config.h" /* @@ -42,7 +43,7 @@ top12 (float x) } float -__ieee754_exp2f (float x) +__exp2f (float x) { uint32_t abstop; uint64_t ki, t; @@ -85,4 +86,6 @@ __ieee754_exp2f (float x) y = y * s; return (float) y; } -strong_alias (__ieee754_exp2f, __exp2f_finite) +strong_alias (__exp2f, __ieee754_exp2f) +strong_alias (__exp2f, __exp2f_finite) +versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27); diff --git a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c index b8244a82cf..8a38c2a0c6 100644 --- a/sysdeps/ieee754/flt-32/e_expf.c +++ b/sysdeps/ieee754/flt-32/e_expf.c @@ -18,6 +18,7 @@ #include <math.h> #include <stdint.h> +#include <shlib-compat.h> #include "math_config.h" /* @@ -42,7 +43,7 @@ top12 (float x) } float -__ieee754_expf (float x) +__expf (float x) { uint32_t abstop; uint64_t ki, t; @@ -99,4 +100,7 @@ __ieee754_expf (float x) y = y * s; return (float) y; } -strong_alias (__ieee754_expf, __expf_finite) +hidden_def (__expf) +strong_alias (__expf, __ieee754_expf) +strong_alias (__expf, __expf_finite) +versioned_symbol (libm, __expf, expf, GLIBC_2_27); diff --git a/sysdeps/ieee754/flt-32/w_exp2f.c b/sysdeps/ieee754/flt-32/w_exp2f.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_exp2f.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/ieee754/flt-32/w_expf.c b/sysdeps/ieee754/flt-32/w_expf.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_expf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_expf.c b/sysdeps/m68k/m680x0/fpu/w_expf.c new file mode 100644 index 0000000000..b471bccdb1 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_expf.c @@ -0,0 +1 @@ +#include <math/w_expf.c> diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c index b236290ea2..cc23f06fb1 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c @@ -16,9 +16,14 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <shlib-compat.h> #undef strong_alias #define strong_alias(a, b) +#undef hidden_def +#define hidden_def(a) +#undef versioned_symbol +#define versioned_symbol(a, b, c, d) -#define __ieee754_expf __ieee754_expf_ppc64 +#define __expf __ieee754_expf_ppc64 #include <sysdeps/ieee754/flt-32/e_expf.c> diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c new file mode 100644 index 0000000000..b471bccdb1 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c @@ -0,0 +1 @@ +#include <math/w_expf.c> diff --git a/sysdeps/x86_64/fpu/w_expf.c b/sysdeps/x86_64/fpu/w_expf.c new file mode 100644 index 0000000000..b471bccdb1 --- /dev/null +++ b/sysdeps/x86_64/fpu/w_expf.c @@ -0,0 +1 @@ +#include <math/w_expf.c> -- 2.11.0