mirror of
https://github.com/golang/go.git
synced 2026-01-29 15:12:08 +03:00
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>
This commit is contained in:
committed by
Gopher Robot
parent
6d4a91c7a5
commit
75a19dbcd7
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user