From: Austin Clements Date: Wed, 26 Sep 2018 19:36:28 +0000 (-0400) Subject: runtime: undo manual inlining of mbits.setMarked X-Git-Tag: go1.12beta1~847 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1d09433ec072c2acff27335c2d05ce44bb501ecc;p=gostls13.git runtime: undo manual inlining of mbits.setMarked Since atomic.Or8 is now an intrinsic (and has been for some time), markBits.setMarked is inlinable. Undo the manual inlining of it. Change-Id: I8e37ccf0851ad1d3088d9c8ae0f6f0c439d7eb2d Reviewed-on: https://go-review.googlesource.com/c/138659 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index 87fa027b4e..4854c0e632 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -283,9 +283,7 @@ func (m markBits) isMarked() bool { return *m.bytep&m.mask != 0 } -// setMarked sets the marked bit in the markbits, atomically. Some compilers -// are not able to inline atomic.Or8 function so if it appears as a hot spot consider -// inlining it manually. +// setMarked sets the marked bit in the markbits, atomically. func (m markBits) setMarked() { // Might be racing with other updates, so use atomic update always. // We used to be clever here and use a non-atomic update in certain diff --git a/src/runtime/mgcmark.go b/src/runtime/mgcmark.go index d4dcfb6cb9..14f09700ee 100644 --- a/src/runtime/mgcmark.go +++ b/src/runtime/mgcmark.go @@ -1228,8 +1228,7 @@ func greyobject(obj, base, off uintptr, span *mspan, gcw *gcWork, objIndex uintp if mbits.isMarked() { return } - // mbits.setMarked() // Avoid extra call overhead with manual inlining. - atomic.Or8(mbits.bytep, mbits.mask) + mbits.setMarked() // If this is a noscan object, fast-track it to black // instead of greying it. if span.spanclass.noscan() {