1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// 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
|