mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: use generated loops instead of DUFFCOPY on amd64
goarch: amd64
cpu: 12th Gen Intel(R) Core(TM) i7-12700
│ base │ exp │
│ sec/op │ sec/op vs base │
MemmoveKnownSize112-20 1.764n ± 0% 1.247n ± 0% -29.31% (p=0.000 n=10)
MemmoveKnownSize128-20 1.891n ± 0% 1.405n ± 1% -25.72% (p=0.000 n=10)
MemmoveKnownSize192-20 2.521n ± 0% 2.114n ± 3% -16.16% (p=0.000 n=10)
MemmoveKnownSize248-20 4.028n ± 0% 3.877n ± 1% -3.75% (p=0.000 n=10)
MemmoveKnownSize256-20 3.272n ± 0% 2.961n ± 2% -9.53% (p=0.000 n=10)
MemmoveKnownSize512-20 6.733n ± 3% 5.936n ± 4% -11.83% (p=0.000 n=10)
MemmoveKnownSize1024-20 13.905n ± 5% 9.798n ± 9% -29.54% (p=0.000 n=10)
Change-Id: Icc01cec0d8b072300d749a5ce76f53b3725b5c65
Reviewed-on: https://go-review.googlesource.com/c/go/+/678620
Reviewed-by: Jorropo <jorropo.pgm@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Jakub Ciolek <jakub@ciolek.dev>
This commit is contained in:
parent
d0a64f7969
commit
ec9e1176c3
8 changed files with 258 additions and 226 deletions
|
|
@ -561,7 +561,14 @@ func (s *regAllocState) allocValToReg(v *Value, mask regMask, nospill bool, pos
|
|||
pos = pos.WithNotStmt()
|
||||
// Check if v is already in a requested register.
|
||||
if mask&vi.regs != 0 {
|
||||
r := pickReg(mask & vi.regs)
|
||||
mask &= vi.regs
|
||||
r := pickReg(mask)
|
||||
if mask.contains(s.SPReg) {
|
||||
// Prefer the stack pointer if it is allowed.
|
||||
// (Needed because the op might have an Aux symbol
|
||||
// that needs SP as its base.)
|
||||
r = s.SPReg
|
||||
}
|
||||
if !s.allocatable.contains(r) {
|
||||
return v // v is in a fixed register
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue