]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.garbage] runtime: simplify nextFreeFast so it is inlined
authorRick Hudson <rlh@golang.org>
Fri, 29 Apr 2016 16:09:36 +0000 (12:09 -0400)
committerRick Hudson <rlh@golang.org>
Fri, 29 Apr 2016 16:47:11 +0000 (16:47 +0000)
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>

src/runtime/malloc.go

index 438cd0616172121489de0b23fb241876e654e6cb..c9cc82192dfef9987383c493966cfab7722498d0 100644 (file)
@@ -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++