mirror of
https://github.com/golang/go.git
synced 2025-11-02 01:30:55 +00:00
cmd/compile/internal, cmd/internal/obj/ppc64: generate new count trailing zeros instructions on POWER9
This change adds new POWER9 instructions for counting trailing zeros (CNTTZW/CNTTZD) to the assembler and generates them in SSA when GOPPC64=power9. name old time/op new time/op delta TrailingZeros-160 1.59ns ±20% 1.45ns ±10% -8.81% (p=0.000 n=14+13) TrailingZeros8-160 1.55ns ±23% 1.62ns ±44% ~ (p=0.593 n=13+15) TrailingZeros16-160 1.78ns ±23% 1.62ns ±38% -9.31% (p=0.003 n=14+14) TrailingZeros32-160 1.64ns ±10% 1.49ns ± 9% -9.15% (p=0.000 n=13+14) TrailingZeros64-160 1.53ns ± 6% 1.45ns ± 5% -5.38% (p=0.000 n=15+13) Change-Id: I365e6ff79f3ce4d8ebe089a6a86b1771853eb596 Reviewed-on: https://go-review.googlesource.com/c/go/+/167517 Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
This commit is contained in:
parent
23b476a3c8
commit
3023d7da49
9 changed files with 109 additions and 19 deletions
|
|
@ -261,8 +261,10 @@ func TrailingZeros(n uint) int {
|
|||
// arm:"CLZ"
|
||||
// arm64:"RBIT","CLZ"
|
||||
// s390x:"FLOGR"
|
||||
// ppc64:"ANDN","POPCNTD"
|
||||
// ppc64le:"ANDN","POPCNTD"
|
||||
// ppc64/power8:"ANDN","POPCNTD"
|
||||
// ppc64le/power8:"ANDN","POPCNTD"
|
||||
// ppc64/power9: "CNTTZD"
|
||||
// ppc64le/power9: "CNTTZD"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros(n)
|
||||
}
|
||||
|
|
@ -271,8 +273,10 @@ func TrailingZeros64(n uint64) int {
|
|||
// amd64:"BSFQ","MOVL\t\\$64","CMOVQEQ"
|
||||
// arm64:"RBIT","CLZ"
|
||||
// s390x:"FLOGR"
|
||||
// ppc64:"ANDN","POPCNTD"
|
||||
// ppc64le:"ANDN","POPCNTD"
|
||||
// ppc64/power8:"ANDN","POPCNTD"
|
||||
// ppc64le/power8:"ANDN","POPCNTD"
|
||||
// ppc64/power9: "CNTTZD"
|
||||
// ppc64le/power9: "CNTTZD"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros64(n)
|
||||
}
|
||||
|
|
@ -282,8 +286,10 @@ func TrailingZeros32(n uint32) int {
|
|||
// arm:"CLZ"
|
||||
// arm64:"RBITW","CLZW"
|
||||
// s390x:"FLOGR","MOVWZ"
|
||||
// ppc64:"ANDN","POPCNTW"
|
||||
// ppc64le:"ANDN","POPCNTW"
|
||||
// ppc64/power8:"ANDN","POPCNTW"
|
||||
// ppc64le/power8:"ANDN","POPCNTW"
|
||||
// ppc64/power9: "CNTTZW"
|
||||
// ppc64le/power9: "CNTTZW"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros32(n)
|
||||
}
|
||||
|
|
@ -293,8 +299,10 @@ func TrailingZeros16(n uint16) int {
|
|||
// arm:"ORR\t\\$65536","CLZ",-"MOVHU\tR"
|
||||
// arm64:"ORR\t\\$65536","RBITW","CLZW",-"MOVHU\tR",-"RBIT\t",-"CLZ\t"
|
||||
// s390x:"FLOGR","OR\t\\$65536"
|
||||
// ppc64:"POPCNTD","OR\\t\\$65536"
|
||||
// ppc64le:"POPCNTD","OR\\t\\$65536"
|
||||
// ppc64/power8:"POPCNTD","OR\\t\\$65536"
|
||||
// ppc64le/power8:"POPCNTD","OR\\t\\$65536"
|
||||
// ppc64/power9:"CNTTZD","OR\\t\\$65536"
|
||||
// ppc64le/power9:"CNTTZD","OR\\t\\$65536"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros16(n)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue