]> git.ipfire.org Git - thirdparty/glibc.git/commit - math/Makefile
Add new log2 implementation
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 13 Jun 2018 16:48:52 +0000 (17:48 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 12 Sep 2018 16:36:33 +0000 (17:36 +0100)
commit3e08ff544b86834cd24795de159f16b8c65c7b8f
tree550dc4a2c295fdfc9e747cb021d5a3860c23c301
parentf41b0a43e426831e391cafd8d0bd47a3efa4a840
Add new log2 implementation

Similar algorithm is used as in log: log2(2^k x) = k + log2(c) + log2(x/c)
where the last term is approximated by a polynomial of x/c - 1, the first
order coefficient is about 1/ln2 in this case.

There is separate code path when fma instruction is not available for
computing x/c - 1 precisely, for which the table size is doubled.

The worst case error is 0.547 ULP (0.55 without fma), the read only
global data size is 1168 bytes (2192 without fma) on aarch64.  The
non-nearest rounding error is less than 1 ULP.

Improvements on Cortex-A72 compared to current glibc master:
log2 thruput: 2.00x in [0.01 11.1]
log2 latency: 2.04x in [0.01 11.1]
log2 thruput: 2.17x in [0.999 1.001]
log2 latency: 2.88x in [0.999 1.001]

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

* NEWS: Mention log2 improvements.
* math/Makefile (type-double-routines): Add e_log2_data.
* sysdeps/i386/fpu/e_log2_data.c: New file.
* sysdeps/ia64/fpu/e_log2_data.c: New file.
* sysdeps/ieee754/dbl-64/e_log2.c: Rewrite.
* sysdeps/ieee754/dbl-64/e_log2_data.c: New file.
* sysdeps/ieee754/dbl-64/math_config.h (__log2_data): Add.
* sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c: Remove.
* sysdeps/m68k/m680x0/fpu/e_log2_data.c: New file.
ChangeLog
NEWS
math/Makefile
sysdeps/i386/fpu/e_log2_data.c [new file with mode: 0644]
sysdeps/ia64/fpu/e_log2_data.c [new file with mode: 0644]
sysdeps/ieee754/dbl-64/e_log2.c
sysdeps/ieee754/dbl-64/e_log2_data.c [new file with mode: 0644]
sysdeps/ieee754/dbl-64/math_config.h
sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c [deleted file]
sysdeps/m68k/m680x0/fpu/e_log2_data.c [new file with mode: 0644]