]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/ssa/gen/AMD64.rules
Merge "[dev.ssa] Merge remote-tracking branch 'origin/master' into mergebranch" into...
[gostls13.git] / src / cmd / compile / internal / ssa / gen / AMD64.rules
index b30df5f8d4515345ca004ac2059604124e2a592d..dd50dd2d27d1f227e898edbc5b0f086dd6504ca7 100644 (file)
                                (MOVQstore destptr (MOVQconst [0]) mem))))
 
 // Medium zeroing uses a duff device.
-(Zero [size] destptr mem) && size <= 1024 && size%8 == 0 ->
-       (DUFFZERO [duffStart(size)] (ADDQconst [duffAdj(size)] destptr) (MOVQconst [0]) mem)
+(Zero [size] destptr mem) && size <= 1024 && size%8 == 0 && size%16 != 0 ->
+       (Zero [size-8] (ADDQconst [8] destptr) (MOVQstore destptr (MOVQconst [0]) mem))
+(Zero [size] destptr mem) && size <= 1024 && size%16 == 0 ->
+       (DUFFZERO [duffStart(size)] (ADDQconst [duffAdj(size)] destptr) (MOVOconst [0]) mem)
 
 // Large zeroing uses REP STOSQ.
 (Zero [size] destptr mem) && size > 1024 && size%8 == 0 ->