(MOVQstoreconst [makeValAndOff(0,0)] destptr mem))
// Adjust zeros to be a multiple of 16 bytes.
-(Zero [s] destptr mem) && s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE =>
- (Zero [s-s%16] (OffPtr <destptr.Type> destptr [s%16])
- (MOVOstoreconst [makeValAndOff(0,0)] destptr mem))
-
-(Zero [s] destptr mem) && s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE =>
+(Zero [s] destptr mem) && s%16 != 0 && s > 16 && config.useSSE =>
(Zero [s-s%16] (OffPtr <destptr.Type> destptr [s%16])
(MOVOstoreconst [makeValAndOff(0,0)] destptr mem))
return true
}
// match: (Zero [s] destptr mem)
- // cond: s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE
+ // cond: s%16 != 0 && s > 16 && config.useSSE
// result: (Zero [s-s%16] (OffPtr <destptr.Type> destptr [s%16]) (MOVOstoreconst [makeValAndOff(0,0)] destptr mem))
for {
s := auxIntToInt64(v.AuxInt)
destptr := v_0
mem := v_1
- if !(s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE) {
- break
- }
- v.reset(OpZero)
- v.AuxInt = int64ToAuxInt(s - s%16)
- v0 := b.NewValue0(v.Pos, OpOffPtr, destptr.Type)
- v0.AuxInt = int64ToAuxInt(s % 16)
- v0.AddArg(destptr)
- v1 := b.NewValue0(v.Pos, OpAMD64MOVOstoreconst, types.TypeMem)
- v1.AuxInt = valAndOffToAuxInt(makeValAndOff(0, 0))
- v1.AddArg2(destptr, mem)
- v.AddArg2(v0, v1)
- return true
- }
- // match: (Zero [s] destptr mem)
- // cond: s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE
- // result: (Zero [s-s%16] (OffPtr <destptr.Type> destptr [s%16]) (MOVOstoreconst [makeValAndOff(0,0)] destptr mem))
- for {
- s := auxIntToInt64(v.AuxInt)
- destptr := v_0
- mem := v_1
- if !(s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE) {
+ if !(s%16 != 0 && s > 16 && config.useSSE) {
break
}
v.reset(OpZero)