• Emmanuel T Odeke's avatar
    runtime: convert initial timediv quotient increments to bitsets · 178a609f
    Emmanuel T Odeke authored
    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: 's avatarKeith Randall <khr@golang.org>
    178a609f
runtime1.go 11.1 KB