math: Add new exp10 implementation
commit63d0a35d5f223a3f4b68190567b7d4d44545bce5
authorJoe Ramsay <Joe.Ramsay@arm.com>
Fri, 1 Dec 2023 09:49:45 +0000 (1 09:49 +0000)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Mon, 4 Dec 2023 15:52:11 +0000 (4 15:52 +0000)
tree69b006288d047188fcd0b81906647f9168a9eb65
parent8e755f5bc8f57d0034c12f34c11ce8a83103dc65
math: Add new exp10 implementation

New implementation is based on the existing exp/exp2, with different
reduction constants and polynomial. Worst-case error in round-to-
nearest is 0.513 ULP.

The exp/exp2 shared table is reused for exp10 - .rodata size of
e_exp_data increases by 64 bytes.

As for exp/exp2, targets with single-instruction rounding/conversion
intrinsics can use them by toggling TOINT_INTRINSICS=1 and adding the
necessary code to their math_private.h.

Improvements on Neoverse V1 compared to current GLIBC master:
exp10 thruput: 3.3x in [-0x1.439b746e36b52p+8 0x1.34413509f79ffp+8]
exp10 latency: 1.8x in [-0x1.439b746e36b52p+8 0x1.34413509f79ffp+8]

Tested on:
    aarch64-linux-gnu (TOINT_INTRINSICS, fma contraction) and
    x86_64-linux-gnu (!TOINT_INTRINSICS, no fma contraction)

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
sysdeps/ieee754/dbl-64/e_exp10.c
sysdeps/ieee754/dbl-64/e_exp_data.c
sysdeps/ieee754/dbl-64/math_config.h