mirror of https://github.com/golang/go.git
This commit optimized math.Abs function implementation on mips64x.
Tested on loongson 3A2000.
goos: linux
goarch: mips64le
pkg: math
│ oldmath │ newmath │
│ sec/op │ sec/op vs base │
Acos-4 258.0n ± ∞ ¹ 257.1n ± ∞ ¹ -0.35% (p=0.008 n=5)
Acosh-4 417.0n ± ∞ ¹ 377.9n ± ∞ ¹ -9.38% (p=0.008 n=5)
Asin-4 248.0n ± ∞ ¹ 259.9n ± ∞ ¹ +4.80% (p=0.008 n=5)
Asinh-4 439.6n ± ∞ ¹ 408.3n ± ∞ ¹ -7.12% (p=0.008 n=5)
Atan-4 189.6n ± ∞ ¹ 188.8n ± ∞ ¹ ~ (p=0.056 n=5)
Atanh-4 390.0n ± ∞ ¹ 356.4n ± ∞ ¹ -8.62% (p=0.008 n=5)
Atan2-4 279.0n ± ∞ ¹ 263.9n ± ∞ ¹ -5.41% (p=0.008 n=5)
Cbrt-4 314.2n ± ∞ ¹ 322.3n ± ∞ ¹ +2.58% (p=0.008 n=5)
Ceil-4 139.7n ± ∞ ¹ 136.6n ± ∞ ¹ -2.22% (p=0.008 n=5)
Compare-4 21.11n ± ∞ ¹ 21.09n ± ∞ ¹ ~ (p=0.405 n=5)
Compare32-4 20.10n ± ∞ ¹ 20.12n ± ∞ ¹ ~ (p=0.206 n=5)
Copysign-4 32.17n ± ∞ ¹ 35.71n ± ∞ ¹ +11.00% (p=0.008 n=5)
Cos-4 222.8n ± ∞ ¹ 169.8n ± ∞ ¹ -23.79% (p=0.008 n=5)
Cosh-4 550.2n ± ∞ ¹ 477.4n ± ∞ ¹ -13.23% (p=0.008 n=5)
Erf-4 171.6n ± ∞ ¹ 174.5n ± ∞ ¹ ~ (p=0.635 n=5)
Erfc-4 182.6n ± ∞ ¹ 170.2n ± ∞ ¹ -6.79% (p=0.008 n=5)
Erfinv-4 177.6n ± ∞ ¹ 196.6n ± ∞ ¹ +10.70% (p=0.008 n=5)
Erfcinv-4 177.8n ± ∞ ¹ 197.8n ± ∞ ¹ +11.25% (p=0.008 n=5)
Exp-4 422.8n ± ∞ ¹ 382.1n ± ∞ ¹ -9.63% (p=0.008 n=5)
ExpGo-4 416.1n ± ∞ ¹ 383.2n ± ∞ ¹ -7.91% (p=0.008 n=5)
Expm1-4 232.9n ± ∞ ¹ 252.2n ± ∞ ¹ +8.29% (p=0.008 n=5)
Exp2-4 404.8n ± ∞ ¹ 389.1n ± ∞ ¹ -3.88% (p=0.008 n=5)
Exp2Go-4 407.0n ± ∞ ¹ 372.3n ± ∞ ¹ -8.53% (p=0.008 n=5)
Abs-4 30.120n ± ∞ ¹ 3.014n ± ∞ ¹ -89.99% (p=0.008 n=5)
Dim-4 5.021n ± ∞ ¹ 5.023n ± ∞ ¹ ~ (p=0.071 n=5)
Floor-4 127.8n ± ∞ ¹ 127.1n ± ∞ ¹ -0.55% (p=0.008 n=5)
Max-4 77.69n ± ∞ ¹ 76.33n ± ∞ ¹ -1.75% (p=0.008 n=5)
Min-4 83.27n ± ∞ ¹ 77.87n ± ∞ ¹ -6.48% (p=0.008 n=5)
Mod-4 906.2n ± ∞ ¹ 692.9n ± ∞ ¹ -23.54% (p=0.008 n=5)
Frexp-4 150.6n ± ∞ ¹ 108.6n ± ∞ ¹ -27.89% (p=0.008 n=5)
Gamma-4 418.4n ± ∞ ¹ 386.1n ± ∞ ¹ -7.72% (p=0.008 n=5)
Hypot-4 148.20n ± ∞ ¹ 93.78n ± ∞ ¹ -36.72% (p=0.008 n=5)
HypotGo-4 148.20n ± ∞ ¹ 94.47n ± ∞ ¹ -36.26% (p=0.008 n=5)
Ilogb-4 135.50n ± ∞ ¹ 92.38n ± ∞ ¹ -31.82% (p=0.008 n=5)
J0-4 937.7n ± ∞ ¹ 861.7n ± ∞ ¹ -8.10% (p=0.008 n=5)
J1-4 915.4n ± ∞ ¹ 875.9n ± ∞ ¹ -4.32% (p=0.008 n=5)
Jn-4 1.974µ ± ∞ ¹ 1.863µ ± ∞ ¹ -5.62% (p=0.008 n=5)
Ldexp-4 158.5n ± ∞ ¹ 129.3n ± ∞ ¹ -18.42% (p=0.008 n=5)
Lgamma-4 209.0n ± ∞ ¹ 211.8n ± ∞ ¹ ~ (p=0.095 n=5)
Log-4 326.4n ± ∞ ¹ 295.2n ± ∞ ¹ -9.56% (p=0.008 n=5)
Logb-4 147.7n ± ∞ ¹ 105.0n ± ∞ ¹ -28.91% (p=0.008 n=5)
Log1p-4 303.4n ± ∞ ¹ 266.3n ± ∞ ¹ -12.23% (p=0.008 n=5)
Log10-4 329.2n ± ∞ ¹ 298.3n ± ∞ ¹ -9.39% (p=0.008 n=5)
Log2-4 187.4n ± ∞ ¹ 153.0n ± ∞ ¹ -18.36% (p=0.008 n=5)
Modf-4 110.5n ± ∞ ¹ 103.5n ± ∞ ¹ -6.33% (p=0.008 n=5)
Nextafter32-4 128.4n ± ∞ ¹ 121.5n ± ∞ ¹ -5.37% (p=0.016 n=5)
Nextafter64-4 109.5n ± ∞ ¹ 110.5n ± ∞ ¹ +0.91% (p=0.008 n=5)
PowInt-4 603.3n ± ∞ ¹ 516.4n ± ∞ ¹ -14.40% (p=0.008 n=5)
PowFrac-4 1.365µ ± ∞ ¹ 1.183µ ± ∞ ¹ -13.33% (p=0.008 n=5)
Pow10Pos-4 15.07n ± ∞ ¹ 15.07n ± ∞ ¹ ~ (p=0.738 n=5)
Pow10Neg-4 21.11n ± ∞ ¹ 21.10n ± ∞ ¹ ~ (p=0.190 n=5)
Round-4 44.23n ± ∞ ¹ 44.22n ± ∞ ¹ ~ (p=0.635 n=5)
RoundToEven-4 50.25n ± ∞ ¹ 46.27n ± ∞ ¹ -7.92% (p=0.008 n=5)
Remainder-4 675.6n ± ∞ ¹ 530.4n ± ∞ ¹ -21.49% (p=0.008 n=5)
Signbit-4 17.07n ± ∞ ¹ 17.95n ± ∞ ¹ +5.16% (p=0.008 n=5)
Sin-4 171.6n ± ∞ ¹ 189.1n ± ∞ ¹ +10.20% (p=0.008 n=5)
Sincos-4 201.5n ± ∞ ¹ 200.5n ± ∞ ¹ ~ (p=0.421 n=5)
Sinh-4 529.6n ± ∞ ¹ 484.6n ± ∞ ¹ -8.50% (p=0.008 n=5)
SqrtIndirect-4 5.021n ± ∞ ¹ 5.023n ± ∞ ¹ +0.04% (p=0.048 n=5)
SqrtLatency-4 8.032n ± ∞ ¹ 8.039n ± ∞ ¹ +0.09% (p=0.024 n=5)
SqrtIndirectLatency-4 8.036n ± ∞ ¹ 8.038n ± ∞ ¹ ~ (p=0.056 n=5)
SqrtGoLatency-4 338.8n ± ∞ ¹ 338.7n ± ∞ ¹ ~ (p=0.841 n=5)
SqrtPrime-4 5.379µ ± ∞ ¹ 5.382µ ± ∞ ¹ +0.06% (p=0.048 n=5)
Tan-4 182.7n ± ∞ ¹ 191.8n ± ∞ ¹ +4.98% (p=0.008 n=5)
Tanh-4 558.7n ± ∞ ¹ 497.6n ± ∞ ¹ -10.94% (p=0.008 n=5)
Trunc-4 122.5n ± ∞ ¹ 122.6n ± ∞ ¹ ~ (p=0.405 n=5)
Y0-4 892.8n ± ∞ ¹ 851.7n ± ∞ ¹ -4.60% (p=0.008 n=5)
Y1-4 887.2n ± ∞ ¹ 863.2n ± ∞ ¹ -2.71% (p=0.008 n=5)
Yn-4 1.889µ ± ∞ ¹ 1.832µ ± ∞ ¹ -3.02% (p=0.008 n=5)
Float64bits-4 13.05n ± ∞ ¹ 13.06n ± ∞ ¹ +0.08% (p=0.040 n=5)
Float64frombits-4 13.05n ± ∞ ¹ 13.06n ± ∞ ¹ ~ (p=0.143 n=5)
Float32bits-4 13.05n ± ∞ ¹ 13.06n ± ∞ ¹ +0.08% (p=0.008 n=5)
Float32frombits-4 13.05n ± ∞ ¹ 13.08n ± ∞ ¹ +0.23% (p=0.016 n=5)
FMA-4 445.7n ± ∞ ¹ 448.1n ± ∞ ¹ +0.54% (p=0.008 n=5)
geomean 157.2n 142.8n -9.17%
Change-Id: I9bf104848b588c9ecf79401a81d483d7fcdb0a79
Reviewed-on: https://go-review.googlesource.com/c/go/+/481575
Reviewed-by: M Zhuo <mzh@golangcn.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Than McIntosh <thanm@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Than McIntosh <thanm@google.com>
Reviewed-by: Rong Zhang <rongrong@oss.cipunited.com>
|
||
|---|---|---|
| .. | ||
| abi | ||
| alias3.dir | ||
| asmhdr.dir | ||
| bench | ||
| chan | ||
| closure3.dir | ||
| closure5.dir | ||
| codegen | ||
| ddd2.dir | ||
| dwarf | ||
| fixedbugs | ||
| import2.dir | ||
| import4.dir | ||
| interface | ||
| intrinsic.dir | ||
| ken | ||
| linkname.dir | ||
| method4.dir | ||
| retjmp.dir | ||
| runtime | ||
| stress | ||
| syntax | ||
| typeparam | ||
| uintptrescapes.dir | ||
| 64bit.go | ||
| 235.go | ||
| README.md | ||
| alg.go | ||
| alias.go | ||
| alias1.go | ||
| alias2.go | ||
| alias3.go | ||
| align.go | ||
| append.go | ||
| append1.go | ||
| args.go | ||
| armimm.go | ||
| asmhdr.go | ||
| assign.go | ||
| assign1.go | ||
| atomicload.go | ||
| bigalg.go | ||
| bigmap.go | ||
| blank.go | ||
| blank1.go | ||
| bom.go | ||
| bombad.go | ||
| bounds.go | ||
| cannotassign.go | ||
| chancap.go | ||
| chanlinear.go | ||
| char_lit.go | ||
| char_lit1.go | ||
| checkbce.go | ||
| clear.go | ||
| clearfat.go | ||
| closedchan.go | ||
| closure.go | ||
| closure1.go | ||
| closure2.go | ||
| closure3.go | ||
| closure4.go | ||
| closure5.go | ||
| closure6.go | ||
| closure7.go | ||
| cmp.go | ||
| cmp6.go | ||
| cmplx.go | ||
| cmplxdivide.c | ||
| cmplxdivide.go | ||
| cmplxdivide1.go | ||
| complit.go | ||
| complit1.go | ||
| compos.go | ||
| const.go | ||
| const1.go | ||
| const2.go | ||
| const3.go | ||
| const4.go | ||
| const5.go | ||
| const6.go | ||
| const7.go | ||
| const8.go | ||
| convT2X.go | ||
| convert.go | ||
| convert1.go | ||
| convert2.go | ||
| convert3.go | ||
| convert4.go | ||
| convinline.go | ||
| convlit.go | ||
| convlit1.go | ||
| copy.go | ||
| copy1.go | ||
| crlf.go | ||
| ddd.go | ||
| ddd1.go | ||
| ddd2.go | ||
| decl.go | ||
| declbad.go | ||
| defer.go | ||
| defererrcheck.go | ||
| deferfin.go | ||
| defernil.go | ||
| deferprint.go | ||
| deferprint.out | ||
| devirt.go | ||
| directive.go | ||
| directive2.go | ||
| divide.go | ||
| divmod.go | ||
| embedfunc.go | ||
| embedvers.go | ||
| empty.go | ||
| env.go | ||
| eof.go | ||
| eof1.go | ||
| escape.go | ||
| escape2.go | ||
| escape2n.go | ||
| escape3.go | ||
| escape4.go | ||
| escape5.go | ||
| escape_array.go | ||
| escape_calls.go | ||
| escape_closure.go | ||
| escape_field.go | ||
| escape_goto.go | ||
| escape_hash_maphash.go | ||
| escape_iface.go | ||
| escape_iface_unified.go | ||
| escape_indir.go | ||
| escape_level.go | ||
| escape_map.go | ||
| escape_param.go | ||
| escape_runtime_atomic.go | ||
| escape_selfassign.go | ||
| escape_slice.go | ||
| escape_struct_param1.go | ||
| escape_struct_param2.go | ||
| escape_struct_return.go | ||
| escape_sync_atomic.go | ||
| escape_unsafe.go | ||
| fibo.go | ||
| finprofiled.go | ||
| float_lit.go | ||
| float_lit2.go | ||
| float_lit3.go | ||
| floatcmp.go | ||
| for.go | ||
| func.go | ||
| func1.go | ||
| func2.go | ||
| func3.go | ||
| func4.go | ||
| func5.go | ||
| func6.go | ||
| func7.go | ||
| func8.go | ||
| funcdup.go | ||
| funcdup2.go | ||
| fuse.go | ||
| gc.go | ||
| gc1.go | ||
| gc2.go | ||
| gcgort.go | ||
| gcstring.go | ||
| goprint.go | ||
| goprint.out | ||
| goto.go | ||
| heapsampling.go | ||
| helloworld.go | ||
| helloworld.out | ||
| if.go | ||
| import.go | ||
| import1.go | ||
| import2.go | ||
| import4.go | ||
| import5.go | ||
| import6.go | ||
| index.go | ||
| index0.go | ||
| index1.go | ||
| index2.go | ||
| indirect.go | ||
| indirect1.go | ||
| init.go | ||
| init1.go | ||
| initcomma.go | ||
| initexp.go | ||
| initialize.go | ||
| initializerr.go | ||
| initloop.go | ||
| inline.go | ||
| inline_big.go | ||
| inline_caller.go | ||
| inline_callers.go | ||
| inline_endian.go | ||
| inline_literal.go | ||
| inline_math_bits_rotate.go | ||
| inline_sync.go | ||
| inline_unified.go | ||
| inline_variadic.go | ||
| int_lit.go | ||
| intcvt.go | ||
| intrinsic.go | ||
| intrinsic_atomic.go | ||
| iota.go | ||
| label.go | ||
| label1.go | ||
| linkmain.go | ||
| linkmain_run.go | ||
| linkname.go | ||
| linkname3.go | ||
| linkobj.go | ||
| linkx.go | ||
| linkx_run.go | ||
| literal.go | ||
| literal2.go | ||
| live.go | ||
| live1.go | ||
| live2.go | ||
| live_regabi.go | ||
| live_uintptrkeepalive.go | ||
| loopbce.go | ||
| mainsig.go | ||
| makechan.go | ||
| makemap.go | ||
| makenew.go | ||
| makeslice.go | ||
| mallocfin.go | ||
| map.go | ||
| map1.go | ||
| mapclear.go | ||
| maplinear.go | ||
| maymorestack.go | ||
| mergemul.go | ||
| method.go | ||
| method1.go | ||
| method2.go | ||
| method3.go | ||
| method4.go | ||
| method5.go | ||
| method6.go | ||
| method7.go | ||
| named.go | ||
| named1.go | ||
| nil.go | ||
| nilcheck.go | ||
| nilptr.go | ||
| nilptr2.go | ||
| nilptr3.go | ||
| nilptr4.go | ||
| nilptr5.go | ||
| nilptr5_aix.go | ||
| nilptr5_wasm.go | ||
| nilptr_aix.go | ||
| noinit.go | ||
| nosplit.go | ||
| nowritebarrier.go | ||
| nul1.go | ||
| opt_branchlikely.go | ||
| parentype.go | ||
| peano.go | ||
| phiopt.go | ||
| print.go | ||
| print.out | ||
| printbig.go | ||
| printbig.out | ||
| prove.go | ||
| prove_constant_folding.go | ||
| range.go | ||
| recover.go | ||
| recover1.go | ||
| recover2.go | ||
| recover3.go | ||
| recover4.go | ||
| recover5.go | ||
| reflectmethod1.go | ||
| reflectmethod2.go | ||
| reflectmethod3.go | ||
| reflectmethod4.go | ||
| reflectmethod5.go | ||
| reflectmethod6.go | ||
| reflectmethod7.go | ||
| reflectmethod8.go | ||
| rename.go | ||
| rename1.go | ||
| reorder.go | ||
| reorder2.go | ||
| retjmp.go | ||
| return.go | ||
| rotate.go | ||
| rotate0.go | ||
| rotate1.go | ||
| rotate2.go | ||
| rotate3.go | ||
| rune.go | ||
| runtime.go | ||
| shift1.go | ||
| shift2.go | ||
| shift3.go | ||
| sieve.go | ||
| sigchld.go | ||
| sigchld.out | ||
| simassign.go | ||
| sizeof.go | ||
| slice3.go | ||
| slice3err.go | ||
| slicecap.go | ||
| sliceopt.go | ||
| solitaire.go | ||
| stack.go | ||
| stackobj.go | ||
| stackobj2.go | ||
| stackobj3.go | ||
| strcopy.go | ||
| strength.go | ||
| string_lit.go | ||
| stringrange.go | ||
| struct0.go | ||
| switch.go | ||
| switch2.go | ||
| switch3.go | ||
| switch4.go | ||
| switch5.go | ||
| switch6.go | ||
| switch7.go | ||
| tinyfin.go | ||
| torture.go | ||
| turing.go | ||
| typecheck.go | ||
| typecheckloop.go | ||
| typeswitch.go | ||
| typeswitch1.go | ||
| typeswitch2.go | ||
| typeswitch2b.go | ||
| typeswitch3.go | ||
| uintptrescapes.go | ||
| uintptrescapes2.go | ||
| uintptrescapes3.go | ||
| uintptrkeepalive.go | ||
| undef.go | ||
| unsafe_slice_data.go | ||
| unsafe_string.go | ||
| unsafe_string_data.go | ||
| unsafebuiltins.go | ||
| used.go | ||
| utf.go | ||
| varerr.go | ||
| varinit.go | ||
| winbatch.go | ||
| writebarrier.go | ||
| zerodivide.go | ||
| zerosize.go | ||
README.md
The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.
To run just these tests, execute:
../bin/go test internal/testdir
To run just tests from specified files in this directory, execute:
../bin/go test internal/testdir -run='Test/(file1.go|file2.go|...)'
Standard library tests should be written as regular Go tests in the appropriate package.
The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:
- it is most naturally expressed using the test runner; or
- it is also applicable to
gccgoand other Go tool chains.