glibc/sysdeps/generic
Szabolcs Nagy 424c4f60ed Add new pow implementation
The algorithm is exp(y * log(x)), where log(x) is computed with about
1.3*2^-68 relative error (1.5*2^-68 without fma), returning the result
in two doubles, and the exp part uses the same algorithm (and lookup
tables) as exp, but takes the input as two doubles and a sign (to handle
negative bases with odd integer exponent).  The __exp1 internal symbol
is no longer necessary.

There is separate code path when fma is not available but the worst case
error is about 0.54 ULP in both cases.  The lookup table and consts for
log are 4168 bytes.  The .rodata+.text is decreased by 37908 bytes on
aarch64.  The non-nearest rounding error is less than 1 ULP.

Improvements on Cortex-A72 compared to current glibc master:
pow thruput: 2.40x in [0.01 11.1]x[0.01 11.1]
pow latency: 1.84x in [0.01 11.1]x[0.01 11.1]

Tested on
aarch64-linux-gnu (defined __FP_FAST_FMA, TOINT_INTRINSICS) and
arm-linux-gnueabihf (!defined __FP_FAST_FMA, !TOINT_INTRINSICS) and
x86_64-linux-gnu (!defined __FP_FAST_FMA, !TOINT_INTRINSICS) and
powerpc64le-linux-gnu (defined __FP_FAST_FMA, !TOINT_INTRINSICS) targets.

	* NEWS: Mention pow improvements.
	* math/Makefile (type-double-routines): Add e_pow_log_data.
	* sysdeps/generic/math_private.h (__exp1): Remove.
	* sysdeps/i386/fpu/e_pow_log_data.c: New file.
	* sysdeps/ia64/fpu/e_pow_log_data.c: New file.
	* sysdeps/ieee754/dbl-64/Makefile (CFLAGS-e_pow.c): Allow fma
	contraction.
	* sysdeps/ieee754/dbl-64/e_exp.c (__exp1): Remove.
	(exp_inline): Remove.
	(__ieee754_exp): Only single double input is handled.
	* sysdeps/ieee754/dbl-64/e_pow.c: Rewrite.
	* sysdeps/ieee754/dbl-64/e_pow_log_data.c: New file.
	* sysdeps/ieee754/dbl-64/math_config.h (issignaling_inline): Define.
	(__pow_log_data): Define.
	* sysdeps/ieee754/dbl-64/upow.h: Remove.
	* sysdeps/ieee754/dbl-64/upow.tbl: Remove.
	* sysdeps/m68k/m680x0/fpu/e_pow_log_data.c: New file.
	* sysdeps/x86_64/fpu/multiarch/Makefile (CFLAGS-e_pow-fma.c): Allow fma
	contraction.
	(CFLAGS-e_pow-fma4.c): Likewise.
2018-09-19 10:04:51 +01:00
..
net Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
netinet generic if_ether.h: Fix build 2018-01-19 01:51:10 +01:00
nfs Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sys Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
_G_config.h Post-cleanup 2: minimize _G_config.h. 2018-02-07 10:10:32 -05:00
_itoa.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
a.out.h
abort-instr.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
aio_misc.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
allocalim.h Update. 2002-10-09 09:42:48 +00:00
asm-syntax.h
atomic-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
c++-types.data Add placeholder c++-types.data and *.abilist files. 2015-02-13 15:41:34 -08:00
confstr.h
device-nrs.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dirstream.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-cache.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-dtprocnum.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-dtv.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fcntl.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fileid.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fptr.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-hash.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-librecon.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-lookupcfg.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-mman.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-osinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-procinfo.c Dummy dl-procinfo.c file for platforms which don't have one. 2002-02-01 18:25:44 +00:00
dl-procinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-procruntime.c ld.so: Add architecture specific fields 2017-11-13 08:02:52 -08:00
dl-prop.h x86: Support IBT and SHSTK in Intel CET [BZ #21598] 2018-07-16 14:08:27 -07:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-tls.h Update. 2002-02-07 04:08:19 +00:00
dl-unistd.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dwarf2.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
elide.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
eloop-threshold.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
entry.h Update. 2002-03-15 03:16:52 +00:00
errqueue.h Update. 2001-01-10 23:47:39 +00:00
exit-thread.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fd_to_filename.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fenv_private.h Move fenv.h soft-float inlines from fenv_private.h to include/fenv.h. 2018-09-04 19:52:06 +00:00
fips-private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-fp-int-compare-invalid.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-fp-int-convert-overflow.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-int-fp-convert-zero.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
float128-abi.h Move some float128 symbol version definitions. 2017-10-16 22:04:42 +00:00
fork.h Update. 2002-10-01 00:05:23 +00:00
fpu_control.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
framestate.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gcc-compat.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gccframe.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
get-rounding-mode.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gmp-mparam.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
hp-timing-common.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
hp-timing.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifreq.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifunc-init.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifunc-sel.h Do not stack-protect ifunc resolvers [BZ #7065] 2016-12-26 10:08:41 +01:00
internal-signals.h Make sysdeps/generic/internal-signals.h less stubby. 2018-04-04 12:37:23 -04:00
intr-msg.h
inttypes.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ld.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
ldbl-classify-compat.h Move LDBL_CLASSIFY_COMPAT to its own header. 2018-02-01 21:01:00 +00:00
ldconfig.h Add support for the RISC-V-specific ELF flags 2018-01-25 10:06:19 -08:00
ldsodefs.h elf: Correct absolute (SHN_ABS) symbol run-time calculation [BZ #19818] 2018-04-04 23:09:37 +01:00
libanl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libBrokenLocale.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libc-lock.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc-mmap.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc-start.h hurd: Initialize TLS and libpthread before signal thread start 2018-03-25 00:52:39 +01:00
libc-tsd.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libcrypt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libdl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libm-alias-double.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-float128.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-float.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-ldouble.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-test-ulps Replace gen-libm-test.pl with gen-libm-test.py. 2018-08-09 15:34:12 +00:00
libm-test-ulps-name Do not hardcode platform names in manual/libm-err-tab.pl (bug 14139). 2016-11-04 16:49:06 +00:00
libm.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libnsl.abilist Add placeholder libnsl.abilist and libutil.abilist files 2016-03-07 00:49:36 +01:00
libnss_compat.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_db.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_dns.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_files.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_hesiod.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_nis.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_nisplus.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libpthread.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libresolv.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
librt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libutil.abilist Add placeholder libnsl.abilist and libutil.abilist files 2016-03-07 00:49:36 +01:00
link_map.h ld.so: Add architecture specific fields 2017-11-13 08:02:52 -08:00
linkmap.h Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
local-setxid.h * sysdeps/posix/spawni.c (__spawni): Use local_seteuid and 2006-06-04 22:17:06 +00:00
localplt.data ld.so: Introduce struct dl_exception 2017-08-10 16:54:57 +02:00
machine-gmon.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
machine-lock.h hurd: take __USE_EXTERN_INLINES into account and restrict inlines 2018-01-28 18:46:23 +01:00
machine-sp.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
Makefile Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-alignment.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math_ldbl_opt.h * math/math.h [__NO_LONG_DOUBLE_MATH] (__nldbl_nexttowardf): New 2006-01-14 12:10:44 +00:00
math_ldbl.h Allow direct use of math_ldbl.h in testsuite. 2017-02-25 10:40:48 -05:00
math_private_calls.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math_private.h Add new pow implementation 2018-09-19 10:04:51 +01:00
math-barriers.h Move math_opt_barrier, math_force_eval to separate math-barriers.h. 2018-05-09 19:45:47 +00:00
math-nan-payload-double.h math: Merge strtod_nan_*.h into math-type-macros-*.h 2018-05-16 06:03:08 +02:00
math-nan-payload-float.h math: Merge strtod_nan_*.h into math-type-macros-*.h 2018-05-16 06:03:08 +02:00
math-tests-arch.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-tests-exceptions.h Move EXCEPTION_TESTS_* out of math-tests.h 2018-08-23 23:41:13 +00:00
math-tests-rounding.h Move ROUNDING_TESTS_* out of math-tests.h. 2018-08-22 12:25:50 +00:00
math-tests-snan-cast.h Move SNAN_TESTS_TYPE_CAST out of math-tests.h. 2018-08-01 11:18:57 +00:00
math-tests-snan-payload.h Move SNAN_TESTS_PRESERVE_PAYLOAD out of math-tests.h. 2018-08-01 11:21:16 +00:00
math-tests-snan.h Move SNAN_TESTS_* out of math-tests.h. 2018-08-10 19:22:01 +00:00
math-tests-trap-force.h Move EXCEPTION_SET_FORCES_TRAP out of math-tests.h. 2018-08-27 18:52:41 +00:00
math-tests-trap.h Move EXCEPTION_ENABLE_SUPPORTED out of math-tests.h. 2018-08-24 19:18:16 +00:00
math-tests.h Move EXCEPTION_SET_FORCES_TRAP out of math-tests.h. 2018-08-27 18:52:41 +00:00
math-type-macros-double.h math: Reverse include order in <math-type-macros-*.h> 2018-05-17 15:48:42 +02:00
math-type-macros-float128.h math: Reverse include order in <math-type-macros-*.h> 2018-05-17 15:48:42 +02:00
math-type-macros-float.h math: Reverse include order in <math-type-macros-*.h> 2018-05-17 15:48:42 +02:00
math-type-macros-ldouble.h math: Reverse include order in <math-type-macros-*.h> 2018-05-17 15:48:42 +02:00
math-type-macros.h Move declare_mgen_finite_alias definition 2018-06-20 17:42:47 -03:00
memcopy.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
memusage.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
nan-high-order-bit.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
not-cancel.h Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251) 2018-06-26 13:22:53 -03:00
not-errno.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
nscd-types.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
pagecopy.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
paths.h generic paths.h: remove old paths from _PATH_STDPATH 2012-11-04 10:11:39 +01:00
profil-counter.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
pty-private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
register-dump.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
rtld-lowlevel.h Jakub Jelinek <jakub@redhat.com> 2006-10-10 00:51:29 +00:00
safe-fatal.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
setjmpP.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sigcontextinfo.h Remove unused frame.h header, sigcontextinfo.h macros. 2018-03-22 16:40:51 +00:00
siglist.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sigset-cvt-mask.h hurd: fix warning 2018-01-27 16:45:55 +01:00
sigsetops.h hurd: fix warnings 2018-01-27 16:47:36 +01:00
stackguard-macros.h BZ #15754: Fix test case for ARM. 2013-09-23 01:44:38 -04:00
stackinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
startup.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
stdint.h Define char16_t, char32_t consistently with uint_least16_t, uint_least32_t (bug 17979). 2018-02-07 20:33:55 +00:00
stdio-lock.h Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
string_private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
symbol-hacks.h PLT avoidance for __stack_chk_fail [BZ #7065] 2016-12-26 10:11:05 +01:00
sysdep-cancel.h * elf/dl-sym.c (do_sym): Use RTLD_SINGLE_THREAD_P. 2006-10-29 21:46:32 +00:00
sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
thread_state.h hurd: add TLS support 2018-03-17 03:17:36 +01:00
tininess.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tls-macros.h * elf/tls-macros.h: #include_next <tls-macros.h> to get a sysdeps 2005-03-13 09:09:05 +00:00
tls-setup.h x86: Rename __glibc_reserved1 to feature_1 in tcbhead_t [BZ #22563] 2018-07-14 05:56:46 -07:00
tls.h hurd: add gscope support 2018-03-11 13:06:33 +01:00
tst-audit.h Move testsuite audit definitions to sysdeps tst-audit.h files. 2012-07-26 11:29:07 +00:00
tst-stack-align.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unsecvars.h Ignore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209) 2017-03-07 20:52:04 +05:30
unwind-dw2-fde-glibc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2-fde.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2-fde.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2.c [BZ #20271] Add newlines in __libc_fatal calls. 2018-08-31 18:04:32 -07:00
unwind-pe.c Update. 2004-03-10 10:04:19 +00:00
unwind-pe.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-resume.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
utmp-equal.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00