From: Keith Randall Date: Thu, 24 Apr 2025 18:10:05 +0000 (-0700) Subject: runtime: improve scan inner loop X-Git-Tag: go1.25rc1~268 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b30fa1bcc411f3a65a6e8f40ff3acdb1526ce0d0;p=gostls13.git runtime: improve scan inner loop On every arch except amd64, it is faster to do x&(x-1) than x^(1< Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index 7d528b94b4..f9a4c4ce3d 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -219,8 +219,13 @@ func (tp typePointers) nextFast() (typePointers, uintptr) { } else { i = sys.TrailingZeros32(uint32(tp.mask)) } - // BTCQ - tp.mask ^= uintptr(1) << (i & (ptrBits - 1)) + if GOARCH == "amd64" { + // BTCQ + tp.mask ^= uintptr(1) << (i & (ptrBits - 1)) + } else { + // SUB, AND + tp.mask &= tp.mask - 1 + } // LEAQ (XX)(XX*8) return tp, tp.addr + uintptr(i)*goarch.PtrSize }