]> Cypherpunks repositories - gostls13.git/commit
runtime: iterate over set bits in adjustpointers
authorJosh Bleecher Snyder <josharian@gmail.com>
Sun, 1 Apr 2018 18:01:36 +0000 (11:01 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sun, 29 Apr 2018 05:24:44 +0000 (05:24 +0000)
commit5af0b28a7308ed40af8e315b2a50ac6401bb24c9
tree1f2b11fd6f56663636d16a96cf0692f54641d9a7
parent13cd0061390af0621516ec22b1a3987712b4da3b
runtime: iterate over set bits in adjustpointers

There are several things combined in this change.

First, eliminate the gobitvector type in favor
of adding a ptrbit method to bitvector.
In non-performance-critical code, use that method.
In performance critical code, though, load the bitvector data
one byte at a time and iterate only over set bits.
To support that, add and use sys.Ctz8.

name                old time/op  new time/op  delta
StackCopyPtr-8      81.8ms ± 5%  78.9ms ± 3%   -3.58%  (p=0.000 n=97+96)
StackCopy-8         65.9ms ± 3%  62.8ms ± 3%   -4.67%  (p=0.000 n=96+92)
StackCopyNoCache-8   105ms ± 3%   102ms ± 3%   -3.38%  (p=0.000 n=96+95)

Change-Id: I00b80f45612708bd440b1a411a57fa6dfa24aa74
Reviewed-on: https://go-review.googlesource.com/109716
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/gc/ssa.go
src/runtime/heapdump.go
src/runtime/internal/sys/intrinsics.go
src/runtime/internal/sys/intrinsics_386.s
src/runtime/internal/sys/intrinsics_stubs.go
src/runtime/mbitmap.go
src/runtime/stack.go