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>