aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2018-09-26 15:36:28 -0400
committerAustin Clements <austin@google.com>2018-10-09 16:44:45 +0000
commit1d09433ec072c2acff27335c2d05ce44bb501ecc (patch)
tree9942e7ab7e5084be822a7c38c5242965babf8263
parent3f86d7cc6762a5f6745cdcda4bd50031bfafc92f (diff)
downloadgo-1d09433ec072c2acff27335c2d05ce44bb501ecc.tar.xz
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 <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/runtime/mbitmap.go4
-rw-r--r--src/runtime/mgcmark.go3
2 files changed, 2 insertions, 5 deletions
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() {