// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "textflag.h" // See memclrNoHeapPointers Go doc for important implementation constraints. // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT|NOFRAME,$0-16 MOVD ptr+0(FP), R4 MOVD n+8(FP), R5 start: CMPBLE R5, $3, clear0to3 CMPBLE R5, $7, clear4to7 CMPBLE R5, $11, clear8to11 CMPBLE R5, $15, clear12to15 CMP R5, $32 BGE clearmt32 MOVD $0, 0(R4) MOVD $0, 8(R4) ADD $16, R4 SUB $16, R5 BR start clear0to3: CMPBEQ R5, $0, done CMPBNE R5, $1, clear2 MOVB $0, 0(R4) RET clear2: CMPBNE R5, $2, clear3 MOVH $0, 0(R4) RET clear3: MOVH $0, 0(R4) MOVB $0, 2(R4) RET clear4to7: CMPBNE R5, $4, clear5 MOVW $0, 0(R4) RET clear5: CMPBNE R5, $5, clear6 MOVW $0, 0(R4) MOVB $0, 4(R4) RET clear6: CMPBNE R5, $6, clear7 MOVW $0, 0(R4) MOVH $0, 4(R4) RET clear7: MOVW $0, 0(R4) MOVH $0, 4(R4) MOVB $0, 6(R4) RET clear8to11: CMPBNE R5, $8, clear9 MOVD $0, 0(R4) RET clear9: CMPBNE R5, $9, clear10 MOVD $0, 0(R4) MOVB $0, 8(R4) RET clear10: CMPBNE R5, $10, clear11 MOVD $0, 0(R4) MOVH $0, 8(R4) RET clear11: MOVD $0, 0(R4) MOVH $0, 8(R4) MOVB $0, 10(R4) RET clear12to15: CMPBNE R5, $12, clear13 MOVD $0, 0(R4) MOVW $0, 8(R4) RET clear13: CMPBNE R5, $13, clear14 MOVD $0, 0(R4) MOVW $0, 8(R4) MOVB $0, 12(R4) RET clear14: CMPBNE R5, $14, clear15 MOVD $0, 0(R4) MOVW $0, 8(R4) MOVH $0, 12(R4) RET clear15: MOVD $0, 0(R4) MOVW $0, 8(R4) MOVH $0, 12(R4) MOVB $0, 14(R4) RET clearmt32: CMP R5, $256 BLT clearlt256 XC $256, 0(R4), 0(R4) ADD $256, R4 ADD $-256, R5 BR clearmt32 clearlt256: CMPBEQ R5, $0, done ADD $-1, R5 EXRL $memclr_exrl_xc<>(SB), R5 done: RET // DO NOT CALL - target for exrl (execute relative long) instruction. TEXT memclr_exrl_xc<>(SB),NOSPLIT|NOFRAME,$0-0 XC $1, 0(R4), 0(R4) MOVD $0, 0(R0) RET