]> Cypherpunks.ru repositories - gostls13.git/blob - src/runtime/memclr_riscv64.s
runtime: document pointer write atomicity for memclrNoHeapPointers
[gostls13.git] / 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