mirror of
https://github.com/golang/go
synced 2024-11-23 16:30:06 -07:00
cmd/compile: use SEQZ pseudo instruction in RISCV64 boolean rules
This makes the intent clearer, allows for another ellipsis and will aid in future rewriting. While here, document boolean loads to explain register contents. Change-Id: I933db2813826d88819366191fbbea8fcee5e4dda Reviewed-on: https://go-review.googlesource.com/c/go/+/230120 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
be08e10b3b
commit
9439a7d87f
@ -414,9 +414,9 @@
|
||||
// Boolean ops; 0=false, 1=true
|
||||
(AndB ...) => (AND ...)
|
||||
(OrB ...) => (OR ...)
|
||||
(EqB x y) => (XORI [1] (XOR <typ.Bool> x y))
|
||||
(EqB x y) => (SEQZ (XOR <typ.Bool> x y))
|
||||
(NeqB ...) => (XOR ...)
|
||||
(Not x) => (XORI [1] x)
|
||||
(Not ...) => (SEQZ ...)
|
||||
|
||||
// Lowering pointer arithmetic
|
||||
// TODO: Special handling for SP offsets, like ARM
|
||||
|
@ -10,6 +10,9 @@ import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Notes:
|
||||
// - Boolean types occupy the entire register. 0=false, 1=true.
|
||||
|
||||
// Suffixes encode the bit width of various instructions:
|
||||
//
|
||||
// D (double word) = 64 bit int
|
||||
|
@ -391,7 +391,8 @@ func rewriteValueRISCV64(v *Value) bool {
|
||||
v.Op = OpRISCV64LoweredNilCheck
|
||||
return true
|
||||
case OpNot:
|
||||
return rewriteValueRISCV64_OpNot(v)
|
||||
v.Op = OpRISCV64SEQZ
|
||||
return true
|
||||
case OpOffPtr:
|
||||
return rewriteValueRISCV64_OpOffPtr(v)
|
||||
case OpOr16:
|
||||
@ -913,12 +914,11 @@ func rewriteValueRISCV64_OpEqB(v *Value) bool {
|
||||
b := v.Block
|
||||
typ := &b.Func.Config.Types
|
||||
// match: (EqB x y)
|
||||
// result: (XORI [1] (XOR <typ.Bool> x y))
|
||||
// result: (SEQZ (XOR <typ.Bool> x y))
|
||||
for {
|
||||
x := v_0
|
||||
y := v_1
|
||||
v.reset(OpRISCV64XORI)
|
||||
v.AuxInt = int64ToAuxInt(1)
|
||||
v.reset(OpRISCV64SEQZ)
|
||||
v0 := b.NewValue0(v.Pos, OpRISCV64XOR, typ.Bool)
|
||||
v0.AddArg2(x, y)
|
||||
v.AddArg(v0)
|
||||
@ -2132,18 +2132,6 @@ func rewriteValueRISCV64_OpNeqPtr(v *Value) bool {
|
||||
return true
|
||||
}
|
||||
}
|
||||
func rewriteValueRISCV64_OpNot(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
// match: (Not x)
|
||||
// result: (XORI [1] x)
|
||||
for {
|
||||
x := v_0
|
||||
v.reset(OpRISCV64XORI)
|
||||
v.AuxInt = int64ToAuxInt(1)
|
||||
v.AddArg(x)
|
||||
return true
|
||||
}
|
||||
}
|
||||
func rewriteValueRISCV64_OpOffPtr(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
|
Loading…
Reference in New Issue
Block a user