diff options
author | Keith Randall <khr@golang.org> | 2020-04-11 22:15:58 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2020-04-30 17:19:57 +0000 |
commit | 882ec701d2bc5df807637418d726f644ed2e0ef6 (patch) | |
tree | 3cc6a88d461ea7a70b5e96dbf5c1b140f4cf3a19 /test/codegen/memops.go | |
parent | 553e003414d3aa90cc39830ee22f08453d9f3408 (diff) | |
download | go-git-882ec701d2bc5df807637418d726f644ed2e0ef6.tar.gz |
cmd/compile: add indexed load+op operations to amd64
name old time/op new time/op delta
LoadAdd-16 545ns ± 0% 456ns ± 0% -16.31% (p=0.000 n=10+10)
Update #36468
Change-Id: I84f390d55490648fa1f58cdbc24fd74c4f1bc8c1
Reviewed-on: https://go-review.googlesource.com/c/go/+/227960
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Diffstat (limited to 'test/codegen/memops.go')
-rw-r--r-- | test/codegen/memops.go | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/test/codegen/memops.go b/test/codegen/memops.go index dbe4263d8d..701735f875 100644 --- a/test/codegen/memops.go +++ b/test/codegen/memops.go @@ -205,23 +205,43 @@ func idxFloat64(x, y []float64, i int) { y[16*i+1] = t } -func idxLoadPlusOp(x []int32, i int) int32 { +func idxLoadPlusOp32(x []int32, i int) int32 { s := x[0] // 386: `ADDL\t4\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` + // amd64: `ADDL\t4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*` s += x[i+1] // 386: `SUBL\t8\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` + // amd64: `SUBL\t8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*` s -= x[i+2] // 386: `IMULL\t12\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` s *= x[i+3] // 386: `ANDL\t16\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` + // amd64: `ANDL\t16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*` s &= x[i+4] // 386: `ORL\t20\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` + // amd64: `ORL\t20\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*` s |= x[i+5] // 386: `XORL\t24\([A-Z]+\)\([A-Z]+\*4\), [A-Z]+` + // amd64: `XORL\t24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*` s ^= x[i+6] return s } +func idxLoadPlusOp64(x []int64, i int) int64 { + s := x[0] + // amd64: `ADDQ\t8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*` + s += x[i+1] + // amd64: `SUBQ\t16\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*` + s -= x[i+2] + // amd64: `ANDQ\t24\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*` + s &= x[i+3] + // amd64: `ORQ\t32\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*` + s |= x[i+4] + // amd64: `XORQ\t40\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*` + s ^= x[i+5] + return s +} + func idxStorePlusOp(x []int32, i int, v int32) { // 386: `ADDL\t[A-Z]+, 4\([A-Z]+\)\([A-Z]+\*4\)` x[i+1] += v |