[PATCH 6/9] Remove the error handling wrapper from exp and exp2

Szabolcs Nagy szabolcs.nagy@arm.com
Fri Jun 29 12:54:00 GMT 2018


Introduce new exp and exp2 symbol version that don'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 wrappers are disabled for sysdeps/ieee754/dbl-64 by using empty w_
files and the template is enabled on targets that have their own exp
and exp2 implementations or use ifunc on glibc internal __ieee754_exp
symbol using w_ files from the math directory.

The _finite symbols are just aliases to the standard symbols (they have
no performance advantage anymore).  For backward compatibility the old
symbol versions still use the 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 exp and exp2.
	* math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
	symbol.
	* math/w_exp_compat.c (__exp_compat): Likewise.
	* math/w_exp.c: New file.
	* math/w_exp2.c: New file.
	* sysdeps/i386/fpu/w_exp.c: New file.
	* sysdeps/i386/fpu/w_exp2.c: New file.
	* sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Rename to __exp
	and add necessary aliases.
	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Rename to __exp2
	and add necessary aliases.
	* sysdeps/ieee754/dbl-64/w_exp.c: New file.
	* sysdeps/ieee754/dbl-64/w_exp2.c: New file.
	* sysdeps/ia64/fpu/e_exp.S: Add versioned symbols.
	* sysdeps/ia64/fpu/e_exp2.S: Likewise.
	* sysdeps/m68k/m680x0/fpu/w_exp.c: New file.
	* sysdeps/m68k/m680x0/fpu/w_exp2.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-le.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_exp-avx.c (__exp1): Remove.
	(__ieee754_exp): Rename to __exp.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__exp1): Remove.
	(__ieee754_exp): Rename to __exp.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__exp1): Remove.
	(__ieee754_exp): Rename to __exp.
	* sysdeps/x86_64/fpu/multiarch/e_exp.c (__ieee754_exp): Rename to
	__exp.
	* sysdeps/x86_64/fpu/multiarch/w_exp.c: New file.
---
  math/Versions                                                |  2 ++
  math/w_exp.c                                                 |  8 ++++++++
  math/w_exp2.c                                                |  8 ++++++++
  math/w_exp2_compat.c                                         |  6 +++---
  math/w_exp_compat.c                                          |  7 +++----
  sysdeps/i386/fpu/w_exp.c                                     |  1 +
  sysdeps/i386/fpu/w_exp2.c                                    |  1 +
  sysdeps/ia64/fpu/e_exp.S                                     |  6 ++++++
  sysdeps/ia64/fpu/e_exp2.S                                    |  6 ++++++
  sysdeps/ieee754/dbl-64/e_exp.c                               | 12 +++++++++---
  sysdeps/ieee754/dbl-64/e_exp2.c                              | 11 ++++++++---
  sysdeps/ieee754/dbl-64/w_exp.c                               |  1 +
  sysdeps/ieee754/dbl-64/w_exp2.c                              |  1 +
  sysdeps/m68k/m680x0/fpu/w_exp.c                              |  1 +
  sysdeps/m68k/m680x0/fpu/w_exp2.c                             |  1 +
  sysdeps/mach/hurd/i386/libm.abilist                          |  2 ++
  sysdeps/unix/sysv/linux/aarch64/libm.abilist                 |  2 ++
  sysdeps/unix/sysv/linux/alpha/libm.abilist                   |  2 ++
  sysdeps/unix/sysv/linux/arm/libm.abilist                     |  2 ++
  sysdeps/unix/sysv/linux/hppa/libm.abilist                    |  2 ++
  sysdeps/unix/sysv/linux/i386/libm.abilist                    |  2 ++
  sysdeps/unix/sysv/linux/ia64/libm.abilist                    |  2 ++
  sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist           |  2 ++
  sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist             |  2 ++
  sysdeps/unix/sysv/linux/microblaze/libm.abilist              |  2 ++
  sysdeps/unix/sysv/linux/mips/mips32/libm.abilist             |  2 ++
  sysdeps/unix/sysv/linux/mips/mips64/libm.abilist             |  2 ++
  sysdeps/unix/sysv/linux/nios2/libm.abilist                   |  2 ++
  sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist   |  2 ++
  sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist |  2 ++
  sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist    |  2 ++
  sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist       |  2 ++
  sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist              |  2 ++
  sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist            |  2 ++
  sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist            |  2 ++
  sysdeps/unix/sysv/linux/sh/libm.abilist                      |  2 ++
  sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist           |  2 ++
  sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist           |  2 ++
  sysdeps/unix/sysv/linux/x86_64/64/libm.abilist               |  2 ++
  sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist              |  2 ++
  sysdeps/x86_64/fpu/multiarch/e_exp-avx.c                     |  3 +--
  sysdeps/x86_64/fpu/multiarch/e_exp-fma.c                     |  3 +--
  sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c                    |  3 +--
  sysdeps/x86_64/fpu/multiarch/e_exp.c                         |  4 +++-
  sysdeps/x86_64/fpu/multiarch/w_exp.c                         |  1 +
  45 files changed, 116 insertions(+), 20 deletions(-)
  create mode 100644 math/w_exp.c
  create mode 100644 math/w_exp2.c
  create mode 100644 sysdeps/i386/fpu/w_exp.c
  create mode 100644 sysdeps/i386/fpu/w_exp2.c
  create mode 100644 sysdeps/ieee754/dbl-64/w_exp.c
  create mode 100644 sysdeps/ieee754/dbl-64/w_exp2.c
  create mode 100644 sysdeps/m68k/m680x0/fpu/w_exp.c
  create mode 100644 sysdeps/m68k/m680x0/fpu/w_exp2.c
  create mode 100644 sysdeps/x86_64/fpu/multiarch/w_exp.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0006-Remove-the-error-handling-wrapper-from-exp-and-exp2.diff
Type: text/x-patch
Size: 20487 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20180629/d73ec37d/attachment.bin>


More information about the Libc-alpha mailing list