diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2018-08-14 10:45:59 +0100 |
---|---|---|
committer | Wilco Dijkstra <wdijkstr@arm.com> | 2018-08-14 10:45:59 +0100 |
commit | 599cf3976679e1b345307d9c02057f02aa95528f (patch) | |
tree | ede9ff73c0eb51bce1a9c540b6daf5c0675b5afd /sysdeps/aarch64 | |
parent | e95c6f61920a0f9237cfb292fa44ad500e1df09b (diff) | |
download | glibc-599cf3976679e1b345307d9c02057f02aa95528f.zip glibc-599cf3976679e1b345307d9c02057f02aa95528f.tar.gz glibc-599cf3976679e1b345307d9c02057f02aa95528f.tar.bz2 |
Improve performance of sinf and cosf
The second patch improves performance of sinf and cosf using the same
algorithms and polynomials. The returned values are identical to sincosf
for the same input. ULP definitions for AArch64 and x64 are updated.
sinf/cosf througput gains on Cortex-A72:
* |x| < 0x1p-12 : 1.2x
* |x| < M_PI_4 : 1.8x
* |x| < 2 * M_PI: 1.7x
* |x| < 120.0 : 2.3x
* |x| < Inf : 3.0x
* NEWS: Mention sinf, cosf, sincosf.
* sysdeps/aarch64/libm-test-ulps: Update ULP for sinf, cosf, sincosf.
* sysdeps/x86_64/fpu/libm-test-ulps: Update ULP for sinf and cosf.
* sysdeps/x86_64/fpu/multiarch/s_sincosf-fma.c: Add definitions of
constants rather than including generic sincosf.h.
* sysdeps/x86_64/fpu/s_sincosf_data.c: Remove.
* sysdeps/ieee754/flt-32/s_cosf.c (cosf): Rewrite.
* sysdeps/ieee754/flt-32/s_sincosf.h (reduced_sin): Remove.
(reduced_cos): Remove.
(sinf_poly): New function.
* sysdeps/ieee754/flt-32/s_sinf.c (sinf): Rewrite.
Diffstat (limited to 'sysdeps/aarch64')
-rw-r--r-- | sysdeps/aarch64/libm-test-ulps | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps index be06085..6a89028 100644 --- a/sysdeps/aarch64/libm-test-ulps +++ b/sysdeps/aarch64/libm-test-ulps @@ -1021,9 +1021,9 @@ ldouble: 1 Function: "cos_downward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 3 ldouble: 3 @@ -1037,9 +1037,9 @@ ldouble: 1 Function: "cos_upward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 2 ldouble: 2 @@ -1981,9 +1981,9 @@ ldouble: 1 Function: "sin_downward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 3 ldouble: 3 @@ -1997,9 +1997,9 @@ ldouble: 2 Function: "sin_upward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 3 ldouble: 3 @@ -2013,9 +2013,9 @@ ldouble: 1 Function: "sincos_downward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 3 ldouble: 3 @@ -2029,9 +2029,9 @@ ldouble: 2 Function: "sincos_upward": double: 1 -float: 2 +float: 1 idouble: 1 -ifloat: 2 +ifloat: 1 ildouble: 3 ldouble: 3 |