[PATCH 9/9] Remove the error handling wrapper from pow
Szabolcs Nagy
szabolcs.nagy@arm.com
Fri Jun 29 12:57:00 GMT 2018
Introduce new pow symbol version that doesn't do SVID compatible error
handling. The standard errno and fp exception based error handling is
inline in the new code and does not have significant overhead (only
affects uncommon special case code paths).
The w_pow.c wrapper is disabled for sysdeps/ieee754/dbl-64 by using an
empty w_pow.c and enabled on targets using their own pow implementation
or had ifunc dispatch on glibc internal __ieee754_pow symbol.
The __pow_finite symbol is just an alias to pow now. For backward
compatibility the old pow symbol versions still use a wrapper with
SVID error handling around the new code.
The ia64 asm is chaned so the compat and new symbol versions map to the
same address.
On x86_64 #include <math.h> was added before macro definitions that
may affect that header.
2018-06-29 Szabolcs Nagy <szabolcs.nagy@arm.com>
* math/Versions (GLIBC_2.28): Add pow.
* math/w_pow_compat.c (__pow_compat): Change to versioned compat
symbol.
* math/w_pow.c: New file.
* sysdeps/i386/fpu/w_pow.c: New file.
* sysdeps/ia64/fpu/e_pow.S: Add versioned symbols.
* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Rename to __pow
and add necessary aliases.
* sysdeps/ieee754/dbl-64/w_pow.c: New file.
* sysdeps/m68k/m680x0/fpu/w_pow.c: New file.
* sysdeps/mach/hurd/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Update.
* sysdeps/unix/sysv/linux/arm/libm.abilist: Update.
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Update.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update.
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update.
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update.
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/nios2/libm.abilist: Update.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update.
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/sh/libm.abilist: Update.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update.
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update.
* sysdeps/x86_64/fpu/multiarch/e_pow-fma.c (__ieee754_pow): Rename to
__pow.
* sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c (__ieee754_pow): Likewise.
* sysdeps/x86_64/fpu/multiarch/e_pow.c (__ieee754_pow): Likewise.
* sysdeps/x86_64/fpu/multiarch/w_pow.c: New file.
---
math/Versions | 2 +-
math/w_pow.c | 8 ++++++++
math/w_pow_compat.c | 6 +++---
sysdeps/i386/fpu/w_pow.c | 1 +
sysdeps/ia64/fpu/e_pow.S | 6 ++++++
sysdeps/ieee754/dbl-64/e_pow.c | 11 ++++++++---
sysdeps/ieee754/dbl-64/w_pow.c | 1 +
sysdeps/m68k/m680x0/fpu/w_pow.c | 1 +
sysdeps/mach/hurd/i386/libm.abilist | 1 +
sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 +
sysdeps/unix/sysv/linux/arm/libm.abilist | 1 +
sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 +
sysdeps/unix/sysv/linux/i386/libm.abilist | 1 +
sysdeps/unix/sysv/linux/ia64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist | 1 +
sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist | 1 +
sysdeps/unix/sysv/linux/microblaze/libm.abilist | 1 +
sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 1 +
sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 +
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist | 1 +
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist | 1 +
sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist | 1 +
sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/sh/libm.abilist | 1 +
sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist | 1 +
sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 1 +
sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 1 +
sysdeps/x86_64/fpu/multiarch/e_pow-fma.c | 3 +--
sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c | 3 +--
sysdeps/x86_64/fpu/multiarch/e_pow.c | 4 +++-
sysdeps/x86_64/fpu/multiarch/w_pow.c | 1 +
36 files changed, 59 insertions(+), 12 deletions(-)
create mode 100644 math/w_pow.c
create mode 100644 sysdeps/i386/fpu/w_pow.c
create mode 100644 sysdeps/ieee754/dbl-64/w_pow.c
create mode 100644 sysdeps/m68k/m680x0/fpu/w_pow.c
create mode 100644 sysdeps/x86_64/fpu/multiarch/w_pow.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0009-Remove-the-error-handling-wrapper-from-pow.diff
Type: text/x-patch
Size: 14771 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20180629/112e0dde/attachment.bin>
More information about the Libc-alpha
mailing list