1// Copyright 2014 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5#include "textflag.h" 6 7// func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) 8TEXT runtime·memclrNoHeapPointers(SB), NOSPLIT, $0-8 9 MOVL ptr+0(FP), DI 10 MOVL n+4(FP), BX 11 XORL AX, AX 12 13tail: 14 TESTL BX, BX 15 JEQ _0 16 CMPL BX, $2 17 JBE _1or2 18 CMPL BX, $4 19 JB _3 20 JE _4 21 CMPL BX, $8 22 JBE _5through8 23 CMPL BX, $16 24 JBE _9through16 25 MOVL BX, CX 26 SHRL $2, CX 27 REP 28 STOSL 29 ANDL $3, BX 30 JNE tail 31 RET 32 33_1or2: 34 MOVB AX, (DI) 35 MOVB AX, -1(DI)(BX*1) 36 RET 37_0: 38 RET 39_3: 40 MOVW AX, (DI) 41 MOVB AX, 2(DI) 42 RET 43_4: 44 // We need a separate case for 4 to make sure we clear pointers atomically. 45 MOVL AX, (DI) 46 RET 47_5through8: 48 MOVL AX, (DI) 49 MOVL AX, -4(DI)(BX*1) 50 RET 51_9through16: 52 MOVL AX, (DI) 53 MOVL AX, 4(DI) 54 MOVL AX, -8(DI)(BX*1) 55 MOVL AX, -4(DI)(BX*1) 56 RET 57