// 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" | |
// void runtime·memclrNoHeapPointers(void*, 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 $runtime·memclr_s390x_exrl_xc(SB), R5 | |
done: | |
RET | |
// DO NOT CALL - target for exrl (execute relative long) instruction. | |
TEXT runtime·memclr_s390x_exrl_xc(SB),NOSPLIT|NOFRAME,$0-0 | |
XC $1, 0(R4), 0(R4) | |
MOVD $0, 0(R0) | |
RET | |