aboutsummaryrefslogtreecommitdiff
path: root/src/math/bits/make_examples.go
diff options
context:
space:
mode:
authorAliaksandr Valialkin <valyala@gmail.com>2017-09-23 00:34:37 +0300
committerKeith Randall <khr@golang.org>2017-10-06 15:15:39 +0000
commit0011cfbe2b57b385bac25a3daf9de581ee263661 (patch)
treefb111b1b477edac94e8e05620379916702f8a662 /src/math/bits/make_examples.go
parent2e8545531e759a47bbb2c1f9fefa54bafbcf02e5 (diff)
downloadgo-0011cfbe2b57b385bac25a3daf9de581ee263661.tar.xz
cmd/compile: optimize signed non-negative div/mod by a power of 2
This CL optimizes assembly for len() or cap() division by a power of 2 constants: func lenDiv(s []int) int { return len(s) / 16 } amd64 assembly before the CL: MOVQ "".s+16(SP), AX MOVQ AX, CX SARQ $63, AX SHRQ $60, AX ADDQ CX, AX SARQ $4, AX MOVQ AX, "".~r1+32(SP) RET amd64 assembly after the CL: MOVQ "".s+16(SP), AX SHRQ $4, AX MOVQ AX, "".~r1+32(SP) RET The CL relies on the fact that len() and cap() result cannot be negative. Trigger stats for the added SSA rules on linux/amd64 when running make.bash: 46 Div64 12 Mod64 The added SSA rules may trigger on more cases in the future when SSA values will be populated with the info on their lower bounds. For instance: func f(i int16) int16 { if i < 3 { return -1 } // Lower bound of i is 3 here -> i is non-negative, // so unsigned arithmetics may be used here. return i % 16 } Change-Id: I8bc6be5a03e71157ced533c01416451ff6f1a7f0 Reviewed-on: https://go-review.googlesource.com/65530 Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/math/bits/make_examples.go')
0 files changed, 0 insertions, 0 deletions