1
0
mirror of https://github.com/golang/go synced 2024-11-17 17:04:47 -07:00

runtime: use divRoundUp

There are a handful of places where the runtime wants to round up the
result of a division. We just introduced a helper to do this. This CL
replaces all of the hand-coded round-ups (that I could find) with this
helper.

Change-Id: I465d152157ff0f3cad40c0aa57491e4f2de510ad
Reviewed-on: https://go-review.googlesource.com/c/go/+/224385
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
Austin Clements 2020-03-20 11:37:54 -04:00
parent ab5a40c5e3
commit d965bb6130
4 changed files with 6 additions and 6 deletions

View File

@ -1035,9 +1035,9 @@ func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
} else { } else {
var sizeclass uint8 var sizeclass uint8
if size <= smallSizeMax-8 { if size <= smallSizeMax-8 {
sizeclass = size_to_class8[(size+smallSizeDiv-1)/smallSizeDiv] sizeclass = size_to_class8[divRoundUp(size, smallSizeDiv)]
} else { } else {
sizeclass = size_to_class128[(size-smallSizeMax+largeSizeDiv-1)/largeSizeDiv] sizeclass = size_to_class128[divRoundUp(size-smallSizeMax, largeSizeDiv)]
} }
size = uintptr(class_to_size[sizeclass]) size = uintptr(class_to_size[sizeclass])
spc := makeSpanClass(sizeclass, noscan) spc := makeSpanClass(sizeclass, noscan)

View File

@ -54,7 +54,7 @@ func gcMarkRootPrepare() {
// Compute how many data and BSS root blocks there are. // Compute how many data and BSS root blocks there are.
nBlocks := func(bytes uintptr) int { nBlocks := func(bytes uintptr) int {
return int((bytes + rootBlockBytes - 1) / rootBlockBytes) return int(divRoundUp(bytes, rootBlockBytes))
} }
work.nDataRoots = 0 work.nDataRoots = 0

View File

@ -144,7 +144,7 @@ func (b *gcSweepBuf) pop() *mspan {
// intervening pops. Spans that are pushed after the call may also // intervening pops. Spans that are pushed after the call may also
// appear in these blocks. // appear in these blocks.
func (b *gcSweepBuf) numBlocks() int { func (b *gcSweepBuf) numBlocks() int {
return int((atomic.Load(&b.index) + gcSweepBlockEntries - 1) / gcSweepBlockEntries) return int(divRoundUp(uintptr(atomic.Load(&b.index)), gcSweepBlockEntries))
} }
// block returns the spans in the i'th block of buffer b. block is // block returns the spans in the i'th block of buffer b. block is

View File

@ -13,9 +13,9 @@ package runtime
func roundupsize(size uintptr) uintptr { func roundupsize(size uintptr) uintptr {
if size < _MaxSmallSize { if size < _MaxSmallSize {
if size <= smallSizeMax-8 { if size <= smallSizeMax-8 {
return uintptr(class_to_size[size_to_class8[(size+smallSizeDiv-1)/smallSizeDiv]]) return uintptr(class_to_size[size_to_class8[divRoundUp(size, smallSizeDiv)]])
} else { } else {
return uintptr(class_to_size[size_to_class128[(size-smallSizeMax+largeSizeDiv-1)/largeSizeDiv]]) return uintptr(class_to_size[size_to_class128[divRoundUp(size-smallSizeMax, largeSizeDiv)]])
} }
} }
if size+_PageSize < size { if size+_PageSize < size {