]> Cypherpunks repositories - gostls13.git/commit
runtime: convert initial timediv quotient increments to bitsets
authorEmmanuel T Odeke <emmanuel@orijtech.com>
Mon, 10 Sep 2018 07:05:09 +0000 (01:05 -0600)
committerEmmanuel Odeke <emm.odeke@gmail.com>
Wed, 12 Sep 2018 17:24:59 +0000 (17:24 +0000)
commit178a609fed5fba5abaeead485f7b2795b8c4ea3c
tree13193c044aa8d0389611582cb1a4fe3f6276bcdc
parenta0fad982b17b8c49c8567867160dee9f021cf1ba
runtime: convert initial timediv quotient increments to bitsets

At the very beginning of timediv, inside a for loop,
we reduce the base value by at most (1<<31)-1, while
incrementing the quotient result by 1<<uint(bit).
However, since the quotient value was 0 to begin with,
we are essentially just doing bitsets.

This change is in the hot path of various concurrency and
scheduling operations that require sleeping, waiting
on mutexes and futexes etc. On the following OSes:
* Dragonfly
* FreeBSD
* Linux
* NetBSD
* OpenBSD
* Plan9
* Windows

and paired with architectures that provide the BTS instruction, this
change shaves off a couple of nanoseconds per invocation of timediv.

Fixes #27529

Change-Id: Ia2fea5022c1109e02d86d1f962a3b0bd70967aa6
Reviewed-on: https://go-review.googlesource.com/134231
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/runtime1.go