cmd/compile: add MOVOstoreconst with offset folding on amd64
Replace MOVOstorezero with new MOVOstoreconst.
MOVOstoreconst has similar address folding rules then
other MOVstoreconst operations but only supports zero
as store value. Currently only MOVO stores with zero
values are generated. Using MOVOstoreconst with
SymValAndOff aux has the advantage that we can just
add one more MOVstoreconst variant to the existing rules.
The main effect of this CL is converting 16 byte zeroing
of a value on the stack from LEAQ+MOVUPS to just MOVUPS
which reduces binary size.
old:
LEAQ 0x20(SP), DX
MOVUPS X15, 0(DX)
new:
MOVUPS X15, 0x20(SP)
file before after Δ %
addr2line
3661568 3657472 -4096 -0.112%
asm
4566432 4562336 -4096 -0.090%
cgo
4305456 4301360 -4096 -0.095%
compile
22878528 22874512 -4016 -0.018%
cover
4517952 4513856 -4096 -0.091%
link
6287248 6283152 -4096 -0.065%
nm
3640768 3636672 -4096 -0.113%
objdump
4010592 4006496 -4096 -0.102%
pack
2188224 2184128 -4096 -0.187%
pprof
13429504 13421312 -8192 -0.061%
trace
10143968 10135776 -8192 -0.081%
vet
6868864 6864768 -4096 -0.060%
Change-Id: I08f5dd5ab9251448a4572d3ddd1e0c8cd417f5e3
Reviewed-on: https://go-review.googlesource.com/c/go/+/346249
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Trust: Martin Möhrmann <martin@golang.org>