[PATCH 6/9] New generic powf
Szabolcs Nagy
szabolcs.nagy@arm.com
Tue Sep 19 13:01:00 GMT 2017
with powf benchmark (on aarch64):
reciprocal-throughput: 4.2x faster
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.
2017-09-19 Szabolcs Nagy <szabolcs.nagy@arm.com>
* 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_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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 06-powf.diff
Type: text/x-patch
Size: 17252 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20170919/83541487/attachment.bin>
More information about the Libc-alpha
mailing list