]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: replace byte-at-a-time zeroing loop with memclr
authorQuan Yong Zhai <qyzhai@gmail.com>
Sat, 23 Jul 2011 19:46:58 +0000 (15:46 -0400)
committerRuss Cox <rsc@golang.org>
Sat, 23 Jul 2011 19:46:58 +0000 (15:46 -0400)
R=golang-dev, r, r, dsymonds, rsc
CC=golang-dev
https://golang.org/cl/4813043

src/pkg/runtime/386/asm.s
src/pkg/runtime/amd64/asm.s
src/pkg/runtime/runtime.c

index c6df4f069a7014e0be36eb6156b5f8789f79ca9f..add14be964f82c14dee3e7600d8f11a91d034a58 100644 (file)
@@ -479,12 +479,16 @@ TEXT runtime·stackcheck(SB), 7, $0
 TEXT runtime·memclr(SB),7,$0
        MOVL    4(SP), DI               // arg 1 addr
        MOVL    8(SP), CX               // arg 2 count
-       ADDL    $3, CX
+       MOVL    CX, BX
+       ANDL    $3, BX
        SHRL    $2, CX
        MOVL    $0, AX
        CLD
        REP
        STOSL
+       MOVL    BX, CX
+       REP
+       STOSB
        RET
 
 TEXT runtime·getcallerpc(SB),7,$0
index 2b16587f8cfd004a6f0608d649a696e4a6c96bf1..6ac84c408d601ccb598e28cab90cf6f68452e76a 100644 (file)
@@ -527,12 +527,16 @@ TEXT runtime·stackcheck(SB), 7, $0
 TEXT runtime·memclr(SB),7,$0
        MOVQ    8(SP), DI               // arg 1 addr
        MOVQ    16(SP), CX              // arg 2 count
-       ADDQ    $7, CX
+       MOVQ    CX, BX
+       ANDQ    $7, BX
        SHRQ    $3, CX
        MOVQ    $0, AX
        CLD
        REP
        STOSQ
+       MOVQ    BX, CX
+       REP
+       STOSB
        RET
 
 TEXT runtime·getcallerpc(SB),7,$0
index a16ca417e6f538b2756e2dd6bd2ab4735f713b99..00116c001a0e646eddf8cbf5e7d4ed7e66187fef 100644 (file)
@@ -381,18 +381,11 @@ memprint(uint32 s, void *a)
 static void
 memcopy(uint32 s, void *a, void *b)
 {
-       byte *ba, *bb;
-       uint32 i;
-
-       ba = a;
-       bb = b;
-       if(bb == nil) {
-               for(i=0; i<s; i++)
-                       ba[i] = 0;
+       if(b == nil) {
+               runtime·memclr(a,s);
                return;
        }
-       for(i=0; i<s; i++)
-               ba[i] = bb[i];
+       runtime·memmove(a,b,s);
 }
 
 static uint32