[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