1
0
mirror of https://github.com/golang/go synced 2024-11-08 18:46:16 -07:00
go/src/cmd
isharipo 8c67f210a1 cmd/internal/obj: change Prog.From3 to RestArgs ([]Addr)
This change makes it easier to express instructions
with arbitrary number of operands.

Rationale: previous approach with operand "hiding" does
not scale well, AVX and especially AVX512 have many
instructions with 3+ operands.

x86 asm backend is updated to handle up to 6 explicit operands.
It also fixes issue with 4-th immediate operand type checks.
All `ytab` tables are updated accordingly.

Changes to non-x86 backends only include these patterns:
`p.From3 = X` => `p.SetFrom3(X)`
`p.From3.X = Y` => `p.GetFrom3().X = Y`

Over time, other backends can adapt Prog.RestArgs
and reduce the amount of workarounds.

-- Performance --

x/benchmark/build:

$ benchstat upstream.bench patched.bench
name      old time/op                 new time/op                 delta
Build-48                  21.7s ± 2%                  21.8s ± 2%   ~     (p=0.218 n=10+10)

name      old binary-size             new binary-size             delta
Build-48                  10.3M ± 0%                  10.3M ± 0%   ~     (all equal)

name      old build-time/op           new build-time/op           delta
Build-48                  21.7s ± 2%                  21.8s ± 2%   ~     (p=0.218 n=10+10)

name      old build-peak-RSS-bytes    new build-peak-RSS-bytes    delta
Build-48                  145MB ± 5%                  148MB ± 5%   ~     (p=0.218 n=10+10)

name      old build-user+sys-time/op  new build-user+sys-time/op  delta
Build-48                  21.0s ± 2%                  21.2s ± 2%   ~     (p=0.075 n=10+10)

Microbenchmark shows a slight slowdown.

name        old time/op  new time/op  delta
AMD64asm-4  49.5ms ± 1%  49.9ms ± 1%  +0.67%  (p=0.001 n=23+15)

func BenchmarkAMD64asm(b *testing.B) {
  for i := 0; i < b.N; i++ {
    TestAMD64EndToEnd(nil)
    TestAMD64Encoder(nil)
  }
}

Change-Id: I4f1d37b5c2c966da3f2127705ccac9bff0038183
Reviewed-on: https://go-review.googlesource.com/63490
Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2017-09-15 21:05:03 +00:00
..
addr2line
api
asm cmd/internal/obj: change Prog.From3 to RestArgs ([]Addr) 2017-09-15 21:05:03 +00:00
cgo all: fix article typos 2017-09-15 02:39:16 +00:00
compile cmd/internal/obj: change Prog.From3 to RestArgs ([]Addr) 2017-09-15 21:05:03 +00:00
cover
dist misc/cgo/errors: port test.bash to Go 2017-09-13 17:45:52 +00:00
doc cmd/doc: search for packages in the two-arg case 2017-08-28 22:15:58 +00:00
fix cmd/fix: rewrite x/net/context by default 2017-08-31 19:04:54 +00:00
go cmd/go: correctly report that -msan needs CGO_ENABLED=1 2017-09-15 00:11:18 +00:00
gofmt
internal cmd/internal/obj: change Prog.From3 to RestArgs ([]Addr) 2017-09-15 21:05:03 +00:00
link cmd/link: replace unrolled Cput loops with Cwrite/Cwritestring 2017-09-15 19:09:39 +00:00
nm
objdump cmd/internal/objfile: add arm64 disassembler support 2017-08-28 14:09:35 +00:00
pack cmd/pack: fix export data truncation bug 2017-09-09 14:13:33 +00:00
pprof
trace runtime,cmd/trace: trace GC STW events 2017-08-29 21:54:55 +00:00
vendor cmd/vendor/golang.org/x/arch: pull latest updates from x repo (commit edaf650) 2017-08-25 14:13:13 +00:00
vet cmd/vet: fix go vet on parentheses of assembly function flag 2017-09-13 03:18:07 +00:00