mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
internal/runtime/maps: speed up Clear
We don't need to know the actual full slots, just whether there are any or not. The test for any full slots is simpler on amd64. We don't have to use PMOVMSKB and do the intreg->floatreg transfer. Fixes #75097 Change-Id: Iace1c100618d7fc2ac5ddd5fe9e8fe5c9595243f Reviewed-on: https://go-review.googlesource.com/c/go/+/697875 Reviewed-by: Youlin Feng <fengyoulin@live.com> Auto-Submit: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
parent
fe5420b054
commit
8098b99547
2 changed files with 7 additions and 1 deletions
|
|
@ -215,6 +215,12 @@ func (g ctrlGroup) matchFull() bitset {
|
||||||
return ctrlGroupMatchFull(g)
|
return ctrlGroupMatchFull(g)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// anyFull reports whether any slots in the group are full.
|
||||||
|
func (g ctrlGroup) anyFull() bool {
|
||||||
|
// A slot is full iff bit 7 is unset. Test whether any slot has bit 7 unset.
|
||||||
|
return (^g)&bitsetMSB != 0
|
||||||
|
}
|
||||||
|
|
||||||
// Portable implementation of matchFull.
|
// Portable implementation of matchFull.
|
||||||
//
|
//
|
||||||
// Note: On AMD64, this is an intrinsic implemented with SIMD instructions. See
|
// Note: On AMD64, this is an intrinsic implemented with SIMD instructions. See
|
||||||
|
|
|
||||||
|
|
@ -606,7 +606,7 @@ func (t *table) Clear(typ *abi.MapType) {
|
||||||
}
|
}
|
||||||
for i := uint64(0); i <= t.groups.lengthMask; i++ {
|
for i := uint64(0); i <= t.groups.lengthMask; i++ {
|
||||||
g := t.groups.group(typ, i)
|
g := t.groups.group(typ, i)
|
||||||
if g.ctrls().matchFull() != 0 {
|
if g.ctrls().anyFull() {
|
||||||
typedmemclr(typ.Group, g.data)
|
typedmemclr(typ.Group, g.data)
|
||||||
}
|
}
|
||||||
g.ctrls().setEmpty()
|
g.ctrls().setEmpty()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue