Text file
src/runtime/memclr_riscv64.s
1 // Copyright 2016 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 // See memclrNoHeapPointers Go doc for important implementation constraints.
8
9 // void runtime·memclrNoHeapPointers(void*, uintptr)
10 TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-16
11 MOV ptr+0(FP), T1
12 MOV n+8(FP), T2
13 ADD T1, T2, T4
14
15 // If less than eight bytes, do one byte at a time.
16 SLTU $8, T2, T3
17 BNE T3, ZERO, outcheck
18
19 // Do one byte at a time until eight-aligned.
20 JMP aligncheck
21 align:
22 MOVB ZERO, (T1)
23 ADD $1, T1
24 aligncheck:
25 AND $7, T1, T3
26 BNE T3, ZERO, align
27
28 // Do eight bytes at a time as long as there is room.
29 ADD $-7, T4, T5
30 JMP wordscheck
31 words:
32 MOV ZERO, (T1)
33 ADD $8, T1
34 wordscheck:
35 SLTU T5, T1, T3
36 BNE T3, ZERO, words
37
38 JMP outcheck
39 out:
40 MOVB ZERO, (T1)
41 ADD $1, T1
42 outcheck:
43 BNE T1, T4, out
44
45 done:
46 RET
47
View as plain text