• Keith Randall's avatar
    cmd/compile,math: improve code generation for math.Abs · fb05948d
    Keith Randall authored
    Implement int reg <-> fp reg moves on amd64.
    If we see a load to int reg followed by an int->fp move, then we can just
    load to the fp reg instead.  Same for stores.
    
    math.Abs is now:
    
    MOVQ	"".x+8(SP), AX
    SHLQ	$1, AX
    SHRQ	$1, AX
    MOVQ	AX, "".~r1+16(SP)
    
    math.Copysign is now:
    
    MOVQ	"".x+8(SP), AX
    SHLQ	$1, AX
    SHRQ	$1, AX
    MOVQ	"".y+16(SP), CX
    SHRQ	$63, CX
    SHLQ	$63, CX
    ORQ	CX, AX
    MOVQ	AX, "".~r2+24(SP)
    
    math.Float64bits is now:
    
    MOVSD	"".x+8(SP), X0
    MOVSD	X0, "".~r1+16(SP)
    (it would be nicer to use a non-SSE reg for this, nothing is perfect)
    
    And due to the fix for #21440, the inlined version of these improve as well.
    
    name      old time/op  new time/op  delta
    Abs       1.38ns ± 5%  0.89ns ±10%  -35.54%  (p=0.000 n=10+10)
    Copysign  1.56ns ± 7%  1.35ns ± 6%  -13.77%  (p=0.000 n=9+10)
    
    Fixes #13095
    
    Change-Id: Ibd7f2792412a6668608780b0688a77062e1f1499
    Reviewed-on: https://go-review.googlesource.com/58732
    Run-TryBot: Keith Randall <khr@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
    fb05948d
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_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...