]> git.ipfire.org Git - thirdparty/glibc.git/commit
New generic powf
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Mon, 4 Sep 2017 16:55:33 +0000 (17:55 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Fri, 29 Sep 2017 16:30:53 +0000 (17:30 +0100)
commit4ea49f4c08eeac1a64a5aba8c9033b604afe8b2c
treea6bae75c1784f4398f6802281ab8ec0034ab2a38
parent875c76c7048fe4a8c67c265cdae057cb3ca19f44
New generic powf

without wrapper on aarch64:
powf reciprocal-throughput: 4.2x faster
powf latency: 2.6x faster
old worst-case error: 1.11 ulp
new worst-case error: 0.82 ulp
aarch64 .text size: -780 bytes
aarch64 .rodata size: +144 bytes

powf(x,y) is implemented as exp2(y*log2(x)) with the same algorithms
that are used in exp2f and log2f, except that the log2f polynomial is
larger for extra precision and its output (and exp2f input) may be
scaled by a power of 2 (POWF_SCALE) to simplify the argument reduction
step of exp2 (possible when efficient round and convert toint operation
is available).

The special case handling tries to minimize the checks in the hot path.
When the input of exp2_inline is checked, int arithmetics is used as
that was faster on the tested aarch64 cores.

* math/Makefile (type-float-routines): Add e_powf_log2_data.
* sysdeps/ieee754/flt-32/e_powf.c: New implementation.
* sysdeps/ieee754/flt-32/e_powf_log2_data.c: New file.
* sysdeps/ieee754/flt-32/math_config.h (__powf_log2_data): Define.
(issignalingf_inline): Likewise.
(POWF_LOG2_TABLE_BITS): Likewise.
(POWF_LOG2_POLY_ORDER): Likewise.
(POWF_SCALE_BITS): Likewise.
(POWF_SCALE): Likewise.
* sysdeps/i386/fpu/e_powf_log2_data.c: New file.
* sysdeps/ia64/fpu/e_powf_log2_data.c: New file.
* sysdeps/m68k/m680x0/fpu/e_powf_log2_data.c: New file.
ChangeLog
NEWS
math/Makefile
sysdeps/i386/fpu/e_powf_log2_data.c [new file with mode: 0644]
sysdeps/ia64/fpu/e_powf_log2_data.c [new file with mode: 0644]
sysdeps/ieee754/flt-32/e_powf.c
sysdeps/ieee754/flt-32/e_powf_log2_data.c [new file with mode: 0644]
sysdeps/ieee754/flt-32/math_config.h
sysdeps/m68k/m680x0/fpu/e_powf_log2_data.c [new file with mode: 0644]