mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
583a941d4e
commit
c59b495963
15 changed files with 743 additions and 50 deletions
|
|
@ -305,6 +305,10 @@ func ntz(x int64) int64 {
|
|||
return 64 - nlz(^x&(x-1))
|
||||
}
|
||||
|
||||
func oneBit(x int64) bool {
|
||||
return nlz(x)+ntz(x) == 63
|
||||
}
|
||||
|
||||
// nlo returns the number of leading ones.
|
||||
func nlo(x int64) int64 {
|
||||
return nlz(^x)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue