mirror of
https://github.com/golang/go
synced 2024-11-17 15:04:45 -07:00
cmd/compile: use NOT pseudo-instruction for riscv64 Slicemask
Change-Id: Idefb6669d54929065f57e3bd767c91451dc3a375 Reviewed-on: https://go-review.googlesource.com/c/go/+/223562 Reviewed-by: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
2f54081adf
commit
0e44c692c2
@ -143,7 +143,7 @@
|
||||
// For positive x, bit 63 of x-1 is always 0, so the result is -1.
|
||||
// For zero x, bit 63 of x-1 is 1, so the result is 0.
|
||||
//
|
||||
(Slicemask <t> x) -> (XORI [-1] (SRAI <t> [63] (ADDI <t> [-1] x)))
|
||||
(Slicemask <t> x) -> (NOT (SRAI <t> [63] (ADDI <t> [-1] x)))
|
||||
|
||||
// Truncations
|
||||
// We ignore the unused high parts of registers, so truncates are just copies.
|
||||
|
@ -4309,12 +4309,11 @@ func rewriteValueRISCV64_OpSlicemask(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
// match: (Slicemask <t> x)
|
||||
// result: (XORI [-1] (SRAI <t> [63] (ADDI <t> [-1] x)))
|
||||
// result: (NOT (SRAI <t> [63] (ADDI <t> [-1] x)))
|
||||
for {
|
||||
t := v.Type
|
||||
x := v_0
|
||||
v.reset(OpRISCV64XORI)
|
||||
v.AuxInt = -1
|
||||
v.reset(OpRISCV64NOT)
|
||||
v0 := b.NewValue0(v.Pos, OpRISCV64SRAI, t)
|
||||
v0.AuxInt = 63
|
||||
v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, t)
|
||||
|
Loading…
Reference in New Issue
Block a user