github.com/stingnevermore/go@v0.0.0-20180120041312-3810f5bfed72/src/runtime/memclr_plan9_386.s (about) 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 // void runtime·memclrNoHeapPointers(void*, uintptr) 8 TEXT runtime·memclrNoHeapPointers(SB), NOSPLIT, $0-8 9 MOVL ptr+0(FP), DI 10 MOVL n+4(FP), BX 11 XORL AX, AX 12 13 tail: 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