(Move [8] dst src mem) -> (MOVDstore dst (MOVDload src mem) mem)
// Generic move uses a loop
-(Move [s] {t} dst src mem) ->
+(Move [s] {t} dst src mem) && (s <= 16 || logLargeCopy(v, s)) ->
(LoweredMove [t.(*types.Type).Alignment()]
dst
src
return true
}
// match: (Move [s] {t} dst src mem)
+ // cond: (s <= 16 || logLargeCopy(v, s))
// result: (LoweredMove [t.(*types.Type).Alignment()] dst src (ADDI <src.Type> [s-moveSize(t.(*types.Type).Alignment(), config)] src) mem)
for {
s := v.AuxInt
dst := v_0
src := v_1
mem := v_2
+ if !(s <= 16 || logLargeCopy(v, s)) {
+ break
+ }
v.reset(OpRISCV64LoweredMove)
v.AuxInt = t.(*types.Type).Alignment()
v0 := b.NewValue0(v.Pos, OpRISCV64ADDI, src.Type)
v.AddArg4(dst, src, v0, mem)
return true
}
+ return false
}
func rewriteValueRISCV64_OpMul16(v *Value) bool {
v_1 := v.Args[1]