go/src/math
Filippo Valsorda eb12245645 math/big: fix BitLen performance regression
CL 450055 replaced BitLen with a slower constant-time implementation,
which caused a performance regression in some ecosystem benchmarks.

https://perf.golang.org/search?q=upload%3A20221130.13+pkg%3Agithub.com%2Fericlagergren%2Fdecimal%2Fbenchmarks

Current tip vs this CL

name                                   old time/op  new time/op  delta
Pi/foo=ericlagergren_(Go)/prec=100-4    151µs ± 0%   129µs ± 0%  -14.89%  (p=0.000 n=10+9)
Pi/foo=ericlagergren_(GDA)/prec=100-4   305µs ± 0%   269µs ± 1%  -11.88%  (p=0.000 n=9+10)
Pi/foo=cockroachdb/apd/prec=100-4      5.74ms ± 0%  5.33ms ± 0%   -7.02%  (p=0.000 n=9+10)
Pi/foo=shopspring/prec=100-4            265µs ±16%   268µs ±11%     ~     (p=0.796 n=10+10)
Pi/foo=apmckinlay/prec=100-4           3.10µs ± 0%  3.08µs ± 0%   -0.60%  (p=0.000 n=8+10)
Pi/foo=go-inf/prec=100-4                132µs ± 9%   137µs ± 9%     ~     (p=0.182 n=10+9)
Pi/foo=float64/prec=100-4              4.97µs ± 0%  4.98µs ± 0%     ~     (p=0.196 n=10+10)

CL 450055's parent vs this CL

name                                   old time/op  new time/op  delta
Pi/foo=ericlagergren_(Go)/prec=100-4    129µs ± 1%   129µs ± 0%    ~     (p=0.182 n=10+9)
Pi/foo=ericlagergren_(GDA)/prec=100-4   267µs ± 1%   269µs ± 1%  +0.93%  (p=0.001 n=9+10)
Pi/foo=shopspring/prec=100-4            252µs ± 9%   268µs ±11%    ~     (p=0.052 n=10+10)
Pi/foo=apmckinlay/prec=100-4           3.10µs ± 1%  3.08µs ± 0%  -0.66%  (p=0.000 n=9+10)
Pi/foo=go-inf/prec=100-4                135µs ± 6%   137µs ± 9%    ~     (p=0.605 n=9+9)
Pi/foo=float64/prec=100-4              4.97µs ± 0%  4.98µs ± 0%  +0.23%  (p=0.005 n=8+10)

goos: linux
goarch: amd64
pkg: github.com/ericlagergren/decimal_benchmarks
cpu: Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz

Fixes #57014

Change-Id: I08478bea122212320a592ad2652e33077807de09
Reviewed-on: https://go-review.googlesource.com/c/go/+/454617
Reviewed-by: Roland Shoemaker <roland@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2022-12-02 17:52:41 +00:00
..
big math/big: fix BitLen performance regression 2022-12-02 17:52:41 +00:00
bits math/bits: directly calculate quo/rem when hi is zero in Div64 2022-11-14 05:09:39 +00:00
cmplx all: add missing periods in comments 2022-11-18 17:59:44 +00:00
rand math/rand: deprecate Seed 2022-11-16 21:21:22 +00:00
abs.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
acos_s390x.s
acosh.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
acosh_s390x.s
all_test.go math: don't use integer division that truncates to zero 2022-03-05 21:19:15 +00:00
arith_s390x.go
arith_s390x_test.go
asin.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
asin_s390x.s
asinh.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
asinh_s390x.s
atan.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
atan2.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
atan2_s390x.s
atan_s390x.s
atanh.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
atanh_s390x.s
bits.go all: replace `` and '' with “ (U+201C) and ” (U+201D) in doc comments 2022-04-05 17:52:29 +00:00
cbrt.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
cbrt_s390x.s
const.go math: show value of integer constants in comments 2022-09-21 14:07:39 +00:00
const_test.go math: add MaxUint, MinInt, MaxInt 2021-05-03 22:44:33 +00:00
copysign.go math: improve documentation of Copysign 2022-04-14 17:42:53 +00:00
cosh_s390x.s
dim.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
dim_amd64.s
dim_arm64.s
dim_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
dim_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
dim_riscv64.s
dim_s390x.s
erf.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
erf_s390x.s
erfc_s390x.s
erfinv.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
example_test.go math: add Remainder example 2021-10-07 18:09:53 +00:00
exp.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
exp2_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
exp2_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
exp_amd64.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
exp_amd64.s
exp_arm64.s
exp_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
exp_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
exp_s390x.s
expm1.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
expm1_s390x.s
export_s390x_test.go
export_test.go
floor.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
floor_386.s
floor_amd64.s
floor_arm64.s
floor_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
floor_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
floor_ppc64x.s all: add //go:build lines to assembly files 2021-05-13 09:12:17 +00:00
floor_s390x.s
floor_wasm.s
fma.go
frexp.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
gamma.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
huge_test.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
hypot.go math: optimize Hypot function 2022-10-01 01:51:35 +00:00
hypot_386.s
hypot_amd64.s
hypot_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
hypot_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
j0.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
j1.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
jn.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
ldexp.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
lgamma.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
log.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
log1p.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
log1p_s390x.s
log10.go
log10_s390x.s
log_amd64.s
log_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
log_s390x.s
log_stub.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
logb.go math: fix function name in comment 2022-11-07 19:46:45 +00:00
mod.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
modf.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
modf_arm64.s
modf_asm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
modf_noasm.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
modf_ppc64x.s all: add //go:build lines to assembly files 2021-05-13 09:12:17 +00:00
nextafter.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
pow.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
pow10.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
pow_s390x.s
remainder.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
signbit.go
sin.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
sin_s390x.s
sincos.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
sinh.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
sinh_s390x.s all: fix typos 2021-08-17 13:54:10 +00:00
sqrt.go cmd/compile,math: remove all sqrt assembly code 2022-08-15 17:07:57 +00:00
stubs.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
stubs_s390x.s
tan.go all: fix some lint issues 2022-05-08 17:27:54 +00:00
tan_s390x.s all: fix typos 2021-08-17 13:54:10 +00:00
tanh.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
tanh_s390x.s
trig_reduce.go all: gofmt main repo 2022-04-11 16:34:30 +00:00
unsafe.go