• fanzha02's avatar
    cmd/compile: optimize math.Float64(32)bits and math.Float64(32)frombits on arm64 · a19a83c8
    fanzha02 authored
    Use float <-> int register moves without conversion instead of stores
    and loads to move float <-> int values.
    
    Math package benchmark results.
    name                 old time/op  new time/op  delta
    Acosh                 153ns ± 0%   147ns ± 0%   -3.92%  (p=0.000 n=10+10)
    Asinh                 183ns ± 0%   177ns ± 0%   -3.28%  (p=0.000 n=10+10)
    Atanh                 157ns ± 0%   155ns ± 0%   -1.27%  (p=0.000 n=10+10)
    Atan2                 118ns ± 0%   117ns ± 1%   -0.59%  (p=0.003 n=10+10)
    Cbrt                  119ns ± 0%   114ns ± 0%   -4.20%  (p=0.000 n=10+10)
    Copysign             7.51ns ± 0%  6.51ns ± 0%  -13.32%  (p=0.000 n=9+10)
    Cos                  73.1ns ± 0%  70.6ns ± 0%   -3.42%  (p=0.000 n=10+10)
    Cosh                  119ns ± 0%   121ns ± 0%   +1.68%  (p=0.000 n=10+9)
    ExpGo                 154ns ± 0%   149ns ± 0%   -3.05%  (p=0.000 n=9+10)
    Expm1                 101ns ± 0%    99ns ± 0%   -1.88%  (p=0.000 n=10+10)
    Exp2Go                150ns ± 0%   146ns ± 0%   -2.67%  (p=0.000 n=10+10)
    Abs                  7.01ns ± 0%  6.01ns ± 0%  -14.27%  (p=0.000 n=10+9)
    Mod                   234ns ± 0%   212ns ± 0%   -9.40%  (p=0.000 n=9+10)
    Frexp                34.5ns ± 0%  30.0ns ± 0%  -13.04%  (p=0.000 n=10+10)
    Gamma                 112ns ± 0%   111ns ± 0%   -0.89%  (p=0.000 n=10+10)
    Hypot                73.6ns ± 0%  68.6ns ± 0%   -6.79%  (p=0.000 n=10+10)
    HypotGo              77.1ns ± 0%  72.1ns ± 0%   -6.49%  (p=0.000 n=10+10)
    Ilogb                31.0ns ± 0%  28.0ns ± 0%   -9.68%  (p=0.000 n=10+10)
    J0                    437ns ± 0%   434ns ± 0%   -0.62%  (p=0.000 n=10+10)
    J1                    433ns ± 0%   431ns ± 0%   -0.46%  (p=0.000 n=10+10)
    Jn                    927ns ± 0%   922ns ± 0%   -0.54%  (p=0.000 n=10+10)
    Ldexp                41.5ns ± 0%  37.0ns ± 0%  -10.84%  (p=0.000 n=9+10)
    Log                   124ns ± 0%   118ns ± 0%   -4.84%  (p=0.000 n=10+9)
    Logb                 34.0ns ± 0%  32.0ns ± 0%   -5.88%  (p=0.000 n=10+10)
    Log1p                 110ns ± 0%   108ns ± 0%   -1.82%  (p=0.000 n=10+10)
    Log10                 136ns ± 0%   132ns ± 0%   -2.94%  (p=0.000 n=10+10)
    Log2                 51.6ns ± 0%  47.1ns ± 0%   -8.72%  (p=0.000 n=10+10)
    Nextafter32          33.0ns ± 0%  30.5ns ± 0%   -7.58%  (p=0.000 n=10+10)
    Nextafter64          29.0ns ± 0%  26.5ns ± 0%   -8.62%  (p=0.000 n=10+10)
    PowInt                169ns ± 0%   160ns ± 0%   -5.33%  (p=0.000 n=10+10)
    PowFrac               375ns ± 0%   361ns ± 0%   -3.73%  (p=0.000 n=10+10)
    RoundToEven          14.0ns ± 0%  12.5ns ± 0%  -10.71%  (p=0.000 n=10+10)
    Remainder             206ns ± 0%   192ns ± 0%   -6.80%  (p=0.000 n=10+9)
    Signbit              6.01ns ± 0%  5.51ns ± 0%   -8.32%  (p=0.000 n=10+9)
    Sin                  70.1ns ± 0%  69.6ns ± 0%   -0.71%  (p=0.000 n=10+10)
    Sincos               99.1ns ± 0%  99.6ns ± 0%   +0.50%  (p=0.000 n=9+10)
    SqrtGoLatency         178ns ± 0%   146ns ± 0%  -17.70%  (p=0.000 n=8+10)
    SqrtPrime            9.19µs ± 0%  9.20µs ± 0%   +0.01%  (p=0.000 n=9+9)
    Tanh                  125ns ± 1%   127ns ± 0%   +1.36%  (p=0.000 n=10+10)
    Y0                    428ns ± 0%   426ns ± 0%   -0.47%  (p=0.000 n=10+10)
    Y1                    431ns ± 0%   429ns ± 0%   -0.46%  (p=0.000 n=10+9)
    Yn                    906ns ± 0%   901ns ± 0%   -0.55%  (p=0.000 n=10+10)
    Float64bits          4.50ns ± 0%  3.50ns ± 0%  -22.22%  (p=0.000 n=10+10)
    Float64frombits      4.00ns ± 0%  3.50ns ± 0%  -12.50%  (p=0.000 n=10+9)
    Float32bits          4.50ns ± 0%  3.50ns ± 0%  -22.22%  (p=0.002 n=8+10)
    Float32frombits      4.00ns ± 0%  3.50ns ± 0%  -12.50%  (p=0.000 n=10+10)
    
    Change-Id: Iba829e15d5624962fe0c699139ea783efeefabc2
    Reviewed-on: https://go-review.googlesource.com/129715Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    Run-TryBot: Cherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    a19a83c8
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...
erfinv.go Loading commit data...
example_test.go 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_arm64.s Loading commit data...
exp_asm.go 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_ppc64x.s Loading commit data...
floor_s390x.s Loading commit data...
floor_wasm.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...
modf_ppc64x.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...
sqrt_wasm.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...
stubs_wasm.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...