go/src/math
Brian Kessler a3381faf81 math/big: streamline divLarge initialization
The divLarge code contained "todo"s about avoiding alias
and clear calls in the initialization of variables.  By
rearranging the order of initialization and always using
an auxiliary variable for the shifted divisor, all of these
calls can be safely avoided.  On average, normalizing
the divisor (shift>0) is required 31/32 or 63/64 of the
time.  If one always performs the shift into an auxiliary
variable first, this avoids the need to check for aliasing of
vIn in the output variables u and z.  The remainder u is
initialized via a left shift of uIn and thus needs no
alias check against uIn.  Since uIn and vIn were both used,
z needs no alias checks except against u which is used for
storage of the remainder. This change has a minimal impact
on performance (see below), but cleans up the initialization
code and eliminates the "todo"s.

name                 old time/op  new time/op  delta
Div/20/10-4          86.7ns ± 6%  85.7ns ± 5%    ~     (p=0.841 n=5+5)
Div/200/100-4         523ns ± 5%   502ns ± 3%  -4.13%  (p=0.024 n=5+5)
Div/2000/1000-4      2.55µs ± 3%  2.59µs ± 5%    ~     (p=0.548 n=5+5)
Div/20000/10000-4    80.4µs ± 4%  80.0µs ± 2%    ~     (p=1.000 n=5+5)
Div/200000/100000-4  6.43ms ± 6%  6.35ms ± 4%    ~     (p=0.548 n=5+5)

Fixes #22928

Change-Id: I30d8498ef1cf8b69b0f827165c517bc25a5c32d7
Reviewed-on: https://go-review.googlesource.com/130775
Reviewed-by: Robert Griesemer <gri@golang.org>
2018-08-22 22:54:01 +00:00
..
big math/big: streamline divLarge initialization 2018-08-22 22:54:01 +00:00
bits math/bits: move tests into their own package 2018-05-01 15:33:01 +00:00
cmplx all: update comment URLs from HTTP to HTTPS, where possible 2018-06-01 21:52:00 +00:00
rand math/rand: improve package documentation 2018-08-03 23:08:42 +00:00
abs.go cmd/compile,math: improve code generation for math.Abs 2017-08-25 19:15:01 +00:00
acos_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
acosh.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
acosh_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
all_test.go math: test for pos/neg zero return of Ceil/Floor/Trunc 2018-08-21 22:31:37 +00:00
arith_s390x.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
arith_s390x_test.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
asin.go
asin_386.s
asin_amd64.s
asin_amd64p32.s
asin_arm.s
asin_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
asinh.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
asinh_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
asinh_stub.s math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
atan.go
atan2.go
atan2_386.s
atan2_amd64.s
atan2_amd64p32.s
atan2_arm.s
atan2_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
atan_386.s
atan_amd64.s
atan_amd64p32.s
atan_arm.s
atan_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
atanh.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
atanh_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
bits.go math: add RoundToEven function 2017-10-24 22:33:09 +00:00
cbrt.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
cbrt_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
cbrt_stub.s math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
const.go math: change oeis.org urls to https 2017-08-08 08:56:40 +00:00
copysign.go
cosh_s390x.s cmd/asm, math: add s390x floating point test instructions 2018-04-03 16:08:04 +00:00
dim.go math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
dim_386.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
dim_amd64.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
dim_amd64p32.s
dim_arm.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
dim_arm64.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
dim_s390x.s math: optimize dim and remove s390x assembly implementation 2017-10-30 19:05:51 +00:00
erf.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
erf_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
erf_stub.s math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
erfc_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
erfinv.go all: update comment URLs from HTTP to HTTPS, where possible 2018-06-01 21:52:00 +00:00
example_test.go math: add examples to Ceil, Floor, Pow, Pow10 functions 2018-06-13 22:01:28 +00:00
exp.go math: fix inaccurate result of Exp(1) 2017-08-17 09:01:27 +00:00
exp2_386.s
exp2_amd64.s
exp2_amd64p32.s
exp2_arm.s
exp_386.s math: use portable Exp instead of 387 instructions on 386 2016-10-05 03:53:11 +00:00
exp_amd64.s all: update comment URLs from HTTP to HTTPS, where possible 2018-06-01 21:52:00 +00:00
exp_amd64p32.s
exp_arm.s
exp_arm64.s math: optimize Exp and Exp2 on arm64 2018-03-27 19:55:02 +00:00
exp_asm.go math: implement fast path for Exp 2017-09-20 21:43:00 +00:00
exp_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
expm1.go all: unindent some big chunks of code 2017-08-18 06:59:48 +00:00
expm1_386.s
expm1_amd64.s
expm1_amd64p32.s
expm1_arm.s
expm1_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
export_s390x_test.go math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
export_test.go
floor.go math: add RoundToEven function 2017-10-24 22:33:09 +00:00
floor_386.s
floor_amd64.s cmd/compile: intrinsify math.{Trunc/Ceil/Floor} on amd64 2017-10-31 19:30:54 +00:00
floor_amd64p32.s
floor_arm.s
floor_arm64.s math: add some assembly implementations on ARM64 2016-09-27 23:52:12 +00:00
floor_ppc64x.s math, cmd/internal/obj/ppc64: improve floor, ceil, trunc with asm 2016-09-23 13:03:08 +00:00
floor_s390x.s
floor_wasm.s math, math/big: add wasm architecture 2018-05-08 13:29:22 +00:00
frexp.go
frexp_386.s
frexp_amd64.s
frexp_amd64p32.s
frexp_arm.s
gamma.go math: speed up Gamma(+Inf) 2016-10-18 22:12:03 +00:00
hypot.go math: use Abs rather than if x < 0 { x = -x } 2018-02-13 20:12:23 +00:00
hypot_386.s
hypot_amd64.s
hypot_amd64p32.s
hypot_arm.s
j0.go math: use Abs rather than if x < 0 { x = -x } 2018-02-13 20:12:23 +00:00
j1.go
jn.go math: fix typos in Bessel function docs 2017-02-16 22:41:34 +00:00
ldexp.go math: fix Ldexp when result is below ldexp(2, -1075) 2018-03-29 23:14:13 +00:00
ldexp_386.s
ldexp_amd64.s
ldexp_amd64p32.s
ldexp_arm.s
lgamma.go go/printer, gofmt: tuned table alignment for better results 2018-04-04 13:39:34 -07:00
log.go
log1p.go math,math/cmplx: fix linter issues 2016-10-24 23:25:46 +00:00
log1p_386.s
log1p_amd64.s
log1p_amd64p32.s
log1p_arm.s
log1p_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
log10.go
log10_386.s
log10_amd64.s
log10_amd64p32.s
log10_arm.s
log10_s390x.s cmd/asm, math: add s390x floating point test instructions 2018-04-03 16:08:04 +00:00
log_386.s
log_amd64.s math: speed up Log on amd64 2017-03-29 20:36:29 +00:00
log_amd64p32.s
log_arm.s
log_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
logb.go
mod.go
mod_386.s
mod_amd64.s
mod_amd64p32.s
mod_arm.s
modf.go
modf_386.s
modf_amd64.s
modf_amd64p32.s
modf_arm.s
modf_arm64.s all: minor vet fixes 2016-10-24 17:27:37 +00:00
modf_ppc64x.s math: implement asm modf for ppc64x 2017-11-02 13:24:32 +00:00
nextafter.go
pow.go math: correct result for Pow(x, ±.5) 2018-01-02 18:10:43 +00:00
pow10.go math: speed up and improve accuracy of Pow10 2017-02-22 19:17:04 +00:00
pow_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
pow_stub.s math: use SIMD to accelerate additional scalar math functions on s390x 2017-05-08 19:52:30 +00:00
remainder.go
remainder_386.s
remainder_amd64.s
remainder_amd64p32.s
remainder_arm.s
signbit.go
sin.go math: use Abs rather than if x < 0 { x = -x } 2018-02-13 20:12:23 +00:00
sin_386.s
sin_amd64.s
sin_amd64p32.s
sin_arm.s
sin_s390x.s cmd/asm, math: add s390x floating point test instructions 2018-04-03 16:08:04 +00:00
sincos.go math: remove asm version of sincos everywhere, except 386 2017-04-24 15:09:18 +00:00
sincos_386.go math: remove asm version of sincos everywhere, except 386 2017-04-24 15:09:18 +00:00
sincos_386.s
sinh.go math,net: omit explicit true tag expr in switch 2018-08-20 22:15:59 +00:00
sinh_s390x.s cmd/asm, math: add s390x floating point test instructions 2018-04-03 16:08:04 +00:00
sinh_stub.s math: use SIMD to accelerate some scalar math functions on s390x 2016-11-11 20:20:23 +00:00
sqrt.go
sqrt_386.s
sqrt_amd64.s math: make sqrt smaller on AMD64 2016-09-29 15:56:52 +00:00
sqrt_amd64p32.s
sqrt_arm.s all: use new softfloat on GOARM=5 2018-04-13 16:39:39 +00:00
sqrt_arm64.s
sqrt_mipsx.s runtime/cgo, math: don't use FP instructions for soft-float mips{,le} 2017-11-30 17:12:32 +00:00
sqrt_ppc64x.s
sqrt_s390x.s
sqrt_wasm.s math, math/big: add wasm architecture 2018-05-08 13:29:22 +00:00
stubs_arm64.s math: optimize Exp and Exp2 on arm64 2018-03-27 19:55:02 +00:00
stubs_mips64x.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
stubs_mipsx.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
stubs_ppc64x.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
stubs_s390x.s math: remove asm version of Dim 2017-11-30 21:00:33 +00:00
stubs_wasm.s math, math/big: add wasm architecture 2018-05-08 13:29:22 +00:00
tan.go math,math/cmplx: fix linter issues 2016-10-24 23:25:46 +00:00
tan_386.s
tan_amd64.s
tan_amd64p32.s
tan_arm.s
tan_s390x.s math: use s390x mnemonics rather than binary encodings 2018-08-20 17:42:08 +00:00
tanh.go math: use SIMD to accelerate some scalar math functions on s390x 2016-11-11 20:20:23 +00:00
tanh_s390x.s cmd/asm, math: add s390x floating point test instructions 2018-04-03 16:08:04 +00:00
unsafe.go