1// Code generated by command: go run gen.go -avx512 -out ../accum_vector_avx512_amd64.s -pkg xxh3. DO NOT EDIT.
2
3#include "textflag.h"
4
5DATA prime_avx512<>+0(SB)/8, $0x000000009e3779b1
6DATA prime_avx512<>+8(SB)/8, $0x000000009e3779b1
7DATA prime_avx512<>+16(SB)/8, $0x000000009e3779b1
8DATA prime_avx512<>+24(SB)/8, $0x000000009e3779b1
9DATA prime_avx512<>+32(SB)/8, $0x000000009e3779b1
10DATA prime_avx512<>+40(SB)/8, $0x000000009e3779b1
11DATA prime_avx512<>+48(SB)/8, $0x000000009e3779b1
12DATA prime_avx512<>+56(SB)/8, $0x000000009e3779b1
13GLOBL prime_avx512<>(SB), RODATA|NOPTR, $64
14
15// func accumAVX512(acc *[8]uint64, data *byte, key *byte, len uint64)
16// Requires: AVX, AVX512F, MMX+
17TEXT ·accumAVX512(SB), NOSPLIT, $0-32
18 MOVQ acc+0(FP), AX
19 MOVQ data+8(FP), CX
20 MOVQ key+16(FP), DX
21 MOVQ len+24(FP), BX
22 VMOVDQU64 (AX), Z1
23 VMOVDQU64 prime_avx512<>+0(SB), Z0
24 VMOVDQU64 (DX), Z2
25 VMOVDQU64 8(DX), Z3
26 VMOVDQU64 16(DX), Z4
27 VMOVDQU64 24(DX), Z5
28 VMOVDQU64 32(DX), Z6
29 VMOVDQU64 40(DX), Z7
30 VMOVDQU64 48(DX), Z8
31 VMOVDQU64 56(DX), Z9
32 VMOVDQU64 64(DX), Z10
33 VMOVDQU64 72(DX), Z11
34 VMOVDQU64 80(DX), Z12
35 VMOVDQU64 88(DX), Z13
36 VMOVDQU64 96(DX), Z14
37 VMOVDQU64 104(DX), Z15
38 VMOVDQU64 112(DX), Z16
39 VMOVDQU64 120(DX), Z17
40 VMOVDQU64 128(DX), Z18
41 VMOVDQU64 121(DX), Z19
42
43accum_large:
44 CMPQ BX, $0x00000400
45 JLE accum
46 VMOVDQU64 (CX), Z20
47 PREFETCHT0 1024(CX)
48 VPXORD Z2, Z20, Z21
49 VPSHUFD $0x31, Z21, Z22
50 VPMULUDQ Z21, Z22, Z21
51 VPSHUFD $0x4e, Z20, Z20
52 VPADDQ Z1, Z20, Z1
53 VPADDQ Z1, Z21, Z1
54 VMOVDQU64 64(CX), Z20
55 PREFETCHT0 1088(CX)
56 VPXORD Z3, Z20, Z21
57 VPSHUFD $0x31, Z21, Z22
58 VPMULUDQ Z21, Z22, Z21
59 VPSHUFD $0x4e, Z20, Z20
60 VPADDQ Z1, Z20, Z1
61 VPADDQ Z1, Z21, Z1
62 VMOVDQU64 128(CX), Z20
63 PREFETCHT0 1152(CX)
64 VPXORD Z4, Z20, Z21
65 VPSHUFD $0x31, Z21, Z22
66 VPMULUDQ Z21, Z22, Z21
67 VPSHUFD $0x4e, Z20, Z20
68 VPADDQ Z1, Z20, Z1
69 VPADDQ Z1, Z21, Z1
70 VMOVDQU64 192(CX), Z20
71 PREFETCHT0 1216(CX)
72 VPXORD Z5, Z20, Z21
73 VPSHUFD $0x31, Z21, Z22
74 VPMULUDQ Z21, Z22, Z21
75 VPSHUFD $0x4e, Z20, Z20
76 VPADDQ Z1, Z20, Z1
77 VPADDQ Z1, Z21, Z1
78 VMOVDQU64 256(CX), Z20
79 PREFETCHT0 1280(CX)
80 VPXORD Z6, Z20, Z21
81 VPSHUFD $0x31, Z21, Z22
82 VPMULUDQ Z21, Z22, Z21
83 VPSHUFD $0x4e, Z20, Z20
84 VPADDQ Z1, Z20, Z1
85 VPADDQ Z1, Z21, Z1
86 VMOVDQU64 320(CX), Z20
87 PREFETCHT0 1344(CX)
88 VPXORD Z7, Z20, Z21
89 VPSHUFD $0x31, Z21, Z22
90 VPMULUDQ Z21, Z22, Z21
91 VPSHUFD $0x4e, Z20, Z20
92 VPADDQ Z1, Z20, Z1
93 VPADDQ Z1, Z21, Z1
94 VMOVDQU64 384(CX), Z20
95 PREFETCHT0 1408(CX)
96 VPXORD Z8, Z20, Z21
97 VPSHUFD $0x31, Z21, Z22
98 VPMULUDQ Z21, Z22, Z21
99 VPSHUFD $0x4e, Z20, Z20
100 VPADDQ Z1, Z20, Z1
101 VPADDQ Z1, Z21, Z1
102 VMOVDQU64 448(CX), Z20
103 PREFETCHT0 1472(CX)
104 VPXORD Z9, Z20, Z21
105 VPSHUFD $0x31, Z21, Z22
106 VPMULUDQ Z21, Z22, Z21
107 VPSHUFD $0x4e, Z20, Z20
108 VPADDQ Z1, Z20, Z1
109 VPADDQ Z1, Z21, Z1
110 VMOVDQU64 512(CX), Z20
111 PREFETCHT0 1536(CX)
112 VPXORD Z10, Z20, Z21
113 VPSHUFD $0x31, Z21, Z22
114 VPMULUDQ Z21, Z22, Z21
115 VPSHUFD $0x4e, Z20, Z20
116 VPADDQ Z1, Z20, Z1
117 VPADDQ Z1, Z21, Z1
118 VMOVDQU64 576(CX), Z20
119 PREFETCHT0 1600(CX)
120 VPXORD Z11, Z20, Z21
121 VPSHUFD $0x31, Z21, Z22
122 VPMULUDQ Z21, Z22, Z21
123 VPSHUFD $0x4e, Z20, Z20
124 VPADDQ Z1, Z20, Z1
125 VPADDQ Z1, Z21, Z1
126 VMOVDQU64 640(CX), Z20
127 PREFETCHT0 1664(CX)
128 VPXORD Z12, Z20, Z21
129 VPSHUFD $0x31, Z21, Z22
130 VPMULUDQ Z21, Z22, Z21
131 VPSHUFD $0x4e, Z20, Z20
132 VPADDQ Z1, Z20, Z1
133 VPADDQ Z1, Z21, Z1
134 VMOVDQU64 704(CX), Z20
135 PREFETCHT0 1728(CX)
136 VPXORD Z13, Z20, Z21
137 VPSHUFD $0x31, Z21, Z22
138 VPMULUDQ Z21, Z22, Z21
139 VPSHUFD $0x4e, Z20, Z20
140 VPADDQ Z1, Z20, Z1
141 VPADDQ Z1, Z21, Z1
142 VMOVDQU64 768(CX), Z20
143 PREFETCHT0 1792(CX)
144 VPXORD Z14, Z20, Z21
145 VPSHUFD $0x31, Z21, Z22
146 VPMULUDQ Z21, Z22, Z21
147 VPSHUFD $0x4e, Z20, Z20
148 VPADDQ Z1, Z20, Z1
149 VPADDQ Z1, Z21, Z1
150 VMOVDQU64 832(CX), Z20
151 PREFETCHT0 1856(CX)
152 VPXORD Z15, Z20, Z21
153 VPSHUFD $0x31, Z21, Z22
154 VPMULUDQ Z21, Z22, Z21
155 VPSHUFD $0x4e, Z20, Z20
156 VPADDQ Z1, Z20, Z1
157 VPADDQ Z1, Z21, Z1
158 VMOVDQU64 896(CX), Z20
159 PREFETCHT0 1920(CX)
160 VPXORD Z16, Z20, Z21
161 VPSHUFD $0x31, Z21, Z22
162 VPMULUDQ Z21, Z22, Z21
163 VPSHUFD $0x4e, Z20, Z20
164 VPADDQ Z1, Z20, Z1
165 VPADDQ Z1, Z21, Z1
166 VMOVDQU64 960(CX), Z20
167 PREFETCHT0 1984(CX)
168 VPXORD Z17, Z20, Z21
169 VPSHUFD $0x31, Z21, Z22
170 VPMULUDQ Z21, Z22, Z21
171 VPSHUFD $0x4e, Z20, Z20
172 VPADDQ Z1, Z20, Z1
173 VPADDQ Z1, Z21, Z1
174 ADDQ $0x00000400, CX
175 SUBQ $0x00000400, BX
176 VPSRLQ $0x2f, Z1, Z20
177 VPTERNLOGD $0x96, Z1, Z18, Z20
178 VPMULUDQ Z0, Z20, Z1
179 VPSHUFD $0xf5, Z20, Z20
180 VPMULUDQ Z0, Z20, Z20
181 VPSLLQ $0x20, Z20, Z20
182 VPADDQ Z1, Z20, Z1
183 JMP accum_large
184
185accum:
186 CMPQ BX, $0x40
187 JLE finalize
188 VMOVDQU64 (CX), Z0
189 VPXORD Z2, Z0, Z2
190 VPSHUFD $0x31, Z2, Z18
191 VPMULUDQ Z2, Z18, Z2
192 VPSHUFD $0x4e, Z0, Z0
193 VPADDQ Z1, Z0, Z1
194 VPADDQ Z1, Z2, Z1
195 ADDQ $0x00000040, CX
196 SUBQ $0x00000040, BX
197 CMPQ BX, $0x40
198 JLE finalize
199 VMOVDQU64 (CX), Z0
200 VPXORD Z3, Z0, Z2
201 VPSHUFD $0x31, Z2, Z3
202 VPMULUDQ Z2, Z3, Z2
203 VPSHUFD $0x4e, Z0, Z0
204 VPADDQ Z1, Z0, Z1
205 VPADDQ Z1, Z2, Z1
206 ADDQ $0x00000040, CX
207 SUBQ $0x00000040, BX
208 CMPQ BX, $0x40
209 JLE finalize
210 VMOVDQU64 (CX), Z0
211 VPXORD Z4, Z0, Z2
212 VPSHUFD $0x31, Z2, Z3
213 VPMULUDQ Z2, Z3, Z2
214 VPSHUFD $0x4e, Z0, Z0
215 VPADDQ Z1, Z0, Z1
216 VPADDQ Z1, Z2, Z1
217 ADDQ $0x00000040, CX
218 SUBQ $0x00000040, BX
219 CMPQ BX, $0x40
220 JLE finalize
221 VMOVDQU64 (CX), Z0
222 VPXORD Z5, Z0, Z2
223 VPSHUFD $0x31, Z2, Z3
224 VPMULUDQ Z2, Z3, Z2
225 VPSHUFD $0x4e, Z0, Z0
226 VPADDQ Z1, Z0, Z1
227 VPADDQ Z1, Z2, Z1
228 ADDQ $0x00000040, CX
229 SUBQ $0x00000040, BX
230 CMPQ BX, $0x40
231 JLE finalize
232 VMOVDQU64 (CX), Z0
233 VPXORD Z6, Z0, Z2
234 VPSHUFD $0x31, Z2, Z3
235 VPMULUDQ Z2, Z3, Z2
236 VPSHUFD $0x4e, Z0, Z0
237 VPADDQ Z1, Z0, Z1
238 VPADDQ Z1, Z2, Z1
239 ADDQ $0x00000040, CX
240 SUBQ $0x00000040, BX
241 CMPQ BX, $0x40
242 JLE finalize
243 VMOVDQU64 (CX), Z0
244 VPXORD Z7, Z0, Z2
245 VPSHUFD $0x31, Z2, Z3
246 VPMULUDQ Z2, Z3, Z2
247 VPSHUFD $0x4e, Z0, Z0
248 VPADDQ Z1, Z0, Z1
249 VPADDQ Z1, Z2, Z1
250 ADDQ $0x00000040, CX
251 SUBQ $0x00000040, BX
252 CMPQ BX, $0x40
253 JLE finalize
254 VMOVDQU64 (CX), Z0
255 VPXORD Z8, Z0, Z2
256 VPSHUFD $0x31, Z2, Z3
257 VPMULUDQ Z2, Z3, Z2
258 VPSHUFD $0x4e, Z0, Z0
259 VPADDQ Z1, Z0, Z1
260 VPADDQ Z1, Z2, Z1
261 ADDQ $0x00000040, CX
262 SUBQ $0x00000040, BX
263 CMPQ BX, $0x40
264 JLE finalize
265 VMOVDQU64 (CX), Z0
266 VPXORD Z9, Z0, Z2
267 VPSHUFD $0x31, Z2, Z3
268 VPMULUDQ Z2, Z3, Z2
269 VPSHUFD $0x4e, Z0, Z0
270 VPADDQ Z1, Z0, Z1
271 VPADDQ Z1, Z2, Z1
272 ADDQ $0x00000040, CX
273 SUBQ $0x00000040, BX
274 CMPQ BX, $0x40
275 JLE finalize
276 VMOVDQU64 (CX), Z0
277 VPXORD Z10, Z0, Z2
278 VPSHUFD $0x31, Z2, Z3
279 VPMULUDQ Z2, Z3, Z2
280 VPSHUFD $0x4e, Z0, Z0
281 VPADDQ Z1, Z0, Z1
282 VPADDQ Z1, Z2, Z1
283 ADDQ $0x00000040, CX
284 SUBQ $0x00000040, BX
285 CMPQ BX, $0x40
286 JLE finalize
287 VMOVDQU64 (CX), Z0
288 VPXORD Z11, Z0, Z2
289 VPSHUFD $0x31, Z2, Z3
290 VPMULUDQ Z2, Z3, Z2
291 VPSHUFD $0x4e, Z0, Z0
292 VPADDQ Z1, Z0, Z1
293 VPADDQ Z1, Z2, Z1
294 ADDQ $0x00000040, CX
295 SUBQ $0x00000040, BX
296 CMPQ BX, $0x40
297 JLE finalize
298 VMOVDQU64 (CX), Z0
299 VPXORD Z12, Z0, Z2
300 VPSHUFD $0x31, Z2, Z3
301 VPMULUDQ Z2, Z3, Z2
302 VPSHUFD $0x4e, Z0, Z0
303 VPADDQ Z1, Z0, Z1
304 VPADDQ Z1, Z2, Z1
305 ADDQ $0x00000040, CX
306 SUBQ $0x00000040, BX
307 CMPQ BX, $0x40
308 JLE finalize
309 VMOVDQU64 (CX), Z0
310 VPXORD Z13, Z0, Z2
311 VPSHUFD $0x31, Z2, Z3
312 VPMULUDQ Z2, Z3, Z2
313 VPSHUFD $0x4e, Z0, Z0
314 VPADDQ Z1, Z0, Z1
315 VPADDQ Z1, Z2, Z1
316 ADDQ $0x00000040, CX
317 SUBQ $0x00000040, BX
318 CMPQ BX, $0x40
319 JLE finalize
320 VMOVDQU64 (CX), Z0
321 VPXORD Z14, Z0, Z2
322 VPSHUFD $0x31, Z2, Z3
323 VPMULUDQ Z2, Z3, Z2
324 VPSHUFD $0x4e, Z0, Z0
325 VPADDQ Z1, Z0, Z1
326 VPADDQ Z1, Z2, Z1
327 ADDQ $0x00000040, CX
328 SUBQ $0x00000040, BX
329 CMPQ BX, $0x40
330 JLE finalize
331 VMOVDQU64 (CX), Z0
332 VPXORD Z15, Z0, Z2
333 VPSHUFD $0x31, Z2, Z3
334 VPMULUDQ Z2, Z3, Z2
335 VPSHUFD $0x4e, Z0, Z0
336 VPADDQ Z1, Z0, Z1
337 VPADDQ Z1, Z2, Z1
338 ADDQ $0x00000040, CX
339 SUBQ $0x00000040, BX
340 CMPQ BX, $0x40
341 JLE finalize
342 VMOVDQU64 (CX), Z0
343 VPXORD Z16, Z0, Z2
344 VPSHUFD $0x31, Z2, Z3
345 VPMULUDQ Z2, Z3, Z2
346 VPSHUFD $0x4e, Z0, Z0
347 VPADDQ Z1, Z0, Z1
348 VPADDQ Z1, Z2, Z1
349 ADDQ $0x00000040, CX
350 SUBQ $0x00000040, BX
351 CMPQ BX, $0x40
352 JLE finalize
353 VMOVDQU64 (CX), Z0
354 VPXORD Z17, Z0, Z2
355 VPSHUFD $0x31, Z2, Z3
356 VPMULUDQ Z2, Z3, Z2
357 VPSHUFD $0x4e, Z0, Z0
358 VPADDQ Z1, Z0, Z1
359 VPADDQ Z1, Z2, Z1
360 ADDQ $0x00000040, CX
361 SUBQ $0x00000040, BX
362
363finalize:
364 CMPQ BX, $0x00
365 JE return
366 SUBQ $0x40, CX
367 ADDQ BX, CX
368 VMOVDQU64 (CX), Z0
369 VPXORD Z19, Z0, Z2
370 VPSHUFD $0x31, Z2, Z3
371 VPMULUDQ Z2, Z3, Z2
372 VPSHUFD $0x4e, Z0, Z0
373 VPADDQ Z1, Z0, Z1
374 VPADDQ Z1, Z2, Z1
375
376return:
377 VMOVDQU64 Z1, (AX)
378 VZEROUPPER
379 RET
View as plain text