nextFreeFast is currently not inlined by the compiler due
to its size and complexity. This CL simplifies
nextFreeFast by letting the slow path handle (nextFree)
handle a corner cases.
Change-Id: Ia9c5d1a7912bcb4bec072f5fd240f0e0bafb20e4
Reviewed-on: https://go-review.googlesource.com/22598
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
if theBit < 64 {
result := s.freeindex + uintptr(theBit)
if result < s.nelems {
- s.allocCache >>= (theBit + 1)
freeidx := result + 1
if freeidx%64 == 0 && freeidx != s.nelems {
- // We just incremented s.freeindex so it isn't 0
- // so we are moving to the next aCache.
- whichByte := freeidx / 8
- s.refillAllocCache(whichByte)
+ return 0
}
+ s.allocCache >>= (theBit + 1)
s.freeindex = freeidx
v := gclinkptr(result*s.elemsize + s.base())
s.allocCount++