aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2025-07-14 19:33:13 +0000
committerGopher Robot <gobot@golang.org>2025-07-15 12:24:37 -0700
commit75a19dbcd7e69dc619fd57b9ed32f697121160ba (patch)
treeb93428a7a5aa396b03d18c9ea5af46bef9b5c749
parent6d4a91c7a5b5723aa1fc1461eb3e9602ccf9606a (diff)
downloadgo-75a19dbcd7e69dc619fd57b9ed32f697121160ba.tar.xz
runtime: use memclrNoHeapPointers to clear inline mark bits
Clearing the inline mark bits with memclrNoHeapPointers is slightly better than having the compiler insert, e.g. duffzero, since it can take advantage of wider SIMD instructions. duffzero is likely going away, but we know things the compiler doesn't, such as the fact that this memory is nicely aligned. In this particular case, memclrNoHeapPointers does a better job. For #73581. Change-Id: I3918096929acfe6efe6f469fb089ebe04b4acff5 Reviewed-on: https://go-review.googlesource.com/c/go/+/687938 Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com>
-rw-r--r--src/runtime/mgcmark_greenteagc.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/runtime/mgcmark_greenteagc.go b/src/runtime/mgcmark_greenteagc.go
index 6af711108f..a2f28e95d2 100644
--- a/src/runtime/mgcmark_greenteagc.go
+++ b/src/runtime/mgcmark_greenteagc.go
@@ -132,7 +132,11 @@ func (imb *spanInlineMarkBits) init(class spanClass, needzero bool) {
throw("runtime: span inline mark bits nil?")
}
if needzero {
- *imb = spanInlineMarkBits{}
+ // Use memclrNoHeapPointers to avoid having the compiler make a worse
+ // decision. We know that imb is both aligned and a nice power-of-two
+ // size that works well for wider SIMD instructions. The compiler likely
+ // has no idea that imb is aligned to 128 bytes.
+ memclrNoHeapPointers(unsafe.Pointer(imb), unsafe.Sizeof(spanInlineMarkBits{}))
}
imb.class = class
}