1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-10-12 19:04:54 +03:00
Files
glibc/sysdeps/or1k/fpu/libm-test-ulps
Adhemerval Zanella be85208b9f math: Use cospif from CORE-MATH
The CORE-MATH implementation is correctly rounded (for any rounding mode)
and shows better performance to the generic cospif.

The code was adapted to glibc style and to use the definition of
math_config.h (to handle errno, overflow, and underflow).

Benchtest on x64_64 (Ryzen 9 5900X, gcc 14.2.1), aarch64 (Neoverse-N1,
gcc 13.3.1), and powerpc (POWER10, gcc 13.2.1):

latency                    master        patched   improvement
x86_64                    47.4679        38.4157        19.07%
x86_64v2                  46.9686        38.3329        18.39%
x86_64v3                  43.8929        31.8510        27.43%
aarch64 (Neoverse)        18.8867        13.2089        30.06%
power8                    22.9435         7.8023        65.99%
power10                   15.4472        7.77505        49.67%

reciprocal-throughput      master        patched   improvement
x86_64                    20.9518        11.4991        45.12%
x86_64v2                  19.8699        10.5921        46.69%
x86_64v3                  19.3475         9.3998        51.42%
aarch64 (Neoverse)        12.5767         6.2158        50.58%
power8                    15.0566         3.2654        78.31%
power10                    9.2866         3.1147        66.46%

Reviewed-by: DJ Delorie <dj@redhat.com>
2025-02-12 16:31:57 -03:00

1197 lines
16 KiB
Plaintext

# Begin of automatic generation
# Maximal error of functions:
Function: "acos":
double: 1
Function: "acos_downward":
double: 1
Function: "acos_towardzero":
double: 1
Function: "acos_upward":
double: 1
Function: "acosh":
double: 2
Function: "acosh_downward":
double: 2
Function: "acosh_towardzero":
double: 2
Function: "acosh_upward":
double: 2
Function: "acospi":
double: 2
Function: "acospi_downward":
double: 1
Function: "acospi_towardzero":
double: 1
Function: "acospi_upward":
double: 2
Function: "asin":
double: 1
Function: "asin_downward":
double: 1
Function: "asin_towardzero":
double: 1
Function: "asin_upward":
double: 2
Function: "asinh":
double: 2
Function: "asinh_downward":
double: 3
Function: "asinh_towardzero":
double: 2
Function: "asinh_upward":
double: 3
Function: "asinpi":
double: 1
Function: "asinpi_downward":
double: 1
Function: "asinpi_towardzero":
double: 1
Function: "asinpi_upward":
double: 2
Function: "atan":
double: 1
Function: "atan2_downward":
double: 5
Function: "atan2_towardzero":
double: 5
Function: "atan2_upward":
double: 8
Function: "atan2pi":
double: 1
Function: "atan2pi_downward":
double: 1
Function: "atan2pi_towardzero":
double: 1
Function: "atan2pi_upward":
double: 1
Function: "atan_downward":
double: 1
Function: "atan_towardzero":
double: 1
Function: "atan_upward":
double: 1
Function: "atanh":
double: 2
Function: "atanh_downward":
double: 3
Function: "atanh_towardzero":
double: 2
Function: "atanh_upward":
double: 3
Function: "atanpi":
double: 2
Function: "atanpi_downward":
double: 1
Function: "atanpi_towardzero":
double: 1
Function: "atanpi_upward":
double: 1
Function: "cabs":
double: 1
Function: "cabs_downward":
double: 1
Function: "cabs_towardzero":
double: 1
Function: "cabs_upward":
double: 1
Function: Real part of "cacos":
double: 1
float: 2
Function: Imaginary part of "cacos":
double: 2
float: 2
Function: Real part of "cacos_downward":
double: 3
float: 2
Function: Imaginary part of "cacos_downward":
double: 5
float: 3
Function: Real part of "cacos_towardzero":
double: 3
float: 2
Function: Imaginary part of "cacos_towardzero":
double: 4
float: 2
Function: Real part of "cacos_upward":
double: 2
float: 2
Function: Imaginary part of "cacos_upward":
double: 5
float: 7
Function: Real part of "cacosh":
double: 2
float: 2
Function: Imaginary part of "cacosh":
double: 1
float: 2
Function: Real part of "cacosh_downward":
double: 4
float: 2
Function: Imaginary part of "cacosh_downward":
double: 3
float: 3
Function: Real part of "cacosh_towardzero":
double: 4
float: 2
Function: Imaginary part of "cacosh_towardzero":
double: 3
float: 2
Function: Real part of "cacosh_upward":
double: 4
float: 4
Function: Imaginary part of "cacosh_upward":
double: 3
float: 2
Function: "carg_downward":
double: 5
Function: "carg_towardzero":
double: 5
Function: "carg_upward":
double: 8
Function: Real part of "casin":
double: 1
float: 1
Function: Imaginary part of "casin":
double: 2
float: 2
Function: Real part of "casin_downward":
double: 3
float: 2
Function: Imaginary part of "casin_downward":
double: 5
float: 3
Function: Real part of "casin_towardzero":
double: 3
float: 1
Function: Imaginary part of "casin_towardzero":
double: 4
float: 2
Function: Real part of "casin_upward":
double: 3
float: 2
Function: Imaginary part of "casin_upward":
double: 5
float: 7
Function: Real part of "casinh":
double: 2
float: 2
Function: Imaginary part of "casinh":
double: 1
float: 1
Function: Real part of "casinh_downward":
double: 5
float: 3
Function: Imaginary part of "casinh_downward":
double: 3
float: 2
Function: Real part of "casinh_towardzero":
double: 4
float: 2
Function: Imaginary part of "casinh_towardzero":
double: 3
float: 1
Function: Real part of "casinh_upward":
double: 5
float: 7
Function: Imaginary part of "casinh_upward":
double: 3
float: 2
Function: Real part of "catan":
double: 1
float: 1
Function: Imaginary part of "catan":
double: 1
float: 1
Function: Real part of "catan_downward":
double: 1
float: 2
Function: Imaginary part of "catan_downward":
double: 2
float: 2
Function: Real part of "catan_towardzero":
double: 1
float: 2
Function: Imaginary part of "catan_towardzero":
double: 2
float: 2
Function: Real part of "catan_upward":
double: 2
float: 1
Function: Imaginary part of "catan_upward":
double: 2
float: 2
Function: Real part of "catanh":
double: 1
float: 1
Function: Imaginary part of "catanh":
double: 1
float: 1
Function: Real part of "catanh_downward":
double: 2
float: 2
Function: Imaginary part of "catanh_downward":
double: 1
float: 2
Function: Real part of "catanh_towardzero":
double: 2
float: 2
Function: Imaginary part of "catanh_towardzero":
double: 1
float: 2
Function: Real part of "catanh_upward":
double: 4
float: 4
Function: Imaginary part of "catanh_upward":
double: 2
float: 1
Function: "cbrt":
double: 4
Function: "cbrt_downward":
double: 4
Function: "cbrt_towardzero":
double: 3
Function: "cbrt_upward":
double: 5
Function: Real part of "ccos":
double: 1
float: 1
Function: Imaginary part of "ccos":
double: 1
float: 1
Function: Real part of "ccos_downward":
double: 3
float: 1
Function: Imaginary part of "ccos_downward":
double: 3
float: 3
Function: Real part of "ccos_towardzero":
double: 3
float: 2
Function: Imaginary part of "ccos_towardzero":
double: 3
float: 3
Function: Real part of "ccos_upward":
double: 1
float: 2
Function: Imaginary part of "ccos_upward":
double: 2
float: 2
Function: Real part of "ccosh":
double: 2
float: 1
Function: Imaginary part of "ccosh":
double: 1
float: 1
Function: Real part of "ccosh_downward":
double: 3
float: 2
Function: Imaginary part of "ccosh_downward":
double: 3
float: 3
Function: Real part of "ccosh_towardzero":
double: 3
float: 3
Function: Imaginary part of "ccosh_towardzero":
double: 3
float: 3
Function: Real part of "ccosh_upward":
double: 1
float: 2
Function: Imaginary part of "ccosh_upward":
double: 2
float: 2
Function: Real part of "cexp":
double: 2
float: 1
Function: Imaginary part of "cexp":
double: 1
float: 2
Function: Real part of "cexp_downward":
double: 4
float: 2
Function: Imaginary part of "cexp_downward":
double: 3
float: 3
Function: Real part of "cexp_towardzero":
double: 4
float: 2
Function: Imaginary part of "cexp_towardzero":
double: 3
float: 3
Function: Real part of "cexp_upward":
double: 2
float: 2
Function: Imaginary part of "cexp_upward":
double: 3
float: 2
Function: Real part of "clog":
double: 3
float: 3
Function: Imaginary part of "clog":
double: 1
float: 1
Function: Real part of "clog10":
double: 3
float: 4
Function: Imaginary part of "clog10":
double: 2
float: 2
Function: Real part of "clog10_downward":
double: 7
float: 5
Function: Imaginary part of "clog10_downward":
double: 8
float: 4
Function: Real part of "clog10_towardzero":
double: 5
float: 5
Function: Imaginary part of "clog10_towardzero":
double: 8
float: 4
Function: Real part of "clog10_upward":
double: 6
float: 5
Function: Imaginary part of "clog10_upward":
double: 5
float: 4
Function: Real part of "clog_downward":
double: 4
float: 3
Function: Imaginary part of "clog_downward":
double: 5
float: 2
Function: Real part of "clog_towardzero":
double: 8
float: 4
Function: Imaginary part of "clog_towardzero":
double: 5
float: 3
Function: Real part of "clog_upward":
double: 8
float: 3
Function: Imaginary part of "clog_upward":
double: 8
float: 2
Function: "cos":
double: 1
float: 1
Function: "cos_downward":
double: 1
float: 1
Function: "cos_towardzero":
double: 4
float: 1
Function: "cos_upward":
double: 4
float: 1
Function: "cosh":
double: 2
Function: "cosh_downward":
double: 3
Function: "cosh_towardzero":
double: 3
Function: "cosh_upward":
double: 2
Function: "cospi":
double: 2
Function: "cospi_downward":
double: 1
Function: "cospi_towardzero":
double: 1
Function: "cospi_upward":
double: 1
Function: Real part of "cpow":
double: 2
float: 5
Function: Imaginary part of "cpow":
float: 2
Function: Real part of "cpow_downward":
double: 5
float: 8
Function: Imaginary part of "cpow_downward":
double: 2
float: 2
Function: Real part of "cpow_towardzero":
double: 5
float: 8
Function: Imaginary part of "cpow_towardzero":
double: 2
float: 2
Function: Real part of "cpow_upward":
double: 4
float: 1
Function: Imaginary part of "cpow_upward":
double: 2
float: 2
Function: Real part of "csin":
double: 1
float: 1
Function: Imaginary part of "csin":
float: 1
Function: Real part of "csin_downward":
double: 3
float: 3
Function: Imaginary part of "csin_downward":
double: 3
float: 1
Function: Real part of "csin_towardzero":
double: 3
float: 3
Function: Imaginary part of "csin_towardzero":
double: 3
float: 1
Function: Real part of "csin_upward":
double: 2
float: 2
Function: Imaginary part of "csin_upward":
double: 1
float: 2
Function: Real part of "csinh":
float: 1
Function: Imaginary part of "csinh":
double: 1
float: 1
Function: Real part of "csinh_downward":
double: 3
float: 1
Function: Imaginary part of "csinh_downward":
double: 3
float: 3
Function: Real part of "csinh_towardzero":
double: 3
float: 2
Function: Imaginary part of "csinh_towardzero":
double: 3
float: 3
Function: Real part of "csinh_upward":
double: 1
float: 2
Function: Imaginary part of "csinh_upward":
double: 2
float: 2
Function: Real part of "csqrt":
double: 2
float: 2
Function: Imaginary part of "csqrt":
double: 2
float: 2
Function: Real part of "csqrt_downward":
double: 5
float: 4
Function: Imaginary part of "csqrt_downward":
double: 4
float: 3
Function: Real part of "csqrt_towardzero":
double: 4
float: 3
Function: Imaginary part of "csqrt_towardzero":
double: 4
float: 3
Function: Real part of "csqrt_upward":
double: 5
float: 4
Function: Imaginary part of "csqrt_upward":
double: 3
float: 3
Function: Real part of "ctan":
double: 1
float: 1
Function: Imaginary part of "ctan":
double: 2
float: 2
Function: Real part of "ctan_downward":
double: 6
float: 5
Function: Imaginary part of "ctan_downward":
double: 3
float: 2
Function: Real part of "ctan_towardzero":
double: 5
float: 3
Function: Imaginary part of "ctan_towardzero":
double: 3
float: 2
Function: Real part of "ctan_upward":
double: 2
float: 4
Function: Imaginary part of "ctan_upward":
double: 2
float: 2
Function: Real part of "ctanh":
double: 2
float: 2
Function: Imaginary part of "ctanh":
double: 2
float: 2
Function: Real part of "ctanh_downward":
double: 3
float: 2
Function: Imaginary part of "ctanh_downward":
double: 6
float: 5
Function: Real part of "ctanh_towardzero":
double: 3
float: 2
Function: Imaginary part of "ctanh_towardzero":
double: 5
float: 3
Function: Real part of "ctanh_upward":
double: 2
float: 2
Function: Imaginary part of "ctanh_upward":
double: 2
float: 3
Function: "erf":
double: 1
Function: "erf_downward":
double: 1
Function: "erf_towardzero":
double: 1
Function: "erf_upward":
double: 1
Function: "erfc":
double: 5
Function: "erfc_downward":
double: 5
Function: "erfc_towardzero":
double: 3
Function: "erfc_upward":
double: 5
Function: "exp":
double: 1
float: 1
Function: "exp10":
double: 2
float: 1
Function: "exp10_downward":
double: 3
float: 1
Function: "exp10_towardzero":
double: 3
float: 1
Function: "exp10_upward":
double: 2
float: 1
Function: "exp10m1":
double: 3
Function: "exp10m1_downward":
double: 3
Function: "exp10m1_towardzero":
double: 2
Function: "exp10m1_upward":
double: 4
Function: "exp2":
double: 1
Function: "exp2_downward":
double: 1
Function: "exp2_towardzero":
double: 1
Function: "exp2_upward":
double: 1
float: 1
Function: "exp2m1":
double: 2
Function: "exp2m1_downward":
double: 3
Function: "exp2m1_towardzero":
double: 3
Function: "exp2m1_upward":
double: 3
Function: "exp_downward":
double: 1
float: 1
Function: "exp_towardzero":
double: 1
float: 1
Function: "exp_upward":
double: 1
float: 1
Function: "expm1":
double: 1
Function: "expm1_downward":
double: 1
Function: "expm1_towardzero":
double: 1
Function: "expm1_upward":
double: 1
Function: "gamma":
double: 4
float: 7
Function: "gamma_downward":
double: 7
float: 7
Function: "gamma_towardzero":
double: 7
float: 7
Function: "gamma_upward":
double: 5
float: 6
Function: "hypot":
double: 1
float: 1
Function: "hypot_downward":
double: 1
Function: "hypot_towardzero":
double: 1
Function: "hypot_upward":
double: 1
Function: "j0":
double: 2
float: 9
Function: "j0_downward":
double: 5
float: 9
Function: "j0_towardzero":
double: 6
float: 9
Function: "j0_upward":
double: 9
float: 9
Function: "j1":
double: 4
float: 9
Function: "j1_downward":
double: 5
float: 8
Function: "j1_towardzero":
double: 4
float: 8
Function: "j1_upward":
double: 9
float: 9
Function: "jn":
double: 4
float: 4
Function: "jn_downward":
double: 7
float: 9
Function: "jn_towardzero":
double: 7
float: 9
Function: "jn_upward":
double: 7
float: 9
Function: "lgamma":
double: 4
Function: "lgamma_downward":
double: 7
Function: "lgamma_towardzero":
double: 7
Function: "lgamma_upward":
double: 5
Function: "log10":
double: 2
float: 2
Function: "log10_downward":
double: 2
float: 3
Function: "log10_towardzero":
double: 2
float: 1
Function: "log10_upward":
double: 2
float: 2
Function: "log10p1":
double: 1
Function: "log10p1_downward":
double: 2
Function: "log10p1_towardzero":
double: 3
Function: "log10p1_upward":
double: 2
Function: "log1p":
double: 1
float: 1
Function: "log1p_downward":
double: 2
float: 2
Function: "log1p_towardzero":
double: 2
float: 2
Function: "log1p_upward":
double: 2
float: 2
Function: "log2":
float: 1
Function: "log2_downward":
double: 1
Function: "log2_towardzero":
double: 1
Function: "log2_upward":
double: 1
Function: "log2p1":
double: 1
Function: "log2p1_downward":
double: 2
Function: "log2p1_towardzero":
double: 2
Function: "log2p1_upward":
double: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
Function: "pow_downward":
double: 1
float: 1
Function: "pow_towardzero":
double: 1
float: 1
Function: "pow_upward":
double: 1
float: 1
Function: "sin":
double: 1
float: 1
Function: "sin_downward":
double: 4
float: 1
Function: "sin_towardzero":
double: 3
float: 1
Function: "sin_upward":
double: 7
float: 1
Function: "sincos":
double: 1
Function: "sincos_downward":
double: 1
float: 1
Function: "sincos_towardzero":
double: 4
float: 1
Function: "sincos_upward":
double: 1
float: 1
Function: "sinh":
double: 2
Function: "sinh_downward":
double: 3
Function: "sinh_towardzero":
double: 3
Function: "sinh_upward":
double: 3
Function: "sinpi":
double: 2
float: 2
Function: "sinpi_downward":
double: 2
float: 2
Function: "sinpi_towardzero":
double: 2
float: 1
Function: "sinpi_upward":
double: 2
float: 3
Function: "tan_downward":
double: 1
Function: "tan_towardzero":
double: 1
Function: "tan_upward":
double: 1
Function: "tanh":
double: 2
Function: "tanh_downward":
double: 3
Function: "tanh_towardzero":
double: 2
Function: "tanh_upward":
double: 3
Function: "tanpi":
double: 3
float: 3
Function: "tanpi_downward":
double: 2
float: 3
Function: "tanpi_towardzero":
double: 2
float: 3
Function: "tanpi_upward":
double: 2
float: 4
Function: "tgamma":
double: 9
Function: "tgamma_downward":
double: 9
Function: "tgamma_towardzero":
double: 9
Function: "tgamma_upward":
double: 9
Function: "y0":
double: 3
float: 9
Function: "y0_downward":
double: 3
float: 9
Function: "y0_towardzero":
double: 4
float: 9
Function: "y0_upward":
double: 3
float: 9
Function: "y1":
double: 3
float: 9
Function: "y1_downward":
double: 6
float: 9
Function: "y1_towardzero":
double: 3
float: 9
Function: "y1_upward":
double: 7
float: 9
Function: "yn":
double: 3
float: 3
Function: "yn_downward":
double: 6
float: 8
Function: "yn_towardzero":
double: 8
float: 8
Function: "yn_upward":
double: 8
float: 8
# end of automatic generation