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