(Mul64 ...) => (MUL ...)
(Mul64uhilo ...) => (LoweredMuluhilo ...)
(Mul64uover ...) => (LoweredMuluover ...)
-(Mul32 ...) => (MULW ...)
-(Mul16 x y) => (MULW (SignExt16to32 x) (SignExt16to32 y))
-(Mul8 x y) => (MULW (SignExt8to32 x) (SignExt8to32 y))
+(Mul(32|16|8) ...) => (MULW ...)
(Mul(64|32)F ...) => (FMUL(D|S) ...)
(Div(64|32)F ...) => (FDIV(D|S) ...)
case OpMove:
return rewriteValueRISCV64_OpMove(v)
case OpMul16:
- return rewriteValueRISCV64_OpMul16(v)
+ v.Op = OpRISCV64MULW
+ return true
case OpMul32:
v.Op = OpRISCV64MULW
return true
v.Op = OpRISCV64LoweredMuluover
return true
case OpMul8:
- return rewriteValueRISCV64_OpMul8(v)
+ v.Op = OpRISCV64MULW
+ return true
case OpNeg16:
v.Op = OpRISCV64NEG
return true
}
return false
}
-func rewriteValueRISCV64_OpMul16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Mul16 x y)
- // result: (MULW (SignExt16to32 x) (SignExt16to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpRISCV64MULW)
- v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v0.AddArg(x)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(y)
- v.AddArg2(v0, v1)
- return true
- }
-}
-func rewriteValueRISCV64_OpMul8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Mul8 x y)
- // result: (MULW (SignExt8to32 x) (SignExt8to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpRISCV64MULW)
- v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v0.AddArg(x)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(y)
- v.AddArg2(v0, v1)
- return true
- }
-}
func rewriteValueRISCV64_OpNeq16(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]