aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2014-12-18 13:50:57 -0800
committerMinux Ma <minux@golang.org>2014-12-19 02:50:40 +0000
commit481ce36ec43dc699c6be18ec81dfce02ca24601c (patch)
tree02b55876815fe8830db39609f0b963278f750bb3
parent7a8e897979c7436f0baa0f7996542dc3c39023f4 (diff)
downloadgo-481ce36ec43dc699c6be18ec81dfce02ca24601c.tar.xz
runtime: simplify cpuprof hash calculation
"x*41" computes the same value as "x*31 + x*7 + x*3" and (when compiled by gc) requires just one multiply instruction instead of three. Alternatively, the expression could be written as "(x<<2+x)<<3 + x" to use shifts instead of multiplies (which is how GCC optimizes "x*41"). But gc currently emits suboptimal instructions for this expression anyway (e.g., separate SHL+ADD instructions rather than LEA on 386/amd64). Also, if such an optimization was worthwhile, it would seem better to implement it as part of gc's strength reduction logic. Change-Id: I7156b793229d723bbc9a52aa9ed6111291335277 Reviewed-on: https://go-review.googlesource.com/1830 Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/runtime/cpuprof.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/cpuprof.go b/src/runtime/cpuprof.go
index d56678e21f..a9bb1add85 100644
--- a/src/runtime/cpuprof.go
+++ b/src/runtime/cpuprof.go
@@ -203,7 +203,7 @@ func (p *cpuProfile) add(pc []uintptr) {
h := uintptr(0)
for _, x := range pc {
h = h<<8 | (h >> (8 * (unsafe.Sizeof(h) - 1)))
- h += x*31 + x*7 + x*3
+ h += x * 41
}
p.count++