• Bill O'Farrell's avatar
    math: use SIMD to accelerate additional scalar math functions on s390x · 88672de7
    Bill O'Farrell authored
    As necessary, math functions were structured to use stubs, so that they can
    be accelerated with assembly on any platform.
    
    Technique used was minimax polynomial approximation using tables of
    polynomial coefficients, with argument range reduction.
    
    Benchmark         New     Old     Speedup
    BenchmarkAcos     12.2    47.5    3.89
    BenchmarkAcosh    18.5    56.2    3.04
    BenchmarkAsin     13.1    40.6    3.10
    BenchmarkAsinh    19.4    62.8    3.24
    BenchmarkAtan     10.1    23      2.28
    BenchmarkAtanh    19.1    53.2    2.79
    BenchmarkAtan2    16.5    33.9    2.05
    BenchmarkCbrt     14.8    58      3.92
    BenchmarkErf      10.8    20.1    1.86
    BenchmarkErfc     11.2    23.5    2.10
    BenchmarkExp      8.77    53.8    6.13
    BenchmarkExpm1    10.1    38.3    3.79
    BenchmarkLog      13.1    40.1    3.06
    BenchmarkLog1p    12.7    38.3    3.02
    BenchmarkPowInt   31.7    40.5    1.28
    BenchmarkPowFrac  33.1    141     4.26
    BenchmarkTan      11.5    30      2.61
    
    Accuracy was tested against a high precision
    reference function to determine maximum error.
    Note: ulperr is error in "units in the last place"
    
           max
          ulperr
    Acos  1.15
    Acosh 1.07
    Asin  2.22
    Asinh 1.72
    Atan  1.41
    Atanh 3.00
    Atan2 1.45
    Cbrt  1.18
    Erf   1.29
    Erfc  4.82
    Exp   1.00
    Expm1 2.26
    Log   0.94
    Log1p 2.39
    Tan   3.14
    
    Pow will have 99.99% correctly rounded results with reasonable inputs
    producing numeric (non Inf or NaN) results
    
    Change-Id: I850e8cf7b70426e8b54ec49d74acd4cddc8c6cb2
    Reviewed-on: https://go-review.googlesource.com/38585Reviewed-by: 's avatarMichael Munday <munday@ca.ibm.com>
    Run-TryBot: Michael Munday <munday@ca.ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    88672de7
Name
Last commit
Last update
..
big Loading commit data...
bits Loading commit data...
cmplx Loading commit data...
rand Loading commit data...
abs.go Loading commit data...
acos_s390x.s Loading commit data...
acosh.go Loading commit data...
acosh_s390x.s Loading commit data...
all_test.go Loading commit data...
arith_s390x.go Loading commit data...
arith_s390x_test.go Loading commit data...
asin.go Loading commit data...
asin_386.s Loading commit data...
asin_amd64.s Loading commit data...
asin_amd64p32.s Loading commit data...
asin_arm.s Loading commit data...
asin_s390x.s Loading commit data...
asinh.go Loading commit data...
asinh_s390x.s Loading commit data...
asinh_stub.s Loading commit data...
atan.go Loading commit data...
atan2.go Loading commit data...
atan2_386.s Loading commit data...
atan2_amd64.s Loading commit data...
atan2_amd64p32.s Loading commit data...
atan2_arm.s Loading commit data...
atan2_s390x.s Loading commit data...
atan_386.s Loading commit data...
atan_amd64.s Loading commit data...
atan_amd64p32.s Loading commit data...
atan_arm.s Loading commit data...
atan_s390x.s Loading commit data...
atanh.go Loading commit data...
atanh_s390x.s Loading commit data...
bits.go Loading commit data...
cbrt.go Loading commit data...
cbrt_s390x.s Loading commit data...
cbrt_stub.s Loading commit data...
const.go Loading commit data...
copysign.go Loading commit data...
cosh_s390x.s Loading commit data...
dim.go Loading commit data...
dim_386.s Loading commit data...
dim_amd64.s Loading commit data...
dim_amd64p32.s Loading commit data...
dim_arm.s Loading commit data...
dim_arm64.s Loading commit data...
dim_s390x.s Loading commit data...
erf.go Loading commit data...
erf_s390x.s Loading commit data...
erf_stub.s Loading commit data...
erfc_s390x.s Loading commit data...
exp.go Loading commit data...
exp2_386.s Loading commit data...
exp2_amd64.s Loading commit data...
exp2_amd64p32.s Loading commit data...
exp2_arm.s Loading commit data...
exp_386.s Loading commit data...
exp_amd64.s Loading commit data...
exp_amd64p32.s Loading commit data...
exp_arm.s Loading commit data...
exp_s390x.s Loading commit data...
expm1.go Loading commit data...
expm1_386.s Loading commit data...
expm1_amd64.s Loading commit data...
expm1_amd64p32.s Loading commit data...
expm1_arm.s Loading commit data...
expm1_s390x.s Loading commit data...
export_s390x_test.go Loading commit data...
export_test.go Loading commit data...
floor.go Loading commit data...
floor_386.s Loading commit data...
floor_amd64.s Loading commit data...
floor_amd64p32.s Loading commit data...
floor_arm.s Loading commit data...
floor_arm64.s Loading commit data...
floor_asm.go Loading commit data...
floor_ppc64x.s Loading commit data...
floor_s390x.s Loading commit data...
frexp.go Loading commit data...
frexp_386.s Loading commit data...
frexp_amd64.s Loading commit data...
frexp_amd64p32.s Loading commit data...
frexp_arm.s Loading commit data...
gamma.go Loading commit data...
hypot.go Loading commit data...
hypot_386.s Loading commit data...
hypot_amd64.s Loading commit data...
hypot_amd64p32.s Loading commit data...
hypot_arm.s Loading commit data...
j0.go Loading commit data...
j1.go Loading commit data...
jn.go Loading commit data...
ldexp.go Loading commit data...
ldexp_386.s Loading commit data...
ldexp_amd64.s Loading commit data...
ldexp_amd64p32.s Loading commit data...
ldexp_arm.s Loading commit data...
lgamma.go Loading commit data...
log.go Loading commit data...
log10.go Loading commit data...
log10_386.s Loading commit data...
log10_amd64.s Loading commit data...
log10_amd64p32.s Loading commit data...
log10_arm.s Loading commit data...
log10_s390x.s Loading commit data...
log1p.go Loading commit data...
log1p_386.s Loading commit data...
log1p_amd64.s Loading commit data...
log1p_amd64p32.s Loading commit data...
log1p_arm.s Loading commit data...
log1p_s390x.s Loading commit data...
log_386.s Loading commit data...
log_amd64.s Loading commit data...
log_amd64p32.s Loading commit data...
log_arm.s Loading commit data...
log_s390x.s Loading commit data...
logb.go Loading commit data...
mod.go Loading commit data...
mod_386.s Loading commit data...
mod_amd64.s Loading commit data...
mod_amd64p32.s Loading commit data...
mod_arm.s Loading commit data...
modf.go Loading commit data...
modf_386.s Loading commit data...
modf_amd64.s Loading commit data...
modf_amd64p32.s Loading commit data...
modf_arm.s Loading commit data...
modf_arm64.s Loading commit data...
nextafter.go Loading commit data...
pow.go Loading commit data...
pow10.go Loading commit data...
pow_s390x.s Loading commit data...
pow_stub.s Loading commit data...
remainder.go Loading commit data...
remainder_386.s Loading commit data...
remainder_amd64.s Loading commit data...
remainder_amd64p32.s Loading commit data...
remainder_arm.s Loading commit data...
signbit.go Loading commit data...
sin.go Loading commit data...
sin_386.s Loading commit data...
sin_amd64.s Loading commit data...
sin_amd64p32.s Loading commit data...
sin_arm.s Loading commit data...
sin_s390x.s Loading commit data...
sincos.go Loading commit data...
sincos_386.go Loading commit data...
sincos_386.s Loading commit data...
sinh.go Loading commit data...
sinh_s390x.s Loading commit data...
sinh_stub.s Loading commit data...
sqrt.go Loading commit data...
sqrt_386.s Loading commit data...
sqrt_amd64.s Loading commit data...
sqrt_amd64p32.s Loading commit data...
sqrt_arm.s Loading commit data...
sqrt_arm64.s Loading commit data...
sqrt_mipsx.s Loading commit data...
sqrt_ppc64x.s Loading commit data...
sqrt_s390x.s Loading commit data...
stubs_arm64.s Loading commit data...
stubs_mips64x.s Loading commit data...
stubs_mipsx.s Loading commit data...
stubs_ppc64x.s Loading commit data...
stubs_s390x.s Loading commit data...
tan.go Loading commit data...
tan_386.s Loading commit data...
tan_amd64.s Loading commit data...
tan_amd64p32.s Loading commit data...
tan_arm.s Loading commit data...
tan_s390x.s Loading commit data...
tanh.go Loading commit data...
tanh_s390x.s Loading commit data...
unsafe.go Loading commit data...