Home | History | Annotate | Download | only in runtime
      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 runtimememclrNoHeapPointers(void*, uintptr)
      8 TEXT runtimememclrNoHeapPointers(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
     57