aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
diff options
context:
space:
mode:
authorphilhofer <phofer@umich.edu>2017-08-09 05:01:26 +0000
committerCherry Zhang <cherryyz@google.com>2017-08-15 13:39:11 +0000
commitc59b495963851d971036eb88a77b5c81db3a0982 (patch)
tree3b221c733713a53d75e5358a0c34b11ccc215712 /src/cmd/compile/internal/ssa/gen/ARM64Ops.go
parent583a941d4ed7cb8e03bbeceaf05969c285c30b2e (diff)
downloadgo-c59b495963851d971036eb88a77b5c81db3a0982.tar.gz
go-c59b495963851d971036eb88a77b5c81db3a0982.zip
cmd/compile: add support for arm64 bit-test instructions
Add support for generating TBZ/TBNZ instructions. The bit-test-and-branch pattern shows up in a number of important places, including the runtime (gc bitmaps). Before this change, there were 3 TB[N]?Z instructions in the Go tool, all of which were in hand-written assembly. After this change, there are 285. Also, the go1 benchmark binary gets about 4.5kB smaller. Fixes #21361 Change-Id: I170c138b852754b9b8df149966ca5e62e6dfa771 Reviewed-on: https://go-review.googlesource.com/54470 Run-TryBot: Philip Hofer <phofer@umich.edu> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/gen/ARM64Ops.go')
-rw-r--r--src/cmd/compile/internal/ssa/gen/ARM64Ops.go10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
index 832bea227c..3b3d494c54 100644
--- a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
+++ b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
@@ -512,10 +512,12 @@ func init() {
{name: "ULE"},
{name: "UGT"},
{name: "UGE"},
- {name: "Z"}, // Control == 0 (take a register instead of flags)
- {name: "NZ"}, // Control != 0
- {name: "ZW"}, // Control == 0, 32-bit
- {name: "NZW"}, // Control != 0, 32-bit
+ {name: "Z"}, // Control == 0 (take a register instead of flags)
+ {name: "NZ"}, // Control != 0
+ {name: "ZW"}, // Control == 0, 32-bit
+ {name: "NZW"}, // Control != 0, 32-bit
+ {name: "TBZ"}, // Control & (1 << Aux.(int64)) == 0
+ {name: "TBNZ"}, // Control & (1 << Aux.(int64)) != 0
}
archs = append(archs, arch{