From e9eaa181fcadc2162baa62ccd8bfeb610acfdd55 Mon Sep 17 00:00:00 2001 From: Rick Hudson Date: Fri, 29 Apr 2016 12:09:36 -0400 Subject: [PATCH] [dev.garbage] runtime: simplify nextFreeFast so it is inlined 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 Run-TryBot: Austin Clements --- src/runtime/malloc.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 438cd06161..c9cc82192d 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -495,14 +495,11 @@ func nextFreeFast(s *mspan) gclinkptr { 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++ -- 2.48.1