Text file
src/runtime/memclr_s390x.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 // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
10 TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT|NOFRAME,$0-16
11 MOVD ptr+0(FP), R4
12 MOVD n+8(FP), R5
13
14 CMPBGE R5, $32, clearge32
15
16 start:
17 CMPBLE R5, $3, clear0to3
18 CMPBLE R5, $7, clear4to7
19 CMPBLE R5, $11, clear8to11
20 CMPBLE R5, $15, clear12to15
21 MOVD $0, 0(R4)
22 MOVD $0, 8(R4)
23 ADD $16, R4
24 SUB $16, R5
25 BR start
26
27 clear0to3:
28 CMPBEQ R5, $0, done
29 CMPBNE R5, $1, clear2
30 MOVB $0, 0(R4)
31 RET
32 clear2:
33 CMPBNE R5, $2, clear3
34 MOVH $0, 0(R4)
35 RET
36 clear3:
37 MOVH $0, 0(R4)
38 MOVB $0, 2(R4)
39 RET
40
41 clear4to7:
42 CMPBNE R5, $4, clear5
43 MOVW $0, 0(R4)
44 RET
45 clear5:
46 CMPBNE R5, $5, clear6
47 MOVW $0, 0(R4)
48 MOVB $0, 4(R4)
49 RET
50 clear6:
51 CMPBNE R5, $6, clear7
52 MOVW $0, 0(R4)
53 MOVH $0, 4(R4)
54 RET
55 clear7:
56 MOVW $0, 0(R4)
57 MOVH $0, 4(R4)
58 MOVB $0, 6(R4)
59 RET
60
61 clear8to11:
62 CMPBNE R5, $8, clear9
63 MOVD $0, 0(R4)
64 RET
65 clear9:
66 CMPBNE R5, $9, clear10
67 MOVD $0, 0(R4)
68 MOVB $0, 8(R4)
69 RET
70 clear10:
71 CMPBNE R5, $10, clear11
72 MOVD $0, 0(R4)
73 MOVH $0, 8(R4)
74 RET
75 clear11:
76 MOVD $0, 0(R4)
77 MOVH $0, 8(R4)
78 MOVB $0, 10(R4)
79 RET
80
81 clear12to15:
82 CMPBNE R5, $12, clear13
83 MOVD $0, 0(R4)
84 MOVW $0, 8(R4)
85 RET
86 clear13:
87 CMPBNE R5, $13, clear14
88 MOVD $0, 0(R4)
89 MOVW $0, 8(R4)
90 MOVB $0, 12(R4)
91 RET
92 clear14:
93 CMPBNE R5, $14, clear15
94 MOVD $0, 0(R4)
95 MOVW $0, 8(R4)
96 MOVH $0, 12(R4)
97 RET
98 clear15:
99 MOVD $0, 0(R4)
100 MOVW $0, 8(R4)
101 MOVH $0, 12(R4)
102 MOVB $0, 14(R4)
103 RET
104
105 clearge32:
106 CMP R5, $4096
107 BLT clear256Bto4KB
108
109 // For size >= 4KB, XC is loop unrolled 16 times (4KB = 256B * 16)
110 clearge4KB:
111 XC $256, 0(R4), 0(R4)
112 ADD $256, R4
113 ADD $-256, R5
114 XC $256, 0(R4), 0(R4)
115 ADD $256, R4
116 ADD $-256, R5
117 XC $256, 0(R4), 0(R4)
118 ADD $256, R4
119 ADD $-256, R5
120 XC $256, 0(R4), 0(R4)
121 ADD $256, R4
122 ADD $-256, R5
123 XC $256, 0(R4), 0(R4)
124 ADD $256, R4
125 ADD $-256, R5
126 XC $256, 0(R4), 0(R4)
127 ADD $256, R4
128 ADD $-256, R5
129 XC $256, 0(R4), 0(R4)
130 ADD $256, R4
131 ADD $-256, R5
132 XC $256, 0(R4), 0(R4)
133 ADD $256, R4
134 ADD $-256, R5
135 XC $256, 0(R4), 0(R4)
136 ADD $256, R4
137 ADD $-256, R5
138 XC $256, 0(R4), 0(R4)
139 ADD $256, R4
140 ADD $-256, R5
141 XC $256, 0(R4), 0(R4)
142 ADD $256, R4
143 ADD $-256, R5
144 XC $256, 0(R4), 0(R4)
145 ADD $256, R4
146 ADD $-256, R5
147 XC $256, 0(R4), 0(R4)
148 ADD $256, R4
149 ADD $-256, R5
150 XC $256, 0(R4), 0(R4)
151 ADD $256, R4
152 ADD $-256, R5
153 XC $256, 0(R4), 0(R4)
154 ADD $256, R4
155 ADD $-256, R5
156 XC $256, 0(R4), 0(R4)
157 ADD $256, R4
158 ADD $-256, R5
159 CMP R5, $4096
160 BGE clearge4KB
161
162 clear256Bto4KB:
163 CMP R5, $256
164 BLT clear32to255
165 XC $256, 0(R4), 0(R4)
166 ADD $256, R4
167 ADD $-256, R5
168 BR clear256Bto4KB
169
170 clear32to255:
171 CMPBEQ R5, $0, done
172 CMPBLT R5, $32, start
173 CMPBEQ R5, $32, clear32
174 CMPBLE R5, $64, clear33to64
175 CMP R5, $128
176 BLE clear65to128
177 CMP R5, $255
178 BLE clear129to255
179
180 clear32:
181 VZERO V1
182 VST V1, 0(R4)
183 VST V1, 16(R4)
184 RET
185
186 clear33to64:
187 VZERO V1
188 VST V1, 0(R4)
189 VST V1, 16(R4)
190 ADD $-32, R5
191 VST V1, 0(R4)(R5)
192 VST V1, 16(R4)(R5)
193 RET
194
195 clear65to128:
196 VZERO V1
197 VST V1, 0(R4)
198 VST V1, 16(R4)
199 VST V1, 32(R4)
200 VST V1, 48(R4)
201 ADD $-64, R5
202 VST V1, 0(R4)(R5)
203 VST V1, 16(R4)(R5)
204 VST V1, 32(R4)(R5)
205 VST V1, 48(R4)(R5)
206 RET
207
208 clear129to255:
209 VZERO V1
210 VST V1, 0(R4)
211 VST V1, 16(R4)
212 VST V1, 32(R4)
213 VST V1, 48(R4)
214 VST V1, 64(R4)
215 VST V1, 80(R4)
216 VST V1, 96(R4)
217 VST V1, 112(R4)
218 ADD $-128, R5
219 VST V1, 0(R4)(R5)
220 VST V1, 16(R4)(R5)
221 VST V1, 32(R4)(R5)
222 VST V1, 48(R4)(R5)
223 VST V1, 64(R4)(R5)
224 VST V1, 80(R4)(R5)
225 VST V1, 96(R4)(R5)
226 VST V1, 112(R4)(R5)
227 RET
228
229 done:
230 RET
231
232
View as plain text