1#include "llvm_blake3_prefix.h"
2
3.intel_syntax noprefix
4
5.global _blake3_hash_many_avx512
6.global blake3_hash_many_avx512
7.global blake3_compress_in_place_avx512
8.global _blake3_compress_in_place_avx512
9.global blake3_compress_xof_avx512
10.global _blake3_compress_xof_avx512
11
12.section .text
13.p2align 6
14_blake3_hash_many_avx512:
15blake3_hash_many_avx512:
16 push r15
17 push r14
18 push r13
19 push r12
20 push rdi
21 push rsi
22 push rbx
23 push rbp
24 mov rbp, rsp
25 sub rsp, 304
26 and rsp, 0xFFFFFFFFFFFFFFC0
27 vmovdqa xmmword ptr [rsp+0x90], xmm6
28 vmovdqa xmmword ptr [rsp+0xA0], xmm7
29 vmovdqa xmmword ptr [rsp+0xB0], xmm8
30 vmovdqa xmmword ptr [rsp+0xC0], xmm9
31 vmovdqa xmmword ptr [rsp+0xD0], xmm10
32 vmovdqa xmmword ptr [rsp+0xE0], xmm11
33 vmovdqa xmmword ptr [rsp+0xF0], xmm12
34 vmovdqa xmmword ptr [rsp+0x100], xmm13
35 vmovdqa xmmword ptr [rsp+0x110], xmm14
36 vmovdqa xmmword ptr [rsp+0x120], xmm15
37 mov rdi, rcx
38 mov rsi, rdx
39 mov rdx, r8
40 mov rcx, r9
41 mov r8, qword ptr [rbp+0x68]
42 movzx r9, byte ptr [rbp+0x70]
43 neg r9
44 kmovw k1, r9d
45 vmovd xmm0, r8d
46 vpbroadcastd ymm0, xmm0
47 shr r8, 32
48 vmovd xmm1, r8d
49 vpbroadcastd ymm1, xmm1
50 vmovdqa ymm4, ymm1
51 vmovdqa ymm5, ymm1
52 vpaddd ymm2, ymm0, ymmword ptr [ADD0+rip]
53 vpaddd ymm3, ymm0, ymmword ptr [ADD0+32+rip]
54 vpcmpltud k2, ymm2, ymm0
55 vpcmpltud k3, ymm3, ymm0
56 vpaddd ymm4 {k2}, ymm4, dword ptr [ADD1+rip] {1to8}
57 vpaddd ymm5 {k3}, ymm5, dword ptr [ADD1+rip] {1to8}
58 knotw k2, k1
59 vmovdqa32 ymm2 {k2}, ymm0
60 vmovdqa32 ymm3 {k2}, ymm0
61 vmovdqa32 ymm4 {k2}, ymm1
62 vmovdqa32 ymm5 {k2}, ymm1
63 vmovdqa ymmword ptr [rsp], ymm2
64 vmovdqa ymmword ptr [rsp+0x20], ymm3
65 vmovdqa ymmword ptr [rsp+0x40], ymm4
66 vmovdqa ymmword ptr [rsp+0x60], ymm5
67 shl rdx, 6
68 mov qword ptr [rsp+0x80], rdx
69 cmp rsi, 16
70 jc 3f
712:
72 vpbroadcastd zmm0, dword ptr [rcx]
73 vpbroadcastd zmm1, dword ptr [rcx+0x1*0x4]
74 vpbroadcastd zmm2, dword ptr [rcx+0x2*0x4]
75 vpbroadcastd zmm3, dword ptr [rcx+0x3*0x4]
76 vpbroadcastd zmm4, dword ptr [rcx+0x4*0x4]
77 vpbroadcastd zmm5, dword ptr [rcx+0x5*0x4]
78 vpbroadcastd zmm6, dword ptr [rcx+0x6*0x4]
79 vpbroadcastd zmm7, dword ptr [rcx+0x7*0x4]
80 movzx eax, byte ptr [rbp+0x78]
81 movzx ebx, byte ptr [rbp+0x80]
82 or eax, ebx
83 xor edx, edx
84.p2align 5
859:
86 movzx ebx, byte ptr [rbp+0x88]
87 or ebx, eax
88 add rdx, 64
89 cmp rdx, qword ptr [rsp+0x80]
90 cmove eax, ebx
91 mov dword ptr [rsp+0x88], eax
92 mov r8, qword ptr [rdi]
93 mov r9, qword ptr [rdi+0x8]
94 mov r10, qword ptr [rdi+0x10]
95 mov r11, qword ptr [rdi+0x18]
96 mov r12, qword ptr [rdi+0x40]
97 mov r13, qword ptr [rdi+0x48]
98 mov r14, qword ptr [rdi+0x50]
99 mov r15, qword ptr [rdi+0x58]
100 vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
101 vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
102 vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
103 vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
104 vpunpcklqdq zmm8, zmm16, zmm17
105 vpunpckhqdq zmm9, zmm16, zmm17
106 vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
107 vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
108 vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
109 vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
110 vpunpcklqdq zmm10, zmm18, zmm19
111 vpunpckhqdq zmm11, zmm18, zmm19
112 mov r8, qword ptr [rdi+0x20]
113 mov r9, qword ptr [rdi+0x28]
114 mov r10, qword ptr [rdi+0x30]
115 mov r11, qword ptr [rdi+0x38]
116 mov r12, qword ptr [rdi+0x60]
117 mov r13, qword ptr [rdi+0x68]
118 mov r14, qword ptr [rdi+0x70]
119 mov r15, qword ptr [rdi+0x78]
120 vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
121 vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
122 vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
123 vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
124 vpunpcklqdq zmm12, zmm16, zmm17
125 vpunpckhqdq zmm13, zmm16, zmm17
126 vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
127 vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
128 vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
129 vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
130 vpunpcklqdq zmm14, zmm18, zmm19
131 vpunpckhqdq zmm15, zmm18, zmm19
132 vmovdqa32 zmm27, zmmword ptr [INDEX0+rip]
133 vmovdqa32 zmm31, zmmword ptr [INDEX1+rip]
134 vshufps zmm16, zmm8, zmm10, 136
135 vshufps zmm17, zmm12, zmm14, 136
136 vmovdqa32 zmm20, zmm16
137 vpermt2d zmm16, zmm27, zmm17
138 vpermt2d zmm20, zmm31, zmm17
139 vshufps zmm17, zmm8, zmm10, 221
140 vshufps zmm30, zmm12, zmm14, 221
141 vmovdqa32 zmm21, zmm17
142 vpermt2d zmm17, zmm27, zmm30
143 vpermt2d zmm21, zmm31, zmm30
144 vshufps zmm18, zmm9, zmm11, 136
145 vshufps zmm8, zmm13, zmm15, 136
146 vmovdqa32 zmm22, zmm18
147 vpermt2d zmm18, zmm27, zmm8
148 vpermt2d zmm22, zmm31, zmm8
149 vshufps zmm19, zmm9, zmm11, 221
150 vshufps zmm8, zmm13, zmm15, 221
151 vmovdqa32 zmm23, zmm19
152 vpermt2d zmm19, zmm27, zmm8
153 vpermt2d zmm23, zmm31, zmm8
154 mov r8, qword ptr [rdi]
155 mov r9, qword ptr [rdi+0x8]
156 mov r10, qword ptr [rdi+0x10]
157 mov r11, qword ptr [rdi+0x18]
158 mov r12, qword ptr [rdi+0x40]
159 mov r13, qword ptr [rdi+0x48]
160 mov r14, qword ptr [rdi+0x50]
161 mov r15, qword ptr [rdi+0x58]
162 vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
163 vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
164 vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
165 vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
166 vpunpcklqdq zmm8, zmm24, zmm25
167 vpunpckhqdq zmm9, zmm24, zmm25
168 vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
169 vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
170 vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
171 vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
172 vpunpcklqdq zmm10, zmm24, zmm25
173 vpunpckhqdq zmm11, zmm24, zmm25
174 prefetcht0 [r8+rdx+0x80]
175 prefetcht0 [r12+rdx+0x80]
176 prefetcht0 [r9+rdx+0x80]
177 prefetcht0 [r13+rdx+0x80]
178 prefetcht0 [r10+rdx+0x80]
179 prefetcht0 [r14+rdx+0x80]
180 prefetcht0 [r11+rdx+0x80]
181 prefetcht0 [r15+rdx+0x80]
182 mov r8, qword ptr [rdi+0x20]
183 mov r9, qword ptr [rdi+0x28]
184 mov r10, qword ptr [rdi+0x30]
185 mov r11, qword ptr [rdi+0x38]
186 mov r12, qword ptr [rdi+0x60]
187 mov r13, qword ptr [rdi+0x68]
188 mov r14, qword ptr [rdi+0x70]
189 mov r15, qword ptr [rdi+0x78]
190 vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
191 vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
192 vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
193 vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
194 vpunpcklqdq zmm12, zmm24, zmm25
195 vpunpckhqdq zmm13, zmm24, zmm25
196 vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
197 vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
198 vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
199 vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
200 vpunpcklqdq zmm14, zmm24, zmm25
201 vpunpckhqdq zmm15, zmm24, zmm25
202 prefetcht0 [r8+rdx+0x80]
203 prefetcht0 [r12+rdx+0x80]
204 prefetcht0 [r9+rdx+0x80]
205 prefetcht0 [r13+rdx+0x80]
206 prefetcht0 [r10+rdx+0x80]
207 prefetcht0 [r14+rdx+0x80]
208 prefetcht0 [r11+rdx+0x80]
209 prefetcht0 [r15+rdx+0x80]
210 vshufps zmm24, zmm8, zmm10, 136
211 vshufps zmm30, zmm12, zmm14, 136
212 vmovdqa32 zmm28, zmm24
213 vpermt2d zmm24, zmm27, zmm30
214 vpermt2d zmm28, zmm31, zmm30
215 vshufps zmm25, zmm8, zmm10, 221
216 vshufps zmm30, zmm12, zmm14, 221
217 vmovdqa32 zmm29, zmm25
218 vpermt2d zmm25, zmm27, zmm30
219 vpermt2d zmm29, zmm31, zmm30
220 vshufps zmm26, zmm9, zmm11, 136
221 vshufps zmm8, zmm13, zmm15, 136
222 vmovdqa32 zmm30, zmm26
223 vpermt2d zmm26, zmm27, zmm8
224 vpermt2d zmm30, zmm31, zmm8
225 vshufps zmm8, zmm9, zmm11, 221
226 vshufps zmm10, zmm13, zmm15, 221
227 vpermi2d zmm27, zmm8, zmm10
228 vpermi2d zmm31, zmm8, zmm10
229 vpbroadcastd zmm8, dword ptr [BLAKE3_IV_0+rip]
230 vpbroadcastd zmm9, dword ptr [BLAKE3_IV_1+rip]
231 vpbroadcastd zmm10, dword ptr [BLAKE3_IV_2+rip]
232 vpbroadcastd zmm11, dword ptr [BLAKE3_IV_3+rip]
233 vmovdqa32 zmm12, zmmword ptr [rsp]
234 vmovdqa32 zmm13, zmmword ptr [rsp+0x1*0x40]
235 vpbroadcastd zmm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
236 vpbroadcastd zmm15, dword ptr [rsp+0x22*0x4]
237 vpaddd zmm0, zmm0, zmm16
238 vpaddd zmm1, zmm1, zmm18
239 vpaddd zmm2, zmm2, zmm20
240 vpaddd zmm3, zmm3, zmm22
241 vpaddd zmm0, zmm0, zmm4
242 vpaddd zmm1, zmm1, zmm5
243 vpaddd zmm2, zmm2, zmm6
244 vpaddd zmm3, zmm3, zmm7
245 vpxord zmm12, zmm12, zmm0
246 vpxord zmm13, zmm13, zmm1
247 vpxord zmm14, zmm14, zmm2
248 vpxord zmm15, zmm15, zmm3
249 vprord zmm12, zmm12, 16
250 vprord zmm13, zmm13, 16
251 vprord zmm14, zmm14, 16
252 vprord zmm15, zmm15, 16
253 vpaddd zmm8, zmm8, zmm12
254 vpaddd zmm9, zmm9, zmm13
255 vpaddd zmm10, zmm10, zmm14
256 vpaddd zmm11, zmm11, zmm15
257 vpxord zmm4, zmm4, zmm8
258 vpxord zmm5, zmm5, zmm9
259 vpxord zmm6, zmm6, zmm10
260 vpxord zmm7, zmm7, zmm11
261 vprord zmm4, zmm4, 12
262 vprord zmm5, zmm5, 12
263 vprord zmm6, zmm6, 12
264 vprord zmm7, zmm7, 12
265 vpaddd zmm0, zmm0, zmm17
266 vpaddd zmm1, zmm1, zmm19
267 vpaddd zmm2, zmm2, zmm21
268 vpaddd zmm3, zmm3, zmm23
269 vpaddd zmm0, zmm0, zmm4
270 vpaddd zmm1, zmm1, zmm5
271 vpaddd zmm2, zmm2, zmm6
272 vpaddd zmm3, zmm3, zmm7
273 vpxord zmm12, zmm12, zmm0
274 vpxord zmm13, zmm13, zmm1
275 vpxord zmm14, zmm14, zmm2
276 vpxord zmm15, zmm15, zmm3
277 vprord zmm12, zmm12, 8
278 vprord zmm13, zmm13, 8
279 vprord zmm14, zmm14, 8
280 vprord zmm15, zmm15, 8
281 vpaddd zmm8, zmm8, zmm12
282 vpaddd zmm9, zmm9, zmm13
283 vpaddd zmm10, zmm10, zmm14
284 vpaddd zmm11, zmm11, zmm15
285 vpxord zmm4, zmm4, zmm8
286 vpxord zmm5, zmm5, zmm9
287 vpxord zmm6, zmm6, zmm10
288 vpxord zmm7, zmm7, zmm11
289 vprord zmm4, zmm4, 7
290 vprord zmm5, zmm5, 7
291 vprord zmm6, zmm6, 7
292 vprord zmm7, zmm7, 7
293 vpaddd zmm0, zmm0, zmm24
294 vpaddd zmm1, zmm1, zmm26
295 vpaddd zmm2, zmm2, zmm28
296 vpaddd zmm3, zmm3, zmm30
297 vpaddd zmm0, zmm0, zmm5
298 vpaddd zmm1, zmm1, zmm6
299 vpaddd zmm2, zmm2, zmm7
300 vpaddd zmm3, zmm3, zmm4
301 vpxord zmm15, zmm15, zmm0
302 vpxord zmm12, zmm12, zmm1
303 vpxord zmm13, zmm13, zmm2
304 vpxord zmm14, zmm14, zmm3
305 vprord zmm15, zmm15, 16
306 vprord zmm12, zmm12, 16
307 vprord zmm13, zmm13, 16
308 vprord zmm14, zmm14, 16
309 vpaddd zmm10, zmm10, zmm15
310 vpaddd zmm11, zmm11, zmm12
311 vpaddd zmm8, zmm8, zmm13
312 vpaddd zmm9, zmm9, zmm14
313 vpxord zmm5, zmm5, zmm10
314 vpxord zmm6, zmm6, zmm11
315 vpxord zmm7, zmm7, zmm8
316 vpxord zmm4, zmm4, zmm9
317 vprord zmm5, zmm5, 12
318 vprord zmm6, zmm6, 12
319 vprord zmm7, zmm7, 12
320 vprord zmm4, zmm4, 12
321 vpaddd zmm0, zmm0, zmm25
322 vpaddd zmm1, zmm1, zmm27
323 vpaddd zmm2, zmm2, zmm29
324 vpaddd zmm3, zmm3, zmm31
325 vpaddd zmm0, zmm0, zmm5
326 vpaddd zmm1, zmm1, zmm6
327 vpaddd zmm2, zmm2, zmm7
328 vpaddd zmm3, zmm3, zmm4
329 vpxord zmm15, zmm15, zmm0
330 vpxord zmm12, zmm12, zmm1
331 vpxord zmm13, zmm13, zmm2
332 vpxord zmm14, zmm14, zmm3
333 vprord zmm15, zmm15, 8
334 vprord zmm12, zmm12, 8
335 vprord zmm13, zmm13, 8
336 vprord zmm14, zmm14, 8
337 vpaddd zmm10, zmm10, zmm15
338 vpaddd zmm11, zmm11, zmm12
339 vpaddd zmm8, zmm8, zmm13
340 vpaddd zmm9, zmm9, zmm14
341 vpxord zmm5, zmm5, zmm10
342 vpxord zmm6, zmm6, zmm11
343 vpxord zmm7, zmm7, zmm8
344 vpxord zmm4, zmm4, zmm9
345 vprord zmm5, zmm5, 7
346 vprord zmm6, zmm6, 7
347 vprord zmm7, zmm7, 7
348 vprord zmm4, zmm4, 7
349 vpaddd zmm0, zmm0, zmm18
350 vpaddd zmm1, zmm1, zmm19
351 vpaddd zmm2, zmm2, zmm23
352 vpaddd zmm3, zmm3, zmm20
353 vpaddd zmm0, zmm0, zmm4
354 vpaddd zmm1, zmm1, zmm5
355 vpaddd zmm2, zmm2, zmm6
356 vpaddd zmm3, zmm3, zmm7
357 vpxord zmm12, zmm12, zmm0
358 vpxord zmm13, zmm13, zmm1
359 vpxord zmm14, zmm14, zmm2
360 vpxord zmm15, zmm15, zmm3
361 vprord zmm12, zmm12, 16
362 vprord zmm13, zmm13, 16
363 vprord zmm14, zmm14, 16
364 vprord zmm15, zmm15, 16
365 vpaddd zmm8, zmm8, zmm12
366 vpaddd zmm9, zmm9, zmm13
367 vpaddd zmm10, zmm10, zmm14
368 vpaddd zmm11, zmm11, zmm15
369 vpxord zmm4, zmm4, zmm8
370 vpxord zmm5, zmm5, zmm9
371 vpxord zmm6, zmm6, zmm10
372 vpxord zmm7, zmm7, zmm11
373 vprord zmm4, zmm4, 12
374 vprord zmm5, zmm5, 12
375 vprord zmm6, zmm6, 12
376 vprord zmm7, zmm7, 12
377 vpaddd zmm0, zmm0, zmm22
378 vpaddd zmm1, zmm1, zmm26
379 vpaddd zmm2, zmm2, zmm16
380 vpaddd zmm3, zmm3, zmm29
381 vpaddd zmm0, zmm0, zmm4
382 vpaddd zmm1, zmm1, zmm5
383 vpaddd zmm2, zmm2, zmm6
384 vpaddd zmm3, zmm3, zmm7
385 vpxord zmm12, zmm12, zmm0
386 vpxord zmm13, zmm13, zmm1
387 vpxord zmm14, zmm14, zmm2
388 vpxord zmm15, zmm15, zmm3
389 vprord zmm12, zmm12, 8
390 vprord zmm13, zmm13, 8
391 vprord zmm14, zmm14, 8
392 vprord zmm15, zmm15, 8
393 vpaddd zmm8, zmm8, zmm12
394 vpaddd zmm9, zmm9, zmm13
395 vpaddd zmm10, zmm10, zmm14
396 vpaddd zmm11, zmm11, zmm15
397 vpxord zmm4, zmm4, zmm8
398 vpxord zmm5, zmm5, zmm9
399 vpxord zmm6, zmm6, zmm10
400 vpxord zmm7, zmm7, zmm11
401 vprord zmm4, zmm4, 7
402 vprord zmm5, zmm5, 7
403 vprord zmm6, zmm6, 7
404 vprord zmm7, zmm7, 7
405 vpaddd zmm0, zmm0, zmm17
406 vpaddd zmm1, zmm1, zmm28
407 vpaddd zmm2, zmm2, zmm25
408 vpaddd zmm3, zmm3, zmm31
409 vpaddd zmm0, zmm0, zmm5
410 vpaddd zmm1, zmm1, zmm6
411 vpaddd zmm2, zmm2, zmm7
412 vpaddd zmm3, zmm3, zmm4
413 vpxord zmm15, zmm15, zmm0
414 vpxord zmm12, zmm12, zmm1
415 vpxord zmm13, zmm13, zmm2
416 vpxord zmm14, zmm14, zmm3
417 vprord zmm15, zmm15, 16
418 vprord zmm12, zmm12, 16
419 vprord zmm13, zmm13, 16
420 vprord zmm14, zmm14, 16
421 vpaddd zmm10, zmm10, zmm15
422 vpaddd zmm11, zmm11, zmm12
423 vpaddd zmm8, zmm8, zmm13
424 vpaddd zmm9, zmm9, zmm14
425 vpxord zmm5, zmm5, zmm10
426 vpxord zmm6, zmm6, zmm11
427 vpxord zmm7, zmm7, zmm8
428 vpxord zmm4, zmm4, zmm9
429 vprord zmm5, zmm5, 12
430 vprord zmm6, zmm6, 12
431 vprord zmm7, zmm7, 12
432 vprord zmm4, zmm4, 12
433 vpaddd zmm0, zmm0, zmm27
434 vpaddd zmm1, zmm1, zmm21
435 vpaddd zmm2, zmm2, zmm30
436 vpaddd zmm3, zmm3, zmm24
437 vpaddd zmm0, zmm0, zmm5
438 vpaddd zmm1, zmm1, zmm6
439 vpaddd zmm2, zmm2, zmm7
440 vpaddd zmm3, zmm3, zmm4
441 vpxord zmm15, zmm15, zmm0
442 vpxord zmm12, zmm12, zmm1
443 vpxord zmm13, zmm13, zmm2
444 vpxord zmm14, zmm14, zmm3
445 vprord zmm15, zmm15, 8
446 vprord zmm12, zmm12, 8
447 vprord zmm13, zmm13, 8
448 vprord zmm14, zmm14, 8
449 vpaddd zmm10, zmm10, zmm15
450 vpaddd zmm11, zmm11, zmm12
451 vpaddd zmm8, zmm8, zmm13
452 vpaddd zmm9, zmm9, zmm14
453 vpxord zmm5, zmm5, zmm10
454 vpxord zmm6, zmm6, zmm11
455 vpxord zmm7, zmm7, zmm8
456 vpxord zmm4, zmm4, zmm9
457 vprord zmm5, zmm5, 7
458 vprord zmm6, zmm6, 7
459 vprord zmm7, zmm7, 7
460 vprord zmm4, zmm4, 7
461 vpaddd zmm0, zmm0, zmm19
462 vpaddd zmm1, zmm1, zmm26
463 vpaddd zmm2, zmm2, zmm29
464 vpaddd zmm3, zmm3, zmm23
465 vpaddd zmm0, zmm0, zmm4
466 vpaddd zmm1, zmm1, zmm5
467 vpaddd zmm2, zmm2, zmm6
468 vpaddd zmm3, zmm3, zmm7
469 vpxord zmm12, zmm12, zmm0
470 vpxord zmm13, zmm13, zmm1
471 vpxord zmm14, zmm14, zmm2
472 vpxord zmm15, zmm15, zmm3
473 vprord zmm12, zmm12, 16
474 vprord zmm13, zmm13, 16
475 vprord zmm14, zmm14, 16
476 vprord zmm15, zmm15, 16
477 vpaddd zmm8, zmm8, zmm12
478 vpaddd zmm9, zmm9, zmm13
479 vpaddd zmm10, zmm10, zmm14
480 vpaddd zmm11, zmm11, zmm15
481 vpxord zmm4, zmm4, zmm8
482 vpxord zmm5, zmm5, zmm9
483 vpxord zmm6, zmm6, zmm10
484 vpxord zmm7, zmm7, zmm11
485 vprord zmm4, zmm4, 12
486 vprord zmm5, zmm5, 12
487 vprord zmm6, zmm6, 12
488 vprord zmm7, zmm7, 12
489 vpaddd zmm0, zmm0, zmm20
490 vpaddd zmm1, zmm1, zmm28
491 vpaddd zmm2, zmm2, zmm18
492 vpaddd zmm3, zmm3, zmm30
493 vpaddd zmm0, zmm0, zmm4
494 vpaddd zmm1, zmm1, zmm5
495 vpaddd zmm2, zmm2, zmm6
496 vpaddd zmm3, zmm3, zmm7
497 vpxord zmm12, zmm12, zmm0
498 vpxord zmm13, zmm13, zmm1
499 vpxord zmm14, zmm14, zmm2
500 vpxord zmm15, zmm15, zmm3
501 vprord zmm12, zmm12, 8
502 vprord zmm13, zmm13, 8
503 vprord zmm14, zmm14, 8
504 vprord zmm15, zmm15, 8
505 vpaddd zmm8, zmm8, zmm12
506 vpaddd zmm9, zmm9, zmm13
507 vpaddd zmm10, zmm10, zmm14
508 vpaddd zmm11, zmm11, zmm15
509 vpxord zmm4, zmm4, zmm8
510 vpxord zmm5, zmm5, zmm9
511 vpxord zmm6, zmm6, zmm10
512 vpxord zmm7, zmm7, zmm11
513 vprord zmm4, zmm4, 7
514 vprord zmm5, zmm5, 7
515 vprord zmm6, zmm6, 7
516 vprord zmm7, zmm7, 7
517 vpaddd zmm0, zmm0, zmm22
518 vpaddd zmm1, zmm1, zmm25
519 vpaddd zmm2, zmm2, zmm27
520 vpaddd zmm3, zmm3, zmm24
521 vpaddd zmm0, zmm0, zmm5
522 vpaddd zmm1, zmm1, zmm6
523 vpaddd zmm2, zmm2, zmm7
524 vpaddd zmm3, zmm3, zmm4
525 vpxord zmm15, zmm15, zmm0
526 vpxord zmm12, zmm12, zmm1
527 vpxord zmm13, zmm13, zmm2
528 vpxord zmm14, zmm14, zmm3
529 vprord zmm15, zmm15, 16
530 vprord zmm12, zmm12, 16
531 vprord zmm13, zmm13, 16
532 vprord zmm14, zmm14, 16
533 vpaddd zmm10, zmm10, zmm15
534 vpaddd zmm11, zmm11, zmm12
535 vpaddd zmm8, zmm8, zmm13
536 vpaddd zmm9, zmm9, zmm14
537 vpxord zmm5, zmm5, zmm10
538 vpxord zmm6, zmm6, zmm11
539 vpxord zmm7, zmm7, zmm8
540 vpxord zmm4, zmm4, zmm9
541 vprord zmm5, zmm5, 12
542 vprord zmm6, zmm6, 12
543 vprord zmm7, zmm7, 12
544 vprord zmm4, zmm4, 12
545 vpaddd zmm0, zmm0, zmm21
546 vpaddd zmm1, zmm1, zmm16
547 vpaddd zmm2, zmm2, zmm31
548 vpaddd zmm3, zmm3, zmm17
549 vpaddd zmm0, zmm0, zmm5
550 vpaddd zmm1, zmm1, zmm6
551 vpaddd zmm2, zmm2, zmm7
552 vpaddd zmm3, zmm3, zmm4
553 vpxord zmm15, zmm15, zmm0
554 vpxord zmm12, zmm12, zmm1
555 vpxord zmm13, zmm13, zmm2
556 vpxord zmm14, zmm14, zmm3
557 vprord zmm15, zmm15, 8
558 vprord zmm12, zmm12, 8
559 vprord zmm13, zmm13, 8
560 vprord zmm14, zmm14, 8
561 vpaddd zmm10, zmm10, zmm15
562 vpaddd zmm11, zmm11, zmm12
563 vpaddd zmm8, zmm8, zmm13
564 vpaddd zmm9, zmm9, zmm14
565 vpxord zmm5, zmm5, zmm10
566 vpxord zmm6, zmm6, zmm11
567 vpxord zmm7, zmm7, zmm8
568 vpxord zmm4, zmm4, zmm9
569 vprord zmm5, zmm5, 7
570 vprord zmm6, zmm6, 7
571 vprord zmm7, zmm7, 7
572 vprord zmm4, zmm4, 7
573 vpaddd zmm0, zmm0, zmm26
574 vpaddd zmm1, zmm1, zmm28
575 vpaddd zmm2, zmm2, zmm30
576 vpaddd zmm3, zmm3, zmm29
577 vpaddd zmm0, zmm0, zmm4
578 vpaddd zmm1, zmm1, zmm5
579 vpaddd zmm2, zmm2, zmm6
580 vpaddd zmm3, zmm3, zmm7
581 vpxord zmm12, zmm12, zmm0
582 vpxord zmm13, zmm13, zmm1
583 vpxord zmm14, zmm14, zmm2
584 vpxord zmm15, zmm15, zmm3
585 vprord zmm12, zmm12, 16
586 vprord zmm13, zmm13, 16
587 vprord zmm14, zmm14, 16
588 vprord zmm15, zmm15, 16
589 vpaddd zmm8, zmm8, zmm12
590 vpaddd zmm9, zmm9, zmm13
591 vpaddd zmm10, zmm10, zmm14
592 vpaddd zmm11, zmm11, zmm15
593 vpxord zmm4, zmm4, zmm8
594 vpxord zmm5, zmm5, zmm9
595 vpxord zmm6, zmm6, zmm10
596 vpxord zmm7, zmm7, zmm11
597 vprord zmm4, zmm4, 12
598 vprord zmm5, zmm5, 12
599 vprord zmm6, zmm6, 12
600 vprord zmm7, zmm7, 12
601 vpaddd zmm0, zmm0, zmm23
602 vpaddd zmm1, zmm1, zmm25
603 vpaddd zmm2, zmm2, zmm19
604 vpaddd zmm3, zmm3, zmm31
605 vpaddd zmm0, zmm0, zmm4
606 vpaddd zmm1, zmm1, zmm5
607 vpaddd zmm2, zmm2, zmm6
608 vpaddd zmm3, zmm3, zmm7
609 vpxord zmm12, zmm12, zmm0
610 vpxord zmm13, zmm13, zmm1
611 vpxord zmm14, zmm14, zmm2
612 vpxord zmm15, zmm15, zmm3
613 vprord zmm12, zmm12, 8
614 vprord zmm13, zmm13, 8
615 vprord zmm14, zmm14, 8
616 vprord zmm15, zmm15, 8
617 vpaddd zmm8, zmm8, zmm12
618 vpaddd zmm9, zmm9, zmm13
619 vpaddd zmm10, zmm10, zmm14
620 vpaddd zmm11, zmm11, zmm15
621 vpxord zmm4, zmm4, zmm8
622 vpxord zmm5, zmm5, zmm9
623 vpxord zmm6, zmm6, zmm10
624 vpxord zmm7, zmm7, zmm11
625 vprord zmm4, zmm4, 7
626 vprord zmm5, zmm5, 7
627 vprord zmm6, zmm6, 7
628 vprord zmm7, zmm7, 7
629 vpaddd zmm0, zmm0, zmm20
630 vpaddd zmm1, zmm1, zmm27
631 vpaddd zmm2, zmm2, zmm21
632 vpaddd zmm3, zmm3, zmm17
633 vpaddd zmm0, zmm0, zmm5
634 vpaddd zmm1, zmm1, zmm6
635 vpaddd zmm2, zmm2, zmm7
636 vpaddd zmm3, zmm3, zmm4
637 vpxord zmm15, zmm15, zmm0
638 vpxord zmm12, zmm12, zmm1
639 vpxord zmm13, zmm13, zmm2
640 vpxord zmm14, zmm14, zmm3
641 vprord zmm15, zmm15, 16
642 vprord zmm12, zmm12, 16
643 vprord zmm13, zmm13, 16
644 vprord zmm14, zmm14, 16
645 vpaddd zmm10, zmm10, zmm15
646 vpaddd zmm11, zmm11, zmm12
647 vpaddd zmm8, zmm8, zmm13
648 vpaddd zmm9, zmm9, zmm14
649 vpxord zmm5, zmm5, zmm10
650 vpxord zmm6, zmm6, zmm11
651 vpxord zmm7, zmm7, zmm8
652 vpxord zmm4, zmm4, zmm9
653 vprord zmm5, zmm5, 12
654 vprord zmm6, zmm6, 12
655 vprord zmm7, zmm7, 12
656 vprord zmm4, zmm4, 12
657 vpaddd zmm0, zmm0, zmm16
658 vpaddd zmm1, zmm1, zmm18
659 vpaddd zmm2, zmm2, zmm24
660 vpaddd zmm3, zmm3, zmm22
661 vpaddd zmm0, zmm0, zmm5
662 vpaddd zmm1, zmm1, zmm6
663 vpaddd zmm2, zmm2, zmm7
664 vpaddd zmm3, zmm3, zmm4
665 vpxord zmm15, zmm15, zmm0
666 vpxord zmm12, zmm12, zmm1
667 vpxord zmm13, zmm13, zmm2
668 vpxord zmm14, zmm14, zmm3
669 vprord zmm15, zmm15, 8
670 vprord zmm12, zmm12, 8
671 vprord zmm13, zmm13, 8
672 vprord zmm14, zmm14, 8
673 vpaddd zmm10, zmm10, zmm15
674 vpaddd zmm11, zmm11, zmm12
675 vpaddd zmm8, zmm8, zmm13
676 vpaddd zmm9, zmm9, zmm14
677 vpxord zmm5, zmm5, zmm10
678 vpxord zmm6, zmm6, zmm11
679 vpxord zmm7, zmm7, zmm8
680 vpxord zmm4, zmm4, zmm9
681 vprord zmm5, zmm5, 7
682 vprord zmm6, zmm6, 7
683 vprord zmm7, zmm7, 7
684 vprord zmm4, zmm4, 7
685 vpaddd zmm0, zmm0, zmm28
686 vpaddd zmm1, zmm1, zmm25
687 vpaddd zmm2, zmm2, zmm31
688 vpaddd zmm3, zmm3, zmm30
689 vpaddd zmm0, zmm0, zmm4
690 vpaddd zmm1, zmm1, zmm5
691 vpaddd zmm2, zmm2, zmm6
692 vpaddd zmm3, zmm3, zmm7
693 vpxord zmm12, zmm12, zmm0
694 vpxord zmm13, zmm13, zmm1
695 vpxord zmm14, zmm14, zmm2
696 vpxord zmm15, zmm15, zmm3
697 vprord zmm12, zmm12, 16
698 vprord zmm13, zmm13, 16
699 vprord zmm14, zmm14, 16
700 vprord zmm15, zmm15, 16
701 vpaddd zmm8, zmm8, zmm12
702 vpaddd zmm9, zmm9, zmm13
703 vpaddd zmm10, zmm10, zmm14
704 vpaddd zmm11, zmm11, zmm15
705 vpxord zmm4, zmm4, zmm8
706 vpxord zmm5, zmm5, zmm9
707 vpxord zmm6, zmm6, zmm10
708 vpxord zmm7, zmm7, zmm11
709 vprord zmm4, zmm4, 12
710 vprord zmm5, zmm5, 12
711 vprord zmm6, zmm6, 12
712 vprord zmm7, zmm7, 12
713 vpaddd zmm0, zmm0, zmm29
714 vpaddd zmm1, zmm1, zmm27
715 vpaddd zmm2, zmm2, zmm26
716 vpaddd zmm3, zmm3, zmm24
717 vpaddd zmm0, zmm0, zmm4
718 vpaddd zmm1, zmm1, zmm5
719 vpaddd zmm2, zmm2, zmm6
720 vpaddd zmm3, zmm3, zmm7
721 vpxord zmm12, zmm12, zmm0
722 vpxord zmm13, zmm13, zmm1
723 vpxord zmm14, zmm14, zmm2
724 vpxord zmm15, zmm15, zmm3
725 vprord zmm12, zmm12, 8
726 vprord zmm13, zmm13, 8
727 vprord zmm14, zmm14, 8
728 vprord zmm15, zmm15, 8
729 vpaddd zmm8, zmm8, zmm12
730 vpaddd zmm9, zmm9, zmm13
731 vpaddd zmm10, zmm10, zmm14
732 vpaddd zmm11, zmm11, zmm15
733 vpxord zmm4, zmm4, zmm8
734 vpxord zmm5, zmm5, zmm9
735 vpxord zmm6, zmm6, zmm10
736 vpxord zmm7, zmm7, zmm11
737 vprord zmm4, zmm4, 7
738 vprord zmm5, zmm5, 7
739 vprord zmm6, zmm6, 7
740 vprord zmm7, zmm7, 7
741 vpaddd zmm0, zmm0, zmm23
742 vpaddd zmm1, zmm1, zmm21
743 vpaddd zmm2, zmm2, zmm16
744 vpaddd zmm3, zmm3, zmm22
745 vpaddd zmm0, zmm0, zmm5
746 vpaddd zmm1, zmm1, zmm6
747 vpaddd zmm2, zmm2, zmm7
748 vpaddd zmm3, zmm3, zmm4
749 vpxord zmm15, zmm15, zmm0
750 vpxord zmm12, zmm12, zmm1
751 vpxord zmm13, zmm13, zmm2
752 vpxord zmm14, zmm14, zmm3
753 vprord zmm15, zmm15, 16
754 vprord zmm12, zmm12, 16
755 vprord zmm13, zmm13, 16
756 vprord zmm14, zmm14, 16
757 vpaddd zmm10, zmm10, zmm15
758 vpaddd zmm11, zmm11, zmm12
759 vpaddd zmm8, zmm8, zmm13
760 vpaddd zmm9, zmm9, zmm14
761 vpxord zmm5, zmm5, zmm10
762 vpxord zmm6, zmm6, zmm11
763 vpxord zmm7, zmm7, zmm8
764 vpxord zmm4, zmm4, zmm9
765 vprord zmm5, zmm5, 12
766 vprord zmm6, zmm6, 12
767 vprord zmm7, zmm7, 12
768 vprord zmm4, zmm4, 12
769 vpaddd zmm0, zmm0, zmm18
770 vpaddd zmm1, zmm1, zmm19
771 vpaddd zmm2, zmm2, zmm17
772 vpaddd zmm3, zmm3, zmm20
773 vpaddd zmm0, zmm0, zmm5
774 vpaddd zmm1, zmm1, zmm6
775 vpaddd zmm2, zmm2, zmm7
776 vpaddd zmm3, zmm3, zmm4
777 vpxord zmm15, zmm15, zmm0
778 vpxord zmm12, zmm12, zmm1
779 vpxord zmm13, zmm13, zmm2
780 vpxord zmm14, zmm14, zmm3
781 vprord zmm15, zmm15, 8
782 vprord zmm12, zmm12, 8
783 vprord zmm13, zmm13, 8
784 vprord zmm14, zmm14, 8
785 vpaddd zmm10, zmm10, zmm15
786 vpaddd zmm11, zmm11, zmm12
787 vpaddd zmm8, zmm8, zmm13
788 vpaddd zmm9, zmm9, zmm14
789 vpxord zmm5, zmm5, zmm10
790 vpxord zmm6, zmm6, zmm11
791 vpxord zmm7, zmm7, zmm8
792 vpxord zmm4, zmm4, zmm9
793 vprord zmm5, zmm5, 7
794 vprord zmm6, zmm6, 7
795 vprord zmm7, zmm7, 7
796 vprord zmm4, zmm4, 7
797 vpaddd zmm0, zmm0, zmm25
798 vpaddd zmm1, zmm1, zmm27
799 vpaddd zmm2, zmm2, zmm24
800 vpaddd zmm3, zmm3, zmm31
801 vpaddd zmm0, zmm0, zmm4
802 vpaddd zmm1, zmm1, zmm5
803 vpaddd zmm2, zmm2, zmm6
804 vpaddd zmm3, zmm3, zmm7
805 vpxord zmm12, zmm12, zmm0
806 vpxord zmm13, zmm13, zmm1
807 vpxord zmm14, zmm14, zmm2
808 vpxord zmm15, zmm15, zmm3
809 vprord zmm12, zmm12, 16
810 vprord zmm13, zmm13, 16
811 vprord zmm14, zmm14, 16
812 vprord zmm15, zmm15, 16
813 vpaddd zmm8, zmm8, zmm12
814 vpaddd zmm9, zmm9, zmm13
815 vpaddd zmm10, zmm10, zmm14
816 vpaddd zmm11, zmm11, zmm15
817 vpxord zmm4, zmm4, zmm8
818 vpxord zmm5, zmm5, zmm9
819 vpxord zmm6, zmm6, zmm10
820 vpxord zmm7, zmm7, zmm11
821 vprord zmm4, zmm4, 12
822 vprord zmm5, zmm5, 12
823 vprord zmm6, zmm6, 12
824 vprord zmm7, zmm7, 12
825 vpaddd zmm0, zmm0, zmm30
826 vpaddd zmm1, zmm1, zmm21
827 vpaddd zmm2, zmm2, zmm28
828 vpaddd zmm3, zmm3, zmm17
829 vpaddd zmm0, zmm0, zmm4
830 vpaddd zmm1, zmm1, zmm5
831 vpaddd zmm2, zmm2, zmm6
832 vpaddd zmm3, zmm3, zmm7
833 vpxord zmm12, zmm12, zmm0
834 vpxord zmm13, zmm13, zmm1
835 vpxord zmm14, zmm14, zmm2
836 vpxord zmm15, zmm15, zmm3
837 vprord zmm12, zmm12, 8
838 vprord zmm13, zmm13, 8
839 vprord zmm14, zmm14, 8
840 vprord zmm15, zmm15, 8
841 vpaddd zmm8, zmm8, zmm12
842 vpaddd zmm9, zmm9, zmm13
843 vpaddd zmm10, zmm10, zmm14
844 vpaddd zmm11, zmm11, zmm15
845 vpxord zmm4, zmm4, zmm8
846 vpxord zmm5, zmm5, zmm9
847 vpxord zmm6, zmm6, zmm10
848 vpxord zmm7, zmm7, zmm11
849 vprord zmm4, zmm4, 7
850 vprord zmm5, zmm5, 7
851 vprord zmm6, zmm6, 7
852 vprord zmm7, zmm7, 7
853 vpaddd zmm0, zmm0, zmm29
854 vpaddd zmm1, zmm1, zmm16
855 vpaddd zmm2, zmm2, zmm18
856 vpaddd zmm3, zmm3, zmm20
857 vpaddd zmm0, zmm0, zmm5
858 vpaddd zmm1, zmm1, zmm6
859 vpaddd zmm2, zmm2, zmm7
860 vpaddd zmm3, zmm3, zmm4
861 vpxord zmm15, zmm15, zmm0
862 vpxord zmm12, zmm12, zmm1
863 vpxord zmm13, zmm13, zmm2
864 vpxord zmm14, zmm14, zmm3
865 vprord zmm15, zmm15, 16
866 vprord zmm12, zmm12, 16
867 vprord zmm13, zmm13, 16
868 vprord zmm14, zmm14, 16
869 vpaddd zmm10, zmm10, zmm15
870 vpaddd zmm11, zmm11, zmm12
871 vpaddd zmm8, zmm8, zmm13
872 vpaddd zmm9, zmm9, zmm14
873 vpxord zmm5, zmm5, zmm10
874 vpxord zmm6, zmm6, zmm11
875 vpxord zmm7, zmm7, zmm8
876 vpxord zmm4, zmm4, zmm9
877 vprord zmm5, zmm5, 12
878 vprord zmm6, zmm6, 12
879 vprord zmm7, zmm7, 12
880 vprord zmm4, zmm4, 12
881 vpaddd zmm0, zmm0, zmm19
882 vpaddd zmm1, zmm1, zmm26
883 vpaddd zmm2, zmm2, zmm22
884 vpaddd zmm3, zmm3, zmm23
885 vpaddd zmm0, zmm0, zmm5
886 vpaddd zmm1, zmm1, zmm6
887 vpaddd zmm2, zmm2, zmm7
888 vpaddd zmm3, zmm3, zmm4
889 vpxord zmm15, zmm15, zmm0
890 vpxord zmm12, zmm12, zmm1
891 vpxord zmm13, zmm13, zmm2
892 vpxord zmm14, zmm14, zmm3
893 vprord zmm15, zmm15, 8
894 vprord zmm12, zmm12, 8
895 vprord zmm13, zmm13, 8
896 vprord zmm14, zmm14, 8
897 vpaddd zmm10, zmm10, zmm15
898 vpaddd zmm11, zmm11, zmm12
899 vpaddd zmm8, zmm8, zmm13
900 vpaddd zmm9, zmm9, zmm14
901 vpxord zmm5, zmm5, zmm10
902 vpxord zmm6, zmm6, zmm11
903 vpxord zmm7, zmm7, zmm8
904 vpxord zmm4, zmm4, zmm9
905 vprord zmm5, zmm5, 7
906 vprord zmm6, zmm6, 7
907 vprord zmm7, zmm7, 7
908 vprord zmm4, zmm4, 7
909 vpaddd zmm0, zmm0, zmm27
910 vpaddd zmm1, zmm1, zmm21
911 vpaddd zmm2, zmm2, zmm17
912 vpaddd zmm3, zmm3, zmm24
913 vpaddd zmm0, zmm0, zmm4
914 vpaddd zmm1, zmm1, zmm5
915 vpaddd zmm2, zmm2, zmm6
916 vpaddd zmm3, zmm3, zmm7
917 vpxord zmm12, zmm12, zmm0
918 vpxord zmm13, zmm13, zmm1
919 vpxord zmm14, zmm14, zmm2
920 vpxord zmm15, zmm15, zmm3
921 vprord zmm12, zmm12, 16
922 vprord zmm13, zmm13, 16
923 vprord zmm14, zmm14, 16
924 vprord zmm15, zmm15, 16
925 vpaddd zmm8, zmm8, zmm12
926 vpaddd zmm9, zmm9, zmm13
927 vpaddd zmm10, zmm10, zmm14
928 vpaddd zmm11, zmm11, zmm15
929 vpxord zmm4, zmm4, zmm8
930 vpxord zmm5, zmm5, zmm9
931 vpxord zmm6, zmm6, zmm10
932 vpxord zmm7, zmm7, zmm11
933 vprord zmm4, zmm4, 12
934 vprord zmm5, zmm5, 12
935 vprord zmm6, zmm6, 12
936 vprord zmm7, zmm7, 12
937 vpaddd zmm0, zmm0, zmm31
938 vpaddd zmm1, zmm1, zmm16
939 vpaddd zmm2, zmm2, zmm25
940 vpaddd zmm3, zmm3, zmm22
941 vpaddd zmm0, zmm0, zmm4
942 vpaddd zmm1, zmm1, zmm5
943 vpaddd zmm2, zmm2, zmm6
944 vpaddd zmm3, zmm3, zmm7
945 vpxord zmm12, zmm12, zmm0
946 vpxord zmm13, zmm13, zmm1
947 vpxord zmm14, zmm14, zmm2
948 vpxord zmm15, zmm15, zmm3
949 vprord zmm12, zmm12, 8
950 vprord zmm13, zmm13, 8
951 vprord zmm14, zmm14, 8
952 vprord zmm15, zmm15, 8
953 vpaddd zmm8, zmm8, zmm12
954 vpaddd zmm9, zmm9, zmm13
955 vpaddd zmm10, zmm10, zmm14
956 vpaddd zmm11, zmm11, zmm15
957 vpxord zmm4, zmm4, zmm8
958 vpxord zmm5, zmm5, zmm9
959 vpxord zmm6, zmm6, zmm10
960 vpxord zmm7, zmm7, zmm11
961 vprord zmm4, zmm4, 7
962 vprord zmm5, zmm5, 7
963 vprord zmm6, zmm6, 7
964 vprord zmm7, zmm7, 7
965 vpaddd zmm0, zmm0, zmm30
966 vpaddd zmm1, zmm1, zmm18
967 vpaddd zmm2, zmm2, zmm19
968 vpaddd zmm3, zmm3, zmm23
969 vpaddd zmm0, zmm0, zmm5
970 vpaddd zmm1, zmm1, zmm6
971 vpaddd zmm2, zmm2, zmm7
972 vpaddd zmm3, zmm3, zmm4
973 vpxord zmm15, zmm15, zmm0
974 vpxord zmm12, zmm12, zmm1
975 vpxord zmm13, zmm13, zmm2
976 vpxord zmm14, zmm14, zmm3
977 vprord zmm15, zmm15, 16
978 vprord zmm12, zmm12, 16
979 vprord zmm13, zmm13, 16
980 vprord zmm14, zmm14, 16
981 vpaddd zmm10, zmm10, zmm15
982 vpaddd zmm11, zmm11, zmm12
983 vpaddd zmm8, zmm8, zmm13
984 vpaddd zmm9, zmm9, zmm14
985 vpxord zmm5, zmm5, zmm10
986 vpxord zmm6, zmm6, zmm11
987 vpxord zmm7, zmm7, zmm8
988 vpxord zmm4, zmm4, zmm9
989 vprord zmm5, zmm5, 12
990 vprord zmm6, zmm6, 12
991 vprord zmm7, zmm7, 12
992 vprord zmm4, zmm4, 12
993 vpaddd zmm0, zmm0, zmm26
994 vpaddd zmm1, zmm1, zmm28
995 vpaddd zmm2, zmm2, zmm20
996 vpaddd zmm3, zmm3, zmm29
997 vpaddd zmm0, zmm0, zmm5
998 vpaddd zmm1, zmm1, zmm6
999 vpaddd zmm2, zmm2, zmm7
1000 vpaddd zmm3, zmm3, zmm4
1001 vpxord zmm15, zmm15, zmm0
1002 vpxord zmm12, zmm12, zmm1
1003 vpxord zmm13, zmm13, zmm2
1004 vpxord zmm14, zmm14, zmm3
1005 vprord zmm15, zmm15, 8
1006 vprord zmm12, zmm12, 8
1007 vprord zmm13, zmm13, 8
1008 vprord zmm14, zmm14, 8
1009 vpaddd zmm10, zmm10, zmm15
1010 vpaddd zmm11, zmm11, zmm12
1011 vpaddd zmm8, zmm8, zmm13
1012 vpaddd zmm9, zmm9, zmm14
1013 vpxord zmm5, zmm5, zmm10
1014 vpxord zmm6, zmm6, zmm11
1015 vpxord zmm7, zmm7, zmm8
1016 vpxord zmm4, zmm4, zmm9
1017 vprord zmm5, zmm5, 7
1018 vprord zmm6, zmm6, 7
1019 vprord zmm7, zmm7, 7
1020 vprord zmm4, zmm4, 7
1021 vpxord zmm0, zmm0, zmm8
1022 vpxord zmm1, zmm1, zmm9
1023 vpxord zmm2, zmm2, zmm10
1024 vpxord zmm3, zmm3, zmm11
1025 vpxord zmm4, zmm4, zmm12
1026 vpxord zmm5, zmm5, zmm13
1027 vpxord zmm6, zmm6, zmm14
1028 vpxord zmm7, zmm7, zmm15
1029 movzx eax, byte ptr [rbp+0x78]
1030 jne 9b
1031 mov rbx, qword ptr [rbp+0x90]
1032 vpunpckldq zmm16, zmm0, zmm1
1033 vpunpckhdq zmm17, zmm0, zmm1
1034 vpunpckldq zmm18, zmm2, zmm3
1035 vpunpckhdq zmm19, zmm2, zmm3
1036 vpunpckldq zmm20, zmm4, zmm5
1037 vpunpckhdq zmm21, zmm4, zmm5
1038 vpunpckldq zmm22, zmm6, zmm7
1039 vpunpckhdq zmm23, zmm6, zmm7
1040 vpunpcklqdq zmm0, zmm16, zmm18
1041 vpunpckhqdq zmm1, zmm16, zmm18
1042 vpunpcklqdq zmm2, zmm17, zmm19
1043 vpunpckhqdq zmm3, zmm17, zmm19
1044 vpunpcklqdq zmm4, zmm20, zmm22
1045 vpunpckhqdq zmm5, zmm20, zmm22
1046 vpunpcklqdq zmm6, zmm21, zmm23
1047 vpunpckhqdq zmm7, zmm21, zmm23
1048 vshufi32x4 zmm16, zmm0, zmm4, 0x88
1049 vshufi32x4 zmm17, zmm1, zmm5, 0x88
1050 vshufi32x4 zmm18, zmm2, zmm6, 0x88
1051 vshufi32x4 zmm19, zmm3, zmm7, 0x88
1052 vshufi32x4 zmm20, zmm0, zmm4, 0xDD
1053 vshufi32x4 zmm21, zmm1, zmm5, 0xDD
1054 vshufi32x4 zmm22, zmm2, zmm6, 0xDD
1055 vshufi32x4 zmm23, zmm3, zmm7, 0xDD
1056 vshufi32x4 zmm0, zmm16, zmm17, 0x88
1057 vshufi32x4 zmm1, zmm18, zmm19, 0x88
1058 vshufi32x4 zmm2, zmm20, zmm21, 0x88
1059 vshufi32x4 zmm3, zmm22, zmm23, 0x88
1060 vshufi32x4 zmm4, zmm16, zmm17, 0xDD
1061 vshufi32x4 zmm5, zmm18, zmm19, 0xDD
1062 vshufi32x4 zmm6, zmm20, zmm21, 0xDD
1063 vshufi32x4 zmm7, zmm22, zmm23, 0xDD
1064 vmovdqu32 zmmword ptr [rbx], zmm0
1065 vmovdqu32 zmmword ptr [rbx+0x1*0x40], zmm1
1066 vmovdqu32 zmmword ptr [rbx+0x2*0x40], zmm2
1067 vmovdqu32 zmmword ptr [rbx+0x3*0x40], zmm3
1068 vmovdqu32 zmmword ptr [rbx+0x4*0x40], zmm4
1069 vmovdqu32 zmmword ptr [rbx+0x5*0x40], zmm5
1070 vmovdqu32 zmmword ptr [rbx+0x6*0x40], zmm6
1071 vmovdqu32 zmmword ptr [rbx+0x7*0x40], zmm7
1072 vmovdqa32 zmm0, zmmword ptr [rsp]
1073 vmovdqa32 zmm1, zmmword ptr [rsp+0x1*0x40]
1074 vmovdqa32 zmm2, zmm0
1075 vpaddd zmm2{k1}, zmm0, dword ptr [ADD16+rip] {1to16}
1076 vpcmpltud k2, zmm2, zmm0
1077 vpaddd zmm1 {k2}, zmm1, dword ptr [ADD1+rip] {1to16}
1078 vmovdqa32 zmmword ptr [rsp], zmm2
1079 vmovdqa32 zmmword ptr [rsp+0x1*0x40], zmm1
1080 add rdi, 128
1081 add rbx, 512
1082 mov qword ptr [rbp+0x90], rbx
1083 sub rsi, 16
1084 cmp rsi, 16
1085 jnc 2b
1086 test rsi, rsi
1087 jne 3f
10884:
1089 vzeroupper
1090 vmovdqa xmm6, xmmword ptr [rsp+0x90]
1091 vmovdqa xmm7, xmmword ptr [rsp+0xA0]
1092 vmovdqa xmm8, xmmword ptr [rsp+0xB0]
1093 vmovdqa xmm9, xmmword ptr [rsp+0xC0]
1094 vmovdqa xmm10, xmmword ptr [rsp+0xD0]
1095 vmovdqa xmm11, xmmword ptr [rsp+0xE0]
1096 vmovdqa xmm12, xmmword ptr [rsp+0xF0]
1097 vmovdqa xmm13, xmmword ptr [rsp+0x100]
1098 vmovdqa xmm14, xmmword ptr [rsp+0x110]
1099 vmovdqa xmm15, xmmword ptr [rsp+0x120]
1100 mov rsp, rbp
1101 pop rbp
1102 pop rbx
1103 pop rsi
1104 pop rdi
1105 pop r12
1106 pop r13
1107 pop r14
1108 pop r15
1109 ret
1110.p2align 6
11113:
1112 test esi, 0x8
1113 je 3f
1114 vpbroadcastd ymm0, dword ptr [rcx]
1115 vpbroadcastd ymm1, dword ptr [rcx+0x4]
1116 vpbroadcastd ymm2, dword ptr [rcx+0x8]
1117 vpbroadcastd ymm3, dword ptr [rcx+0xC]
1118 vpbroadcastd ymm4, dword ptr [rcx+0x10]
1119 vpbroadcastd ymm5, dword ptr [rcx+0x14]
1120 vpbroadcastd ymm6, dword ptr [rcx+0x18]
1121 vpbroadcastd ymm7, dword ptr [rcx+0x1C]
1122 mov r8, qword ptr [rdi]
1123 mov r9, qword ptr [rdi+0x8]
1124 mov r10, qword ptr [rdi+0x10]
1125 mov r11, qword ptr [rdi+0x18]
1126 mov r12, qword ptr [rdi+0x20]
1127 mov r13, qword ptr [rdi+0x28]
1128 mov r14, qword ptr [rdi+0x30]
1129 mov r15, qword ptr [rdi+0x38]
1130 movzx eax, byte ptr [rbp+0x78]
1131 movzx ebx, byte ptr [rbp+0x80]
1132 or eax, ebx
1133 xor edx, edx
11342:
1135 movzx ebx, byte ptr [rbp+0x88]
1136 or ebx, eax
1137 add rdx, 64
1138 cmp rdx, qword ptr [rsp+0x80]
1139 cmove eax, ebx
1140 mov dword ptr [rsp+0x88], eax
1141 vmovups xmm8, xmmword ptr [r8+rdx-0x40]
1142 vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x40], 0x01
1143 vmovups xmm9, xmmword ptr [r9+rdx-0x40]
1144 vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x40], 0x01
1145 vunpcklpd ymm12, ymm8, ymm9
1146 vunpckhpd ymm13, ymm8, ymm9
1147 vmovups xmm10, xmmword ptr [r10+rdx-0x40]
1148 vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x40], 0x01
1149 vmovups xmm11, xmmword ptr [r11+rdx-0x40]
1150 vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x40], 0x01
1151 vunpcklpd ymm14, ymm10, ymm11
1152 vunpckhpd ymm15, ymm10, ymm11
1153 vshufps ymm16, ymm12, ymm14, 136
1154 vshufps ymm17, ymm12, ymm14, 221
1155 vshufps ymm18, ymm13, ymm15, 136
1156 vshufps ymm19, ymm13, ymm15, 221
1157 vmovups xmm8, xmmword ptr [r8+rdx-0x30]
1158 vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x30], 0x01
1159 vmovups xmm9, xmmword ptr [r9+rdx-0x30]
1160 vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x30], 0x01
1161 vunpcklpd ymm12, ymm8, ymm9
1162 vunpckhpd ymm13, ymm8, ymm9
1163 vmovups xmm10, xmmword ptr [r10+rdx-0x30]
1164 vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x30], 0x01
1165 vmovups xmm11, xmmword ptr [r11+rdx-0x30]
1166 vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x30], 0x01
1167 vunpcklpd ymm14, ymm10, ymm11
1168 vunpckhpd ymm15, ymm10, ymm11
1169 vshufps ymm20, ymm12, ymm14, 136
1170 vshufps ymm21, ymm12, ymm14, 221
1171 vshufps ymm22, ymm13, ymm15, 136
1172 vshufps ymm23, ymm13, ymm15, 221
1173 vmovups xmm8, xmmword ptr [r8+rdx-0x20]
1174 vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x20], 0x01
1175 vmovups xmm9, xmmword ptr [r9+rdx-0x20]
1176 vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x20], 0x01
1177 vunpcklpd ymm12, ymm8, ymm9
1178 vunpckhpd ymm13, ymm8, ymm9
1179 vmovups xmm10, xmmword ptr [r10+rdx-0x20]
1180 vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x20], 0x01
1181 vmovups xmm11, xmmword ptr [r11+rdx-0x20]
1182 vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x20], 0x01
1183 vunpcklpd ymm14, ymm10, ymm11
1184 vunpckhpd ymm15, ymm10, ymm11
1185 vshufps ymm24, ymm12, ymm14, 136
1186 vshufps ymm25, ymm12, ymm14, 221
1187 vshufps ymm26, ymm13, ymm15, 136
1188 vshufps ymm27, ymm13, ymm15, 221
1189 vmovups xmm8, xmmword ptr [r8+rdx-0x10]
1190 vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x10], 0x01
1191 vmovups xmm9, xmmword ptr [r9+rdx-0x10]
1192 vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x10], 0x01
1193 vunpcklpd ymm12, ymm8, ymm9
1194 vunpckhpd ymm13, ymm8, ymm9
1195 vmovups xmm10, xmmword ptr [r10+rdx-0x10]
1196 vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x10], 0x01
1197 vmovups xmm11, xmmword ptr [r11+rdx-0x10]
1198 vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x10], 0x01
1199 vunpcklpd ymm14, ymm10, ymm11
1200 vunpckhpd ymm15, ymm10, ymm11
1201 vshufps ymm28, ymm12, ymm14, 136
1202 vshufps ymm29, ymm12, ymm14, 221
1203 vshufps ymm30, ymm13, ymm15, 136
1204 vshufps ymm31, ymm13, ymm15, 221
1205 vpbroadcastd ymm8, dword ptr [BLAKE3_IV_0+rip]
1206 vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1+rip]
1207 vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2+rip]
1208 vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3+rip]
1209 vmovdqa ymm12, ymmword ptr [rsp]
1210 vmovdqa ymm13, ymmword ptr [rsp+0x40]
1211 vpbroadcastd ymm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
1212 vpbroadcastd ymm15, dword ptr [rsp+0x88]
1213 vpaddd ymm0, ymm0, ymm16
1214 vpaddd ymm1, ymm1, ymm18
1215 vpaddd ymm2, ymm2, ymm20
1216 vpaddd ymm3, ymm3, ymm22
1217 vpaddd ymm0, ymm0, ymm4
1218 vpaddd ymm1, ymm1, ymm5
1219 vpaddd ymm2, ymm2, ymm6
1220 vpaddd ymm3, ymm3, ymm7
1221 vpxord ymm12, ymm12, ymm0
1222 vpxord ymm13, ymm13, ymm1
1223 vpxord ymm14, ymm14, ymm2
1224 vpxord ymm15, ymm15, ymm3
1225 vprord ymm12, ymm12, 16
1226 vprord ymm13, ymm13, 16
1227 vprord ymm14, ymm14, 16
1228 vprord ymm15, ymm15, 16
1229 vpaddd ymm8, ymm8, ymm12
1230 vpaddd ymm9, ymm9, ymm13
1231 vpaddd ymm10, ymm10, ymm14
1232 vpaddd ymm11, ymm11, ymm15
1233 vpxord ymm4, ymm4, ymm8
1234 vpxord ymm5, ymm5, ymm9
1235 vpxord ymm6, ymm6, ymm10
1236 vpxord ymm7, ymm7, ymm11
1237 vprord ymm4, ymm4, 12
1238 vprord ymm5, ymm5, 12
1239 vprord ymm6, ymm6, 12
1240 vprord ymm7, ymm7, 12
1241 vpaddd ymm0, ymm0, ymm17
1242 vpaddd ymm1, ymm1, ymm19
1243 vpaddd ymm2, ymm2, ymm21
1244 vpaddd ymm3, ymm3, ymm23
1245 vpaddd ymm0, ymm0, ymm4
1246 vpaddd ymm1, ymm1, ymm5
1247 vpaddd ymm2, ymm2, ymm6
1248 vpaddd ymm3, ymm3, ymm7
1249 vpxord ymm12, ymm12, ymm0
1250 vpxord ymm13, ymm13, ymm1
1251 vpxord ymm14, ymm14, ymm2
1252 vpxord ymm15, ymm15, ymm3
1253 vprord ymm12, ymm12, 8
1254 vprord ymm13, ymm13, 8
1255 vprord ymm14, ymm14, 8
1256 vprord ymm15, ymm15, 8
1257 vpaddd ymm8, ymm8, ymm12
1258 vpaddd ymm9, ymm9, ymm13
1259 vpaddd ymm10, ymm10, ymm14
1260 vpaddd ymm11, ymm11, ymm15
1261 vpxord ymm4, ymm4, ymm8
1262 vpxord ymm5, ymm5, ymm9
1263 vpxord ymm6, ymm6, ymm10
1264 vpxord ymm7, ymm7, ymm11
1265 vprord ymm4, ymm4, 7
1266 vprord ymm5, ymm5, 7
1267 vprord ymm6, ymm6, 7
1268 vprord ymm7, ymm7, 7
1269 vpaddd ymm0, ymm0, ymm24
1270 vpaddd ymm1, ymm1, ymm26
1271 vpaddd ymm2, ymm2, ymm28
1272 vpaddd ymm3, ymm3, ymm30
1273 vpaddd ymm0, ymm0, ymm5
1274 vpaddd ymm1, ymm1, ymm6
1275 vpaddd ymm2, ymm2, ymm7
1276 vpaddd ymm3, ymm3, ymm4
1277 vpxord ymm15, ymm15, ymm0
1278 vpxord ymm12, ymm12, ymm1
1279 vpxord ymm13, ymm13, ymm2
1280 vpxord ymm14, ymm14, ymm3
1281 vprord ymm15, ymm15, 16
1282 vprord ymm12, ymm12, 16
1283 vprord ymm13, ymm13, 16
1284 vprord ymm14, ymm14, 16
1285 vpaddd ymm10, ymm10, ymm15
1286 vpaddd ymm11, ymm11, ymm12
1287 vpaddd ymm8, ymm8, ymm13
1288 vpaddd ymm9, ymm9, ymm14
1289 vpxord ymm5, ymm5, ymm10
1290 vpxord ymm6, ymm6, ymm11
1291 vpxord ymm7, ymm7, ymm8
1292 vpxord ymm4, ymm4, ymm9
1293 vprord ymm5, ymm5, 12
1294 vprord ymm6, ymm6, 12
1295 vprord ymm7, ymm7, 12
1296 vprord ymm4, ymm4, 12
1297 vpaddd ymm0, ymm0, ymm25
1298 vpaddd ymm1, ymm1, ymm27
1299 vpaddd ymm2, ymm2, ymm29
1300 vpaddd ymm3, ymm3, ymm31
1301 vpaddd ymm0, ymm0, ymm5
1302 vpaddd ymm1, ymm1, ymm6
1303 vpaddd ymm2, ymm2, ymm7
1304 vpaddd ymm3, ymm3, ymm4
1305 vpxord ymm15, ymm15, ymm0
1306 vpxord ymm12, ymm12, ymm1
1307 vpxord ymm13, ymm13, ymm2
1308 vpxord ymm14, ymm14, ymm3
1309 vprord ymm15, ymm15, 8
1310 vprord ymm12, ymm12, 8
1311 vprord ymm13, ymm13, 8
1312 vprord ymm14, ymm14, 8
1313 vpaddd ymm10, ymm10, ymm15
1314 vpaddd ymm11, ymm11, ymm12
1315 vpaddd ymm8, ymm8, ymm13
1316 vpaddd ymm9, ymm9, ymm14
1317 vpxord ymm5, ymm5, ymm10
1318 vpxord ymm6, ymm6, ymm11
1319 vpxord ymm7, ymm7, ymm8
1320 vpxord ymm4, ymm4, ymm9
1321 vprord ymm5, ymm5, 7
1322 vprord ymm6, ymm6, 7
1323 vprord ymm7, ymm7, 7
1324 vprord ymm4, ymm4, 7
1325 vpaddd ymm0, ymm0, ymm18
1326 vpaddd ymm1, ymm1, ymm19
1327 vpaddd ymm2, ymm2, ymm23
1328 vpaddd ymm3, ymm3, ymm20
1329 vpaddd ymm0, ymm0, ymm4
1330 vpaddd ymm1, ymm1, ymm5
1331 vpaddd ymm2, ymm2, ymm6
1332 vpaddd ymm3, ymm3, ymm7
1333 vpxord ymm12, ymm12, ymm0
1334 vpxord ymm13, ymm13, ymm1
1335 vpxord ymm14, ymm14, ymm2
1336 vpxord ymm15, ymm15, ymm3
1337 vprord ymm12, ymm12, 16
1338 vprord ymm13, ymm13, 16
1339 vprord ymm14, ymm14, 16
1340 vprord ymm15, ymm15, 16
1341 vpaddd ymm8, ymm8, ymm12
1342 vpaddd ymm9, ymm9, ymm13
1343 vpaddd ymm10, ymm10, ymm14
1344 vpaddd ymm11, ymm11, ymm15
1345 vpxord ymm4, ymm4, ymm8
1346 vpxord ymm5, ymm5, ymm9
1347 vpxord ymm6, ymm6, ymm10
1348 vpxord ymm7, ymm7, ymm11
1349 vprord ymm4, ymm4, 12
1350 vprord ymm5, ymm5, 12
1351 vprord ymm6, ymm6, 12
1352 vprord ymm7, ymm7, 12
1353 vpaddd ymm0, ymm0, ymm22
1354 vpaddd ymm1, ymm1, ymm26
1355 vpaddd ymm2, ymm2, ymm16
1356 vpaddd ymm3, ymm3, ymm29
1357 vpaddd ymm0, ymm0, ymm4
1358 vpaddd ymm1, ymm1, ymm5
1359 vpaddd ymm2, ymm2, ymm6
1360 vpaddd ymm3, ymm3, ymm7
1361 vpxord ymm12, ymm12, ymm0
1362 vpxord ymm13, ymm13, ymm1
1363 vpxord ymm14, ymm14, ymm2
1364 vpxord ymm15, ymm15, ymm3
1365 vprord ymm12, ymm12, 8
1366 vprord ymm13, ymm13, 8
1367 vprord ymm14, ymm14, 8
1368 vprord ymm15, ymm15, 8
1369 vpaddd ymm8, ymm8, ymm12
1370 vpaddd ymm9, ymm9, ymm13
1371 vpaddd ymm10, ymm10, ymm14
1372 vpaddd ymm11, ymm11, ymm15
1373 vpxord ymm4, ymm4, ymm8
1374 vpxord ymm5, ymm5, ymm9
1375 vpxord ymm6, ymm6, ymm10
1376 vpxord ymm7, ymm7, ymm11
1377 vprord ymm4, ymm4, 7
1378 vprord ymm5, ymm5, 7
1379 vprord ymm6, ymm6, 7
1380 vprord ymm7, ymm7, 7
1381 vpaddd ymm0, ymm0, ymm17
1382 vpaddd ymm1, ymm1, ymm28
1383 vpaddd ymm2, ymm2, ymm25
1384 vpaddd ymm3, ymm3, ymm31
1385 vpaddd ymm0, ymm0, ymm5
1386 vpaddd ymm1, ymm1, ymm6
1387 vpaddd ymm2, ymm2, ymm7
1388 vpaddd ymm3, ymm3, ymm4
1389 vpxord ymm15, ymm15, ymm0
1390 vpxord ymm12, ymm12, ymm1
1391 vpxord ymm13, ymm13, ymm2
1392 vpxord ymm14, ymm14, ymm3
1393 vprord ymm15, ymm15, 16
1394 vprord ymm12, ymm12, 16
1395 vprord ymm13, ymm13, 16
1396 vprord ymm14, ymm14, 16
1397 vpaddd ymm10, ymm10, ymm15
1398 vpaddd ymm11, ymm11, ymm12
1399 vpaddd ymm8, ymm8, ymm13
1400 vpaddd ymm9, ymm9, ymm14
1401 vpxord ymm5, ymm5, ymm10
1402 vpxord ymm6, ymm6, ymm11
1403 vpxord ymm7, ymm7, ymm8
1404 vpxord ymm4, ymm4, ymm9
1405 vprord ymm5, ymm5, 12
1406 vprord ymm6, ymm6, 12
1407 vprord ymm7, ymm7, 12
1408 vprord ymm4, ymm4, 12
1409 vpaddd ymm0, ymm0, ymm27
1410 vpaddd ymm1, ymm1, ymm21
1411 vpaddd ymm2, ymm2, ymm30
1412 vpaddd ymm3, ymm3, ymm24
1413 vpaddd ymm0, ymm0, ymm5
1414 vpaddd ymm1, ymm1, ymm6
1415 vpaddd ymm2, ymm2, ymm7
1416 vpaddd ymm3, ymm3, ymm4
1417 vpxord ymm15, ymm15, ymm0
1418 vpxord ymm12, ymm12, ymm1
1419 vpxord ymm13, ymm13, ymm2
1420 vpxord ymm14, ymm14, ymm3
1421 vprord ymm15, ymm15, 8
1422 vprord ymm12, ymm12, 8
1423 vprord ymm13, ymm13, 8
1424 vprord ymm14, ymm14, 8
1425 vpaddd ymm10, ymm10, ymm15
1426 vpaddd ymm11, ymm11, ymm12
1427 vpaddd ymm8, ymm8, ymm13
1428 vpaddd ymm9, ymm9, ymm14
1429 vpxord ymm5, ymm5, ymm10
1430 vpxord ymm6, ymm6, ymm11
1431 vpxord ymm7, ymm7, ymm8
1432 vpxord ymm4, ymm4, ymm9
1433 vprord ymm5, ymm5, 7
1434 vprord ymm6, ymm6, 7
1435 vprord ymm7, ymm7, 7
1436 vprord ymm4, ymm4, 7
1437 vpaddd ymm0, ymm0, ymm19
1438 vpaddd ymm1, ymm1, ymm26
1439 vpaddd ymm2, ymm2, ymm29
1440 vpaddd ymm3, ymm3, ymm23
1441 vpaddd ymm0, ymm0, ymm4
1442 vpaddd ymm1, ymm1, ymm5
1443 vpaddd ymm2, ymm2, ymm6
1444 vpaddd ymm3, ymm3, ymm7
1445 vpxord ymm12, ymm12, ymm0
1446 vpxord ymm13, ymm13, ymm1
1447 vpxord ymm14, ymm14, ymm2
1448 vpxord ymm15, ymm15, ymm3
1449 vprord ymm12, ymm12, 16
1450 vprord ymm13, ymm13, 16
1451 vprord ymm14, ymm14, 16
1452 vprord ymm15, ymm15, 16
1453 vpaddd ymm8, ymm8, ymm12
1454 vpaddd ymm9, ymm9, ymm13
1455 vpaddd ymm10, ymm10, ymm14
1456 vpaddd ymm11, ymm11, ymm15
1457 vpxord ymm4, ymm4, ymm8
1458 vpxord ymm5, ymm5, ymm9
1459 vpxord ymm6, ymm6, ymm10
1460 vpxord ymm7, ymm7, ymm11
1461 vprord ymm4, ymm4, 12
1462 vprord ymm5, ymm5, 12
1463 vprord ymm6, ymm6, 12
1464 vprord ymm7, ymm7, 12
1465 vpaddd ymm0, ymm0, ymm20
1466 vpaddd ymm1, ymm1, ymm28
1467 vpaddd ymm2, ymm2, ymm18
1468 vpaddd ymm3, ymm3, ymm30
1469 vpaddd ymm0, ymm0, ymm4
1470 vpaddd ymm1, ymm1, ymm5
1471 vpaddd ymm2, ymm2, ymm6
1472 vpaddd ymm3, ymm3, ymm7
1473 vpxord ymm12, ymm12, ymm0
1474 vpxord ymm13, ymm13, ymm1
1475 vpxord ymm14, ymm14, ymm2
1476 vpxord ymm15, ymm15, ymm3
1477 vprord ymm12, ymm12, 8
1478 vprord ymm13, ymm13, 8
1479 vprord ymm14, ymm14, 8
1480 vprord ymm15, ymm15, 8
1481 vpaddd ymm8, ymm8, ymm12
1482 vpaddd ymm9, ymm9, ymm13
1483 vpaddd ymm10, ymm10, ymm14
1484 vpaddd ymm11, ymm11, ymm15
1485 vpxord ymm4, ymm4, ymm8
1486 vpxord ymm5, ymm5, ymm9
1487 vpxord ymm6, ymm6, ymm10
1488 vpxord ymm7, ymm7, ymm11
1489 vprord ymm4, ymm4, 7
1490 vprord ymm5, ymm5, 7
1491 vprord ymm6, ymm6, 7
1492 vprord ymm7, ymm7, 7
1493 vpaddd ymm0, ymm0, ymm22
1494 vpaddd ymm1, ymm1, ymm25
1495 vpaddd ymm2, ymm2, ymm27
1496 vpaddd ymm3, ymm3, ymm24
1497 vpaddd ymm0, ymm0, ymm5
1498 vpaddd ymm1, ymm1, ymm6
1499 vpaddd ymm2, ymm2, ymm7
1500 vpaddd ymm3, ymm3, ymm4
1501 vpxord ymm15, ymm15, ymm0
1502 vpxord ymm12, ymm12, ymm1
1503 vpxord ymm13, ymm13, ymm2
1504 vpxord ymm14, ymm14, ymm3
1505 vprord ymm15, ymm15, 16
1506 vprord ymm12, ymm12, 16
1507 vprord ymm13, ymm13, 16
1508 vprord ymm14, ymm14, 16
1509 vpaddd ymm10, ymm10, ymm15
1510 vpaddd ymm11, ymm11, ymm12
1511 vpaddd ymm8, ymm8, ymm13
1512 vpaddd ymm9, ymm9, ymm14
1513 vpxord ymm5, ymm5, ymm10
1514 vpxord ymm6, ymm6, ymm11
1515 vpxord ymm7, ymm7, ymm8
1516 vpxord ymm4, ymm4, ymm9
1517 vprord ymm5, ymm5, 12
1518 vprord ymm6, ymm6, 12
1519 vprord ymm7, ymm7, 12
1520 vprord ymm4, ymm4, 12
1521 vpaddd ymm0, ymm0, ymm21
1522 vpaddd ymm1, ymm1, ymm16
1523 vpaddd ymm2, ymm2, ymm31
1524 vpaddd ymm3, ymm3, ymm17
1525 vpaddd ymm0, ymm0, ymm5
1526 vpaddd ymm1, ymm1, ymm6
1527 vpaddd ymm2, ymm2, ymm7
1528 vpaddd ymm3, ymm3, ymm4
1529 vpxord ymm15, ymm15, ymm0
1530 vpxord ymm12, ymm12, ymm1
1531 vpxord ymm13, ymm13, ymm2
1532 vpxord ymm14, ymm14, ymm3
1533 vprord ymm15, ymm15, 8
1534 vprord ymm12, ymm12, 8
1535 vprord ymm13, ymm13, 8
1536 vprord ymm14, ymm14, 8
1537 vpaddd ymm10, ymm10, ymm15
1538 vpaddd ymm11, ymm11, ymm12
1539 vpaddd ymm8, ymm8, ymm13
1540 vpaddd ymm9, ymm9, ymm14
1541 vpxord ymm5, ymm5, ymm10
1542 vpxord ymm6, ymm6, ymm11
1543 vpxord ymm7, ymm7, ymm8
1544 vpxord ymm4, ymm4, ymm9
1545 vprord ymm5, ymm5, 7
1546 vprord ymm6, ymm6, 7
1547 vprord ymm7, ymm7, 7
1548 vprord ymm4, ymm4, 7
1549 vpaddd ymm0, ymm0, ymm26
1550 vpaddd ymm1, ymm1, ymm28
1551 vpaddd ymm2, ymm2, ymm30
1552 vpaddd ymm3, ymm3, ymm29
1553 vpaddd ymm0, ymm0, ymm4
1554 vpaddd ymm1, ymm1, ymm5
1555 vpaddd ymm2, ymm2, ymm6
1556 vpaddd ymm3, ymm3, ymm7
1557 vpxord ymm12, ymm12, ymm0
1558 vpxord ymm13, ymm13, ymm1
1559 vpxord ymm14, ymm14, ymm2
1560 vpxord ymm15, ymm15, ymm3
1561 vprord ymm12, ymm12, 16
1562 vprord ymm13, ymm13, 16
1563 vprord ymm14, ymm14, 16
1564 vprord ymm15, ymm15, 16
1565 vpaddd ymm8, ymm8, ymm12
1566 vpaddd ymm9, ymm9, ymm13
1567 vpaddd ymm10, ymm10, ymm14
1568 vpaddd ymm11, ymm11, ymm15
1569 vpxord ymm4, ymm4, ymm8
1570 vpxord ymm5, ymm5, ymm9
1571 vpxord ymm6, ymm6, ymm10
1572 vpxord ymm7, ymm7, ymm11
1573 vprord ymm4, ymm4, 12
1574 vprord ymm5, ymm5, 12
1575 vprord ymm6, ymm6, 12
1576 vprord ymm7, ymm7, 12
1577 vpaddd ymm0, ymm0, ymm23
1578 vpaddd ymm1, ymm1, ymm25
1579 vpaddd ymm2, ymm2, ymm19
1580 vpaddd ymm3, ymm3, ymm31
1581 vpaddd ymm0, ymm0, ymm4
1582 vpaddd ymm1, ymm1, ymm5
1583 vpaddd ymm2, ymm2, ymm6
1584 vpaddd ymm3, ymm3, ymm7
1585 vpxord ymm12, ymm12, ymm0
1586 vpxord ymm13, ymm13, ymm1
1587 vpxord ymm14, ymm14, ymm2
1588 vpxord ymm15, ymm15, ymm3
1589 vprord ymm12, ymm12, 8
1590 vprord ymm13, ymm13, 8
1591 vprord ymm14, ymm14, 8
1592 vprord ymm15, ymm15, 8
1593 vpaddd ymm8, ymm8, ymm12
1594 vpaddd ymm9, ymm9, ymm13
1595 vpaddd ymm10, ymm10, ymm14
1596 vpaddd ymm11, ymm11, ymm15
1597 vpxord ymm4, ymm4, ymm8
1598 vpxord ymm5, ymm5, ymm9
1599 vpxord ymm6, ymm6, ymm10
1600 vpxord ymm7, ymm7, ymm11
1601 vprord ymm4, ymm4, 7
1602 vprord ymm5, ymm5, 7
1603 vprord ymm6, ymm6, 7
1604 vprord ymm7, ymm7, 7
1605 vpaddd ymm0, ymm0, ymm20
1606 vpaddd ymm1, ymm1, ymm27
1607 vpaddd ymm2, ymm2, ymm21
1608 vpaddd ymm3, ymm3, ymm17
1609 vpaddd ymm0, ymm0, ymm5
1610 vpaddd ymm1, ymm1, ymm6
1611 vpaddd ymm2, ymm2, ymm7
1612 vpaddd ymm3, ymm3, ymm4
1613 vpxord ymm15, ymm15, ymm0
1614 vpxord ymm12, ymm12, ymm1
1615 vpxord ymm13, ymm13, ymm2
1616 vpxord ymm14, ymm14, ymm3
1617 vprord ymm15, ymm15, 16
1618 vprord ymm12, ymm12, 16
1619 vprord ymm13, ymm13, 16
1620 vprord ymm14, ymm14, 16
1621 vpaddd ymm10, ymm10, ymm15
1622 vpaddd ymm11, ymm11, ymm12
1623 vpaddd ymm8, ymm8, ymm13
1624 vpaddd ymm9, ymm9, ymm14
1625 vpxord ymm5, ymm5, ymm10
1626 vpxord ymm6, ymm6, ymm11
1627 vpxord ymm7, ymm7, ymm8
1628 vpxord ymm4, ymm4, ymm9
1629 vprord ymm5, ymm5, 12
1630 vprord ymm6, ymm6, 12
1631 vprord ymm7, ymm7, 12
1632 vprord ymm4, ymm4, 12
1633 vpaddd ymm0, ymm0, ymm16
1634 vpaddd ymm1, ymm1, ymm18
1635 vpaddd ymm2, ymm2, ymm24
1636 vpaddd ymm3, ymm3, ymm22
1637 vpaddd ymm0, ymm0, ymm5
1638 vpaddd ymm1, ymm1, ymm6
1639 vpaddd ymm2, ymm2, ymm7
1640 vpaddd ymm3, ymm3, ymm4
1641 vpxord ymm15, ymm15, ymm0
1642 vpxord ymm12, ymm12, ymm1
1643 vpxord ymm13, ymm13, ymm2
1644 vpxord ymm14, ymm14, ymm3
1645 vprord ymm15, ymm15, 8
1646 vprord ymm12, ymm12, 8
1647 vprord ymm13, ymm13, 8
1648 vprord ymm14, ymm14, 8
1649 vpaddd ymm10, ymm10, ymm15
1650 vpaddd ymm11, ymm11, ymm12
1651 vpaddd ymm8, ymm8, ymm13
1652 vpaddd ymm9, ymm9, ymm14
1653 vpxord ymm5, ymm5, ymm10
1654 vpxord ymm6, ymm6, ymm11
1655 vpxord ymm7, ymm7, ymm8
1656 vpxord ymm4, ymm4, ymm9
1657 vprord ymm5, ymm5, 7
1658 vprord ymm6, ymm6, 7
1659 vprord ymm7, ymm7, 7
1660 vprord ymm4, ymm4, 7
1661 vpaddd ymm0, ymm0, ymm28
1662 vpaddd ymm1, ymm1, ymm25
1663 vpaddd ymm2, ymm2, ymm31
1664 vpaddd ymm3, ymm3, ymm30
1665 vpaddd ymm0, ymm0, ymm4
1666 vpaddd ymm1, ymm1, ymm5
1667 vpaddd ymm2, ymm2, ymm6
1668 vpaddd ymm3, ymm3, ymm7
1669 vpxord ymm12, ymm12, ymm0
1670 vpxord ymm13, ymm13, ymm1
1671 vpxord ymm14, ymm14, ymm2
1672 vpxord ymm15, ymm15, ymm3
1673 vprord ymm12, ymm12, 16
1674 vprord ymm13, ymm13, 16
1675 vprord ymm14, ymm14, 16
1676 vprord ymm15, ymm15, 16
1677 vpaddd ymm8, ymm8, ymm12
1678 vpaddd ymm9, ymm9, ymm13
1679 vpaddd ymm10, ymm10, ymm14
1680 vpaddd ymm11, ymm11, ymm15
1681 vpxord ymm4, ymm4, ymm8
1682 vpxord ymm5, ymm5, ymm9
1683 vpxord ymm6, ymm6, ymm10
1684 vpxord ymm7, ymm7, ymm11
1685 vprord ymm4, ymm4, 12
1686 vprord ymm5, ymm5, 12
1687 vprord ymm6, ymm6, 12
1688 vprord ymm7, ymm7, 12
1689 vpaddd ymm0, ymm0, ymm29
1690 vpaddd ymm1, ymm1, ymm27
1691 vpaddd ymm2, ymm2, ymm26
1692 vpaddd ymm3, ymm3, ymm24
1693 vpaddd ymm0, ymm0, ymm4
1694 vpaddd ymm1, ymm1, ymm5
1695 vpaddd ymm2, ymm2, ymm6
1696 vpaddd ymm3, ymm3, ymm7
1697 vpxord ymm12, ymm12, ymm0
1698 vpxord ymm13, ymm13, ymm1
1699 vpxord ymm14, ymm14, ymm2
1700 vpxord ymm15, ymm15, ymm3
1701 vprord ymm12, ymm12, 8
1702 vprord ymm13, ymm13, 8
1703 vprord ymm14, ymm14, 8
1704 vprord ymm15, ymm15, 8
1705 vpaddd ymm8, ymm8, ymm12
1706 vpaddd ymm9, ymm9, ymm13
1707 vpaddd ymm10, ymm10, ymm14
1708 vpaddd ymm11, ymm11, ymm15
1709 vpxord ymm4, ymm4, ymm8
1710 vpxord ymm5, ymm5, ymm9
1711 vpxord ymm6, ymm6, ymm10
1712 vpxord ymm7, ymm7, ymm11
1713 vprord ymm4, ymm4, 7
1714 vprord ymm5, ymm5, 7
1715 vprord ymm6, ymm6, 7
1716 vprord ymm7, ymm7, 7
1717 vpaddd ymm0, ymm0, ymm23
1718 vpaddd ymm1, ymm1, ymm21
1719 vpaddd ymm2, ymm2, ymm16
1720 vpaddd ymm3, ymm3, ymm22
1721 vpaddd ymm0, ymm0, ymm5
1722 vpaddd ymm1, ymm1, ymm6
1723 vpaddd ymm2, ymm2, ymm7
1724 vpaddd ymm3, ymm3, ymm4
1725 vpxord ymm15, ymm15, ymm0
1726 vpxord ymm12, ymm12, ymm1
1727 vpxord ymm13, ymm13, ymm2
1728 vpxord ymm14, ymm14, ymm3
1729 vprord ymm15, ymm15, 16
1730 vprord ymm12, ymm12, 16
1731 vprord ymm13, ymm13, 16
1732 vprord ymm14, ymm14, 16
1733 vpaddd ymm10, ymm10, ymm15
1734 vpaddd ymm11, ymm11, ymm12
1735 vpaddd ymm8, ymm8, ymm13
1736 vpaddd ymm9, ymm9, ymm14
1737 vpxord ymm5, ymm5, ymm10
1738 vpxord ymm6, ymm6, ymm11
1739 vpxord ymm7, ymm7, ymm8
1740 vpxord ymm4, ymm4, ymm9
1741 vprord ymm5, ymm5, 12
1742 vprord ymm6, ymm6, 12
1743 vprord ymm7, ymm7, 12
1744 vprord ymm4, ymm4, 12
1745 vpaddd ymm0, ymm0, ymm18
1746 vpaddd ymm1, ymm1, ymm19
1747 vpaddd ymm2, ymm2, ymm17
1748 vpaddd ymm3, ymm3, ymm20
1749 vpaddd ymm0, ymm0, ymm5
1750 vpaddd ymm1, ymm1, ymm6
1751 vpaddd ymm2, ymm2, ymm7
1752 vpaddd ymm3, ymm3, ymm4
1753 vpxord ymm15, ymm15, ymm0
1754 vpxord ymm12, ymm12, ymm1
1755 vpxord ymm13, ymm13, ymm2
1756 vpxord ymm14, ymm14, ymm3
1757 vprord ymm15, ymm15, 8
1758 vprord ymm12, ymm12, 8
1759 vprord ymm13, ymm13, 8
1760 vprord ymm14, ymm14, 8
1761 vpaddd ymm10, ymm10, ymm15
1762 vpaddd ymm11, ymm11, ymm12
1763 vpaddd ymm8, ymm8, ymm13
1764 vpaddd ymm9, ymm9, ymm14
1765 vpxord ymm5, ymm5, ymm10
1766 vpxord ymm6, ymm6, ymm11
1767 vpxord ymm7, ymm7, ymm8
1768 vpxord ymm4, ymm4, ymm9
1769 vprord ymm5, ymm5, 7
1770 vprord ymm6, ymm6, 7
1771 vprord ymm7, ymm7, 7
1772 vprord ymm4, ymm4, 7
1773 vpaddd ymm0, ymm0, ymm25
1774 vpaddd ymm1, ymm1, ymm27
1775 vpaddd ymm2, ymm2, ymm24
1776 vpaddd ymm3, ymm3, ymm31
1777 vpaddd ymm0, ymm0, ymm4
1778 vpaddd ymm1, ymm1, ymm5
1779 vpaddd ymm2, ymm2, ymm6
1780 vpaddd ymm3, ymm3, ymm7
1781 vpxord ymm12, ymm12, ymm0
1782 vpxord ymm13, ymm13, ymm1
1783 vpxord ymm14, ymm14, ymm2
1784 vpxord ymm15, ymm15, ymm3
1785 vprord ymm12, ymm12, 16
1786 vprord ymm13, ymm13, 16
1787 vprord ymm14, ymm14, 16
1788 vprord ymm15, ymm15, 16
1789 vpaddd ymm8, ymm8, ymm12
1790 vpaddd ymm9, ymm9, ymm13
1791 vpaddd ymm10, ymm10, ymm14
1792 vpaddd ymm11, ymm11, ymm15
1793 vpxord ymm4, ymm4, ymm8
1794 vpxord ymm5, ymm5, ymm9
1795 vpxord ymm6, ymm6, ymm10
1796 vpxord ymm7, ymm7, ymm11
1797 vprord ymm4, ymm4, 12
1798 vprord ymm5, ymm5, 12
1799 vprord ymm6, ymm6, 12
1800 vprord ymm7, ymm7, 12
1801 vpaddd ymm0, ymm0, ymm30
1802 vpaddd ymm1, ymm1, ymm21
1803 vpaddd ymm2, ymm2, ymm28
1804 vpaddd ymm3, ymm3, ymm17
1805 vpaddd ymm0, ymm0, ymm4
1806 vpaddd ymm1, ymm1, ymm5
1807 vpaddd ymm2, ymm2, ymm6
1808 vpaddd ymm3, ymm3, ymm7
1809 vpxord ymm12, ymm12, ymm0
1810 vpxord ymm13, ymm13, ymm1
1811 vpxord ymm14, ymm14, ymm2
1812 vpxord ymm15, ymm15, ymm3
1813 vprord ymm12, ymm12, 8
1814 vprord ymm13, ymm13, 8
1815 vprord ymm14, ymm14, 8
1816 vprord ymm15, ymm15, 8
1817 vpaddd ymm8, ymm8, ymm12
1818 vpaddd ymm9, ymm9, ymm13
1819 vpaddd ymm10, ymm10, ymm14
1820 vpaddd ymm11, ymm11, ymm15
1821 vpxord ymm4, ymm4, ymm8
1822 vpxord ymm5, ymm5, ymm9
1823 vpxord ymm6, ymm6, ymm10
1824 vpxord ymm7, ymm7, ymm11
1825 vprord ymm4, ymm4, 7
1826 vprord ymm5, ymm5, 7
1827 vprord ymm6, ymm6, 7
1828 vprord ymm7, ymm7, 7
1829 vpaddd ymm0, ymm0, ymm29
1830 vpaddd ymm1, ymm1, ymm16
1831 vpaddd ymm2, ymm2, ymm18
1832 vpaddd ymm3, ymm3, ymm20
1833 vpaddd ymm0, ymm0, ymm5
1834 vpaddd ymm1, ymm1, ymm6
1835 vpaddd ymm2, ymm2, ymm7
1836 vpaddd ymm3, ymm3, ymm4
1837 vpxord ymm15, ymm15, ymm0
1838 vpxord ymm12, ymm12, ymm1
1839 vpxord ymm13, ymm13, ymm2
1840 vpxord ymm14, ymm14, ymm3
1841 vprord ymm15, ymm15, 16
1842 vprord ymm12, ymm12, 16
1843 vprord ymm13, ymm13, 16
1844 vprord ymm14, ymm14, 16
1845 vpaddd ymm10, ymm10, ymm15
1846 vpaddd ymm11, ymm11, ymm12
1847 vpaddd ymm8, ymm8, ymm13
1848 vpaddd ymm9, ymm9, ymm14
1849 vpxord ymm5, ymm5, ymm10
1850 vpxord ymm6, ymm6, ymm11
1851 vpxord ymm7, ymm7, ymm8
1852 vpxord ymm4, ymm4, ymm9
1853 vprord ymm5, ymm5, 12
1854 vprord ymm6, ymm6, 12
1855 vprord ymm7, ymm7, 12
1856 vprord ymm4, ymm4, 12
1857 vpaddd ymm0, ymm0, ymm19
1858 vpaddd ymm1, ymm1, ymm26
1859 vpaddd ymm2, ymm2, ymm22
1860 vpaddd ymm3, ymm3, ymm23
1861 vpaddd ymm0, ymm0, ymm5
1862 vpaddd ymm1, ymm1, ymm6
1863 vpaddd ymm2, ymm2, ymm7
1864 vpaddd ymm3, ymm3, ymm4
1865 vpxord ymm15, ymm15, ymm0
1866 vpxord ymm12, ymm12, ymm1
1867 vpxord ymm13, ymm13, ymm2
1868 vpxord ymm14, ymm14, ymm3
1869 vprord ymm15, ymm15, 8
1870 vprord ymm12, ymm12, 8
1871 vprord ymm13, ymm13, 8
1872 vprord ymm14, ymm14, 8
1873 vpaddd ymm10, ymm10, ymm15
1874 vpaddd ymm11, ymm11, ymm12
1875 vpaddd ymm8, ymm8, ymm13
1876 vpaddd ymm9, ymm9, ymm14
1877 vpxord ymm5, ymm5, ymm10
1878 vpxord ymm6, ymm6, ymm11
1879 vpxord ymm7, ymm7, ymm8
1880 vpxord ymm4, ymm4, ymm9
1881 vprord ymm5, ymm5, 7
1882 vprord ymm6, ymm6, 7
1883 vprord ymm7, ymm7, 7
1884 vprord ymm4, ymm4, 7
1885 vpaddd ymm0, ymm0, ymm27
1886 vpaddd ymm1, ymm1, ymm21
1887 vpaddd ymm2, ymm2, ymm17
1888 vpaddd ymm3, ymm3, ymm24
1889 vpaddd ymm0, ymm0, ymm4
1890 vpaddd ymm1, ymm1, ymm5
1891 vpaddd ymm2, ymm2, ymm6
1892 vpaddd ymm3, ymm3, ymm7
1893 vpxord ymm12, ymm12, ymm0
1894 vpxord ymm13, ymm13, ymm1
1895 vpxord ymm14, ymm14, ymm2
1896 vpxord ymm15, ymm15, ymm3
1897 vprord ymm12, ymm12, 16
1898 vprord ymm13, ymm13, 16
1899 vprord ymm14, ymm14, 16
1900 vprord ymm15, ymm15, 16
1901 vpaddd ymm8, ymm8, ymm12
1902 vpaddd ymm9, ymm9, ymm13
1903 vpaddd ymm10, ymm10, ymm14
1904 vpaddd ymm11, ymm11, ymm15
1905 vpxord ymm4, ymm4, ymm8
1906 vpxord ymm5, ymm5, ymm9
1907 vpxord ymm6, ymm6, ymm10
1908 vpxord ymm7, ymm7, ymm11
1909 vprord ymm4, ymm4, 12
1910 vprord ymm5, ymm5, 12
1911 vprord ymm6, ymm6, 12
1912 vprord ymm7, ymm7, 12
1913 vpaddd ymm0, ymm0, ymm31
1914 vpaddd ymm1, ymm1, ymm16
1915 vpaddd ymm2, ymm2, ymm25
1916 vpaddd ymm3, ymm3, ymm22
1917 vpaddd ymm0, ymm0, ymm4
1918 vpaddd ymm1, ymm1, ymm5
1919 vpaddd ymm2, ymm2, ymm6
1920 vpaddd ymm3, ymm3, ymm7
1921 vpxord ymm12, ymm12, ymm0
1922 vpxord ymm13, ymm13, ymm1
1923 vpxord ymm14, ymm14, ymm2
1924 vpxord ymm15, ymm15, ymm3
1925 vprord ymm12, ymm12, 8
1926 vprord ymm13, ymm13, 8
1927 vprord ymm14, ymm14, 8
1928 vprord ymm15, ymm15, 8
1929 vpaddd ymm8, ymm8, ymm12
1930 vpaddd ymm9, ymm9, ymm13
1931 vpaddd ymm10, ymm10, ymm14
1932 vpaddd ymm11, ymm11, ymm15
1933 vpxord ymm4, ymm4, ymm8
1934 vpxord ymm5, ymm5, ymm9
1935 vpxord ymm6, ymm6, ymm10
1936 vpxord ymm7, ymm7, ymm11
1937 vprord ymm4, ymm4, 7
1938 vprord ymm5, ymm5, 7
1939 vprord ymm6, ymm6, 7
1940 vprord ymm7, ymm7, 7
1941 vpaddd ymm0, ymm0, ymm30
1942 vpaddd ymm1, ymm1, ymm18
1943 vpaddd ymm2, ymm2, ymm19
1944 vpaddd ymm3, ymm3, ymm23
1945 vpaddd ymm0, ymm0, ymm5
1946 vpaddd ymm1, ymm1, ymm6
1947 vpaddd ymm2, ymm2, ymm7
1948 vpaddd ymm3, ymm3, ymm4
1949 vpxord ymm15, ymm15, ymm0
1950 vpxord ymm12, ymm12, ymm1
1951 vpxord ymm13, ymm13, ymm2
1952 vpxord ymm14, ymm14, ymm3
1953 vprord ymm15, ymm15, 16
1954 vprord ymm12, ymm12, 16
1955 vprord ymm13, ymm13, 16
1956 vprord ymm14, ymm14, 16
1957 vpaddd ymm10, ymm10, ymm15
1958 vpaddd ymm11, ymm11, ymm12
1959 vpaddd ymm8, ymm8, ymm13
1960 vpaddd ymm9, ymm9, ymm14
1961 vpxord ymm5, ymm5, ymm10
1962 vpxord ymm6, ymm6, ymm11
1963 vpxord ymm7, ymm7, ymm8
1964 vpxord ymm4, ymm4, ymm9
1965 vprord ymm5, ymm5, 12
1966 vprord ymm6, ymm6, 12
1967 vprord ymm7, ymm7, 12
1968 vprord ymm4, ymm4, 12
1969 vpaddd ymm0, ymm0, ymm26
1970 vpaddd ymm1, ymm1, ymm28
1971 vpaddd ymm2, ymm2, ymm20
1972 vpaddd ymm3, ymm3, ymm29
1973 vpaddd ymm0, ymm0, ymm5
1974 vpaddd ymm1, ymm1, ymm6
1975 vpaddd ymm2, ymm2, ymm7
1976 vpaddd ymm3, ymm3, ymm4
1977 vpxord ymm15, ymm15, ymm0
1978 vpxord ymm12, ymm12, ymm1
1979 vpxord ymm13, ymm13, ymm2
1980 vpxord ymm14, ymm14, ymm3
1981 vprord ymm15, ymm15, 8
1982 vprord ymm12, ymm12, 8
1983 vprord ymm13, ymm13, 8
1984 vprord ymm14, ymm14, 8
1985 vpaddd ymm10, ymm10, ymm15
1986 vpaddd ymm11, ymm11, ymm12
1987 vpaddd ymm8, ymm8, ymm13
1988 vpaddd ymm9, ymm9, ymm14
1989 vpxord ymm5, ymm5, ymm10
1990 vpxord ymm6, ymm6, ymm11
1991 vpxord ymm7, ymm7, ymm8
1992 vpxord ymm4, ymm4, ymm9
1993 vprord ymm5, ymm5, 7
1994 vprord ymm6, ymm6, 7
1995 vprord ymm7, ymm7, 7
1996 vprord ymm4, ymm4, 7
1997 vpxor ymm0, ymm0, ymm8
1998 vpxor ymm1, ymm1, ymm9
1999 vpxor ymm2, ymm2, ymm10
2000 vpxor ymm3, ymm3, ymm11
2001 vpxor ymm4, ymm4, ymm12
2002 vpxor ymm5, ymm5, ymm13
2003 vpxor ymm6, ymm6, ymm14
2004 vpxor ymm7, ymm7, ymm15
2005 movzx eax, byte ptr [rbp+0x78]
2006 jne 2b
2007 mov rbx, qword ptr [rbp+0x90]
2008 vunpcklps ymm8, ymm0, ymm1
2009 vunpcklps ymm9, ymm2, ymm3
2010 vunpckhps ymm10, ymm0, ymm1
2011 vunpcklps ymm11, ymm4, ymm5
2012 vunpcklps ymm0, ymm6, ymm7
2013 vshufps ymm12, ymm8, ymm9, 78
2014 vblendps ymm1, ymm8, ymm12, 0xCC
2015 vshufps ymm8, ymm11, ymm0, 78
2016 vunpckhps ymm13, ymm2, ymm3
2017 vblendps ymm2, ymm11, ymm8, 0xCC
2018 vblendps ymm3, ymm12, ymm9, 0xCC
2019 vperm2f128 ymm12, ymm1, ymm2, 0x20
2020 vmovups ymmword ptr [rbx], ymm12
2021 vunpckhps ymm14, ymm4, ymm5
2022 vblendps ymm4, ymm8, ymm0, 0xCC
2023 vunpckhps ymm15, ymm6, ymm7
2024 vperm2f128 ymm7, ymm3, ymm4, 0x20
2025 vmovups ymmword ptr [rbx+0x20], ymm7
2026 vshufps ymm5, ymm10, ymm13, 78
2027 vblendps ymm6, ymm5, ymm13, 0xCC
2028 vshufps ymm13, ymm14, ymm15, 78
2029 vblendps ymm10, ymm10, ymm5, 0xCC
2030 vblendps ymm14, ymm14, ymm13, 0xCC
2031 vperm2f128 ymm8, ymm10, ymm14, 0x20
2032 vmovups ymmword ptr [rbx+0x40], ymm8
2033 vblendps ymm15, ymm13, ymm15, 0xCC
2034 vperm2f128 ymm13, ymm6, ymm15, 0x20
2035 vmovups ymmword ptr [rbx+0x60], ymm13
2036 vperm2f128 ymm9, ymm1, ymm2, 0x31
2037 vperm2f128 ymm11, ymm3, ymm4, 0x31
2038 vmovups ymmword ptr [rbx+0x80], ymm9
2039 vperm2f128 ymm14, ymm10, ymm14, 0x31
2040 vperm2f128 ymm15, ymm6, ymm15, 0x31
2041 vmovups ymmword ptr [rbx+0xA0], ymm11
2042 vmovups ymmword ptr [rbx+0xC0], ymm14
2043 vmovups ymmword ptr [rbx+0xE0], ymm15
2044 vmovdqa ymm0, ymmword ptr [rsp]
2045 vmovdqa ymm2, ymmword ptr [rsp+0x40]
2046 vmovdqa32 ymm0 {k1}, ymmword ptr [rsp+0x1*0x20]
2047 vmovdqa32 ymm2 {k1}, ymmword ptr [rsp+0x3*0x20]
2048 vmovdqa ymmword ptr [rsp], ymm0
2049 vmovdqa ymmword ptr [rsp+0x40], ymm2
2050 add rbx, 256
2051 mov qword ptr [rbp+0x90], rbx
2052 add rdi, 64
2053 sub rsi, 8
20543:
2055 mov rbx, qword ptr [rbp+0x90]
2056 mov r15, qword ptr [rsp+0x80]
2057 movzx r13, byte ptr [rbp+0x78]
2058 movzx r12, byte ptr [rbp+0x88]
2059 test esi, 0x4
2060 je 3f
2061 vbroadcasti32x4 zmm0, xmmword ptr [rcx]
2062 vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x1*0x10]
2063 vmovdqa xmm12, xmmword ptr [rsp]
2064 vmovdqa xmm13, xmmword ptr [rsp+0x40]
2065 vpunpckldq xmm14, xmm12, xmm13
2066 vpunpckhdq xmm15, xmm12, xmm13
2067 vpermq ymm14, ymm14, 0xDC
2068 vpermq ymm15, ymm15, 0xDC
2069 vpbroadcastd zmm12, dword ptr [BLAKE3_BLOCK_LEN+rip]
2070 vinserti64x4 zmm13, zmm14, ymm15, 0x01
2071 mov eax, 17476
2072 kmovw k2, eax
2073 vpblendmd zmm13 {k2}, zmm13, zmm12
2074 vbroadcasti32x4 zmm15, xmmword ptr [BLAKE3_IV+rip]
2075 mov r8, qword ptr [rdi]
2076 mov r9, qword ptr [rdi+0x8]
2077 mov r10, qword ptr [rdi+0x10]
2078 mov r11, qword ptr [rdi+0x18]
2079 mov eax, 43690
2080 kmovw k3, eax
2081 mov eax, 34952
2082 kmovw k4, eax
2083 movzx eax, byte ptr [rbp+0x80]
2084 or eax, r13d
2085 xor edx, edx
2086.p2align 5
20872:
2088 mov r14d, eax
2089 or eax, r12d
2090 add rdx, 64
2091 cmp rdx, r15
2092 cmovne eax, r14d
2093 mov dword ptr [rsp+0x88], eax
2094 vmovdqa32 zmm2, zmm15
2095 vpbroadcastd zmm8, dword ptr [rsp+0x22*0x4]
2096 vpblendmd zmm3 {k4}, zmm13, zmm8
2097 vmovups zmm8, zmmword ptr [r8+rdx-0x1*0x40]
2098 vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x4*0x10], 0x01
2099 vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x4*0x10], 0x02
2100 vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x4*0x10], 0x03
2101 vmovups zmm9, zmmword ptr [r8+rdx-0x30]
2102 vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x3*0x10], 0x01
2103 vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x3*0x10], 0x02
2104 vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x3*0x10], 0x03
2105 vshufps zmm4, zmm8, zmm9, 136
2106 vshufps zmm5, zmm8, zmm9, 221
2107 vmovups zmm8, zmmword ptr [r8+rdx-0x20]
2108 vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x2*0x10], 0x01
2109 vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x2*0x10], 0x02
2110 vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x2*0x10], 0x03
2111 vmovups zmm9, zmmword ptr [r8+rdx-0x10]
2112 vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x1*0x10], 0x01
2113 vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x1*0x10], 0x02
2114 vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x1*0x10], 0x03
2115 vshufps zmm6, zmm8, zmm9, 136
2116 vshufps zmm7, zmm8, zmm9, 221
2117 vpshufd zmm6, zmm6, 0x93
2118 vpshufd zmm7, zmm7, 0x93
2119 mov al, 7
21209:
2121 vpaddd zmm0, zmm0, zmm4
2122 vpaddd zmm0, zmm0, zmm1
2123 vpxord zmm3, zmm3, zmm0
2124 vprord zmm3, zmm3, 16
2125 vpaddd zmm2, zmm2, zmm3
2126 vpxord zmm1, zmm1, zmm2
2127 vprord zmm1, zmm1, 12
2128 vpaddd zmm0, zmm0, zmm5
2129 vpaddd zmm0, zmm0, zmm1
2130 vpxord zmm3, zmm3, zmm0
2131 vprord zmm3, zmm3, 8
2132 vpaddd zmm2, zmm2, zmm3
2133 vpxord zmm1, zmm1, zmm2
2134 vprord zmm1, zmm1, 7
2135 vpshufd zmm0, zmm0, 0x93
2136 vpshufd zmm3, zmm3, 0x4E
2137 vpshufd zmm2, zmm2, 0x39
2138 vpaddd zmm0, zmm0, zmm6
2139 vpaddd zmm0, zmm0, zmm1
2140 vpxord zmm3, zmm3, zmm0
2141 vprord zmm3, zmm3, 16
2142 vpaddd zmm2, zmm2, zmm3
2143 vpxord zmm1, zmm1, zmm2
2144 vprord zmm1, zmm1, 12
2145 vpaddd zmm0, zmm0, zmm7
2146 vpaddd zmm0, zmm0, zmm1
2147 vpxord zmm3, zmm3, zmm0
2148 vprord zmm3, zmm3, 8
2149 vpaddd zmm2, zmm2, zmm3
2150 vpxord zmm1, zmm1, zmm2
2151 vprord zmm1, zmm1, 7
2152 vpshufd zmm0, zmm0, 0x39
2153 vpshufd zmm3, zmm3, 0x4E
2154 vpshufd zmm2, zmm2, 0x93
2155 dec al
2156 jz 9f
2157 vshufps zmm8, zmm4, zmm5, 214
2158 vpshufd zmm9, zmm4, 0x0F
2159 vpshufd zmm4, zmm8, 0x39
2160 vshufps zmm8, zmm6, zmm7, 250
2161 vpblendmd zmm9 {k3}, zmm9, zmm8
2162 vpunpcklqdq zmm8, zmm7, zmm5
2163 vpblendmd zmm8 {k4}, zmm8, zmm6
2164 vpshufd zmm8, zmm8, 0x78
2165 vpunpckhdq zmm5, zmm5, zmm7
2166 vpunpckldq zmm6, zmm6, zmm5
2167 vpshufd zmm7, zmm6, 0x1E
2168 vmovdqa32 zmm5, zmm9
2169 vmovdqa32 zmm6, zmm8
2170 jmp 9b
21719:
2172 vpxord zmm0, zmm0, zmm2
2173 vpxord zmm1, zmm1, zmm3
2174 mov eax, r13d
2175 cmp rdx, r15
2176 jne 2b
2177 vmovdqu xmmword ptr [rbx], xmm0
2178 vmovdqu xmmword ptr [rbx+0x10], xmm1
2179 vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2180 vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2181 vextracti32x4 xmmword ptr [rbx+0x4*0x10], zmm0, 0x02
2182 vextracti32x4 xmmword ptr [rbx+0x5*0x10], zmm1, 0x02
2183 vextracti32x4 xmmword ptr [rbx+0x6*0x10], zmm0, 0x03
2184 vextracti32x4 xmmword ptr [rbx+0x7*0x10], zmm1, 0x03
2185 vmovdqa xmm0, xmmword ptr [rsp]
2186 vmovdqa xmm2, xmmword ptr [rsp+0x40]
2187 vmovdqa32 xmm0 {k1}, xmmword ptr [rsp+0x1*0x10]
2188 vmovdqa32 xmm2 {k1}, xmmword ptr [rsp+0x5*0x10]
2189 vmovdqa xmmword ptr [rsp], xmm0
2190 vmovdqa xmmword ptr [rsp+0x40], xmm2
2191 add rbx, 128
2192 add rdi, 32
2193 sub rsi, 4
21943:
2195 test esi, 0x2
2196 je 3f
2197 vbroadcasti128 ymm0, xmmword ptr [rcx]
2198 vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
2199 vmovd xmm13, dword ptr [rsp]
2200 vpinsrd xmm13, xmm13, dword ptr [rsp+0x40], 1
2201 vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2202 vmovd xmm14, dword ptr [rsp+0x4]
2203 vpinsrd xmm14, xmm14, dword ptr [rsp+0x44], 1
2204 vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2205 vinserti128 ymm13, ymm13, xmm14, 0x01
2206 mov r8, qword ptr [rdi]
2207 mov r9, qword ptr [rdi+0x8]
2208 movzx eax, byte ptr [rbp+0x80]
2209 or eax, r13d
2210 xor edx, edx
2211.p2align 5
22122:
2213 mov r14d, eax
2214 or eax, r12d
2215 add rdx, 64
2216 cmp rdx, r15
2217 cmovne eax, r14d
2218 mov dword ptr [rsp+0x88], eax
2219 vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
2220 vpbroadcastd ymm8, dword ptr [rsp+0x88]
2221 vpblendd ymm3, ymm13, ymm8, 0x88
2222 vmovups ymm8, ymmword ptr [r8+rdx-0x40]
2223 vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x40], 0x01
2224 vmovups ymm9, ymmword ptr [r8+rdx-0x30]
2225 vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x30], 0x01
2226 vshufps ymm4, ymm8, ymm9, 136
2227 vshufps ymm5, ymm8, ymm9, 221
2228 vmovups ymm8, ymmword ptr [r8+rdx-0x20]
2229 vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x20], 0x01
2230 vmovups ymm9, ymmword ptr [r8+rdx-0x10]
2231 vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x10], 0x01
2232 vshufps ymm6, ymm8, ymm9, 136
2233 vshufps ymm7, ymm8, ymm9, 221
2234 vpshufd ymm6, ymm6, 0x93
2235 vpshufd ymm7, ymm7, 0x93
2236 mov al, 7
22379:
2238 vpaddd ymm0, ymm0, ymm4
2239 vpaddd ymm0, ymm0, ymm1
2240 vpxord ymm3, ymm3, ymm0
2241 vprord ymm3, ymm3, 16
2242 vpaddd ymm2, ymm2, ymm3
2243 vpxord ymm1, ymm1, ymm2
2244 vprord ymm1, ymm1, 12
2245 vpaddd ymm0, ymm0, ymm5
2246 vpaddd ymm0, ymm0, ymm1
2247 vpxord ymm3, ymm3, ymm0
2248 vprord ymm3, ymm3, 8
2249 vpaddd ymm2, ymm2, ymm3
2250 vpxord ymm1, ymm1, ymm2
2251 vprord ymm1, ymm1, 7
2252 vpshufd ymm0, ymm0, 0x93
2253 vpshufd ymm3, ymm3, 0x4E
2254 vpshufd ymm2, ymm2, 0x39
2255 vpaddd ymm0, ymm0, ymm6
2256 vpaddd ymm0, ymm0, ymm1
2257 vpxord ymm3, ymm3, ymm0
2258 vprord ymm3, ymm3, 16
2259 vpaddd ymm2, ymm2, ymm3
2260 vpxord ymm1, ymm1, ymm2
2261 vprord ymm1, ymm1, 12
2262 vpaddd ymm0, ymm0, ymm7
2263 vpaddd ymm0, ymm0, ymm1
2264 vpxord ymm3, ymm3, ymm0
2265 vprord ymm3, ymm3, 8
2266 vpaddd ymm2, ymm2, ymm3
2267 vpxord ymm1, ymm1, ymm2
2268 vprord ymm1, ymm1, 7
2269 vpshufd ymm0, ymm0, 0x39
2270 vpshufd ymm3, ymm3, 0x4E
2271 vpshufd ymm2, ymm2, 0x93
2272 dec al
2273 jz 9f
2274 vshufps ymm8, ymm4, ymm5, 214
2275 vpshufd ymm9, ymm4, 0x0F
2276 vpshufd ymm4, ymm8, 0x39
2277 vshufps ymm8, ymm6, ymm7, 250
2278 vpblendd ymm9, ymm9, ymm8, 0xAA
2279 vpunpcklqdq ymm8, ymm7, ymm5
2280 vpblendd ymm8, ymm8, ymm6, 0x88
2281 vpshufd ymm8, ymm8, 0x78
2282 vpunpckhdq ymm5, ymm5, ymm7
2283 vpunpckldq ymm6, ymm6, ymm5
2284 vpshufd ymm7, ymm6, 0x1E
2285 vmovdqa ymm5, ymm9
2286 vmovdqa ymm6, ymm8
2287 jmp 9b
22889:
2289 vpxor ymm0, ymm0, ymm2
2290 vpxor ymm1, ymm1, ymm3
2291 mov eax, r13d
2292 cmp rdx, r15
2293 jne 2b
2294 vmovdqu xmmword ptr [rbx], xmm0
2295 vmovdqu xmmword ptr [rbx+0x10], xmm1
2296 vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2297 vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2298 vmovdqa xmm0, xmmword ptr [rsp]
2299 vmovdqa xmm2, xmmword ptr [rsp+0x40]
2300 vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+0x8]
2301 vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+0x48]
2302 vmovdqa xmmword ptr [rsp], xmm0
2303 vmovdqa xmmword ptr [rsp+0x40], xmm2
2304 add rbx, 64
2305 add rdi, 16
2306 sub rsi, 2
23073:
2308 test esi, 0x1
2309 je 4b
2310 vmovdqu xmm0, xmmword ptr [rcx]
2311 vmovdqu xmm1, xmmword ptr [rcx+0x10]
2312 vmovd xmm14, dword ptr [rsp]
2313 vpinsrd xmm14, xmm14, dword ptr [rsp+0x40], 1
2314 vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2315 vmovdqa xmm15, xmmword ptr [BLAKE3_IV+rip]
2316 mov r8, qword ptr [rdi]
2317 movzx eax, byte ptr [rbp+0x80]
2318 or eax, r13d
2319 xor edx, edx
2320.p2align 5
23212:
2322 mov r14d, eax
2323 or eax, r12d
2324 add rdx, 64
2325 cmp rdx, r15
2326 cmovne eax, r14d
2327 vpinsrd xmm3, xmm14, eax, 3
2328 vmovdqa xmm2, xmm15
2329 vmovups xmm8, xmmword ptr [r8+rdx-0x40]
2330 vmovups xmm9, xmmword ptr [r8+rdx-0x30]
2331 vshufps xmm4, xmm8, xmm9, 136
2332 vshufps xmm5, xmm8, xmm9, 221
2333 vmovups xmm8, xmmword ptr [r8+rdx-0x20]
2334 vmovups xmm9, xmmword ptr [r8+rdx-0x10]
2335 vshufps xmm6, xmm8, xmm9, 136
2336 vshufps xmm7, xmm8, xmm9, 221
2337 vpshufd xmm6, xmm6, 0x93
2338 vpshufd xmm7, xmm7, 0x93
2339 mov al, 7
23409:
2341 vpaddd xmm0, xmm0, xmm4
2342 vpaddd xmm0, xmm0, xmm1
2343 vpxord xmm3, xmm3, xmm0
2344 vprord xmm3, xmm3, 16
2345 vpaddd xmm2, xmm2, xmm3
2346 vpxord xmm1, xmm1, xmm2
2347 vprord xmm1, xmm1, 12
2348 vpaddd xmm0, xmm0, xmm5
2349 vpaddd xmm0, xmm0, xmm1
2350 vpxord xmm3, xmm3, xmm0
2351 vprord xmm3, xmm3, 8
2352 vpaddd xmm2, xmm2, xmm3
2353 vpxord xmm1, xmm1, xmm2
2354 vprord xmm1, xmm1, 7
2355 vpshufd xmm0, xmm0, 0x93
2356 vpshufd xmm3, xmm3, 0x4E
2357 vpshufd xmm2, xmm2, 0x39
2358 vpaddd xmm0, xmm0, xmm6
2359 vpaddd xmm0, xmm0, xmm1
2360 vpxord xmm3, xmm3, xmm0
2361 vprord xmm3, xmm3, 16
2362 vpaddd xmm2, xmm2, xmm3
2363 vpxord xmm1, xmm1, xmm2
2364 vprord xmm1, xmm1, 12
2365 vpaddd xmm0, xmm0, xmm7
2366 vpaddd xmm0, xmm0, xmm1
2367 vpxord xmm3, xmm3, xmm0
2368 vprord xmm3, xmm3, 8
2369 vpaddd xmm2, xmm2, xmm3
2370 vpxord xmm1, xmm1, xmm2
2371 vprord xmm1, xmm1, 7
2372 vpshufd xmm0, xmm0, 0x39
2373 vpshufd xmm3, xmm3, 0x4E
2374 vpshufd xmm2, xmm2, 0x93
2375 dec al
2376 jz 9f
2377 vshufps xmm8, xmm4, xmm5, 214
2378 vpshufd xmm9, xmm4, 0x0F
2379 vpshufd xmm4, xmm8, 0x39
2380 vshufps xmm8, xmm6, xmm7, 250
2381 vpblendd xmm9, xmm9, xmm8, 0xAA
2382 vpunpcklqdq xmm8, xmm7, xmm5
2383 vpblendd xmm8, xmm8, xmm6, 0x88
2384 vpshufd xmm8, xmm8, 0x78
2385 vpunpckhdq xmm5, xmm5, xmm7
2386 vpunpckldq xmm6, xmm6, xmm5
2387 vpshufd xmm7, xmm6, 0x1E
2388 vmovdqa xmm5, xmm9
2389 vmovdqa xmm6, xmm8
2390 jmp 9b
23919:
2392 vpxor xmm0, xmm0, xmm2
2393 vpxor xmm1, xmm1, xmm3
2394 mov eax, r13d
2395 cmp rdx, r15
2396 jne 2b
2397 vmovdqu xmmword ptr [rbx], xmm0
2398 vmovdqu xmmword ptr [rbx+0x10], xmm1
2399 jmp 4b
2400
2401
2402.p2align 6
2403_blake3_compress_in_place_avx512:
2404blake3_compress_in_place_avx512:
2405 sub rsp, 72
2406 vmovdqa xmmword ptr [rsp], xmm6
2407 vmovdqa xmmword ptr [rsp+0x10], xmm7
2408 vmovdqa xmmword ptr [rsp+0x20], xmm8
2409 vmovdqa xmmword ptr [rsp+0x30], xmm9
2410 vmovdqu xmm0, xmmword ptr [rcx]
2411 vmovdqu xmm1, xmmword ptr [rcx+0x10]
2412 movzx eax, byte ptr [rsp+0x70]
2413 movzx r8d, r8b
2414 shl rax, 32
2415 add r8, rax
2416 vmovq xmm3, r9
2417 vmovq xmm4, r8
2418 vpunpcklqdq xmm3, xmm3, xmm4
2419 vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2420 vmovups xmm8, xmmword ptr [rdx]
2421 vmovups xmm9, xmmword ptr [rdx+0x10]
2422 vshufps xmm4, xmm8, xmm9, 136
2423 vshufps xmm5, xmm8, xmm9, 221
2424 vmovups xmm8, xmmword ptr [rdx+0x20]
2425 vmovups xmm9, xmmword ptr [rdx+0x30]
2426 vshufps xmm6, xmm8, xmm9, 136
2427 vshufps xmm7, xmm8, xmm9, 221
2428 vpshufd xmm6, xmm6, 0x93
2429 vpshufd xmm7, xmm7, 0x93
2430 mov al, 7
24319:
2432 vpaddd xmm0, xmm0, xmm4
2433 vpaddd xmm0, xmm0, xmm1
2434 vpxord xmm3, xmm3, xmm0
2435 vprord xmm3, xmm3, 16
2436 vpaddd xmm2, xmm2, xmm3
2437 vpxord xmm1, xmm1, xmm2
2438 vprord xmm1, xmm1, 12
2439 vpaddd xmm0, xmm0, xmm5
2440 vpaddd xmm0, xmm0, xmm1
2441 vpxord xmm3, xmm3, xmm0
2442 vprord xmm3, xmm3, 8
2443 vpaddd xmm2, xmm2, xmm3
2444 vpxord xmm1, xmm1, xmm2
2445 vprord xmm1, xmm1, 7
2446 vpshufd xmm0, xmm0, 0x93
2447 vpshufd xmm3, xmm3, 0x4E
2448 vpshufd xmm2, xmm2, 0x39
2449 vpaddd xmm0, xmm0, xmm6
2450 vpaddd xmm0, xmm0, xmm1
2451 vpxord xmm3, xmm3, xmm0
2452 vprord xmm3, xmm3, 16
2453 vpaddd xmm2, xmm2, xmm3
2454 vpxord xmm1, xmm1, xmm2
2455 vprord xmm1, xmm1, 12
2456 vpaddd xmm0, xmm0, xmm7
2457 vpaddd xmm0, xmm0, xmm1
2458 vpxord xmm3, xmm3, xmm0
2459 vprord xmm3, xmm3, 8
2460 vpaddd xmm2, xmm2, xmm3
2461 vpxord xmm1, xmm1, xmm2
2462 vprord xmm1, xmm1, 7
2463 vpshufd xmm0, xmm0, 0x39
2464 vpshufd xmm3, xmm3, 0x4E
2465 vpshufd xmm2, xmm2, 0x93
2466 dec al
2467 jz 9f
2468 vshufps xmm8, xmm4, xmm5, 214
2469 vpshufd xmm9, xmm4, 0x0F
2470 vpshufd xmm4, xmm8, 0x39
2471 vshufps xmm8, xmm6, xmm7, 250
2472 vpblendd xmm9, xmm9, xmm8, 0xAA
2473 vpunpcklqdq xmm8, xmm7, xmm5
2474 vpblendd xmm8, xmm8, xmm6, 0x88
2475 vpshufd xmm8, xmm8, 0x78
2476 vpunpckhdq xmm5, xmm5, xmm7
2477 vpunpckldq xmm6, xmm6, xmm5
2478 vpshufd xmm7, xmm6, 0x1E
2479 vmovdqa xmm5, xmm9
2480 vmovdqa xmm6, xmm8
2481 jmp 9b
24829:
2483 vpxor xmm0, xmm0, xmm2
2484 vpxor xmm1, xmm1, xmm3
2485 vmovdqu xmmword ptr [rcx], xmm0
2486 vmovdqu xmmword ptr [rcx+0x10], xmm1
2487 vmovdqa xmm6, xmmword ptr [rsp]
2488 vmovdqa xmm7, xmmword ptr [rsp+0x10]
2489 vmovdqa xmm8, xmmword ptr [rsp+0x20]
2490 vmovdqa xmm9, xmmword ptr [rsp+0x30]
2491 add rsp, 72
2492 ret
2493
2494
2495.p2align 6
2496_blake3_compress_xof_avx512:
2497blake3_compress_xof_avx512:
2498 sub rsp, 72
2499 vmovdqa xmmword ptr [rsp], xmm6
2500 vmovdqa xmmword ptr [rsp+0x10], xmm7
2501 vmovdqa xmmword ptr [rsp+0x20], xmm8
2502 vmovdqa xmmword ptr [rsp+0x30], xmm9
2503 vmovdqu xmm0, xmmword ptr [rcx]
2504 vmovdqu xmm1, xmmword ptr [rcx+0x10]
2505 movzx eax, byte ptr [rsp+0x70]
2506 movzx r8d, r8b
2507 mov r10, qword ptr [rsp+0x78]
2508 shl rax, 32
2509 add r8, rax
2510 vmovq xmm3, r9
2511 vmovq xmm4, r8
2512 vpunpcklqdq xmm3, xmm3, xmm4
2513 vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2514 vmovups xmm8, xmmword ptr [rdx]
2515 vmovups xmm9, xmmword ptr [rdx+0x10]
2516 vshufps xmm4, xmm8, xmm9, 136
2517 vshufps xmm5, xmm8, xmm9, 221
2518 vmovups xmm8, xmmword ptr [rdx+0x20]
2519 vmovups xmm9, xmmword ptr [rdx+0x30]
2520 vshufps xmm6, xmm8, xmm9, 136
2521 vshufps xmm7, xmm8, xmm9, 221
2522 vpshufd xmm6, xmm6, 0x93
2523 vpshufd xmm7, xmm7, 0x93
2524 mov al, 7
25259:
2526 vpaddd xmm0, xmm0, xmm4
2527 vpaddd xmm0, xmm0, xmm1
2528 vpxord xmm3, xmm3, xmm0
2529 vprord xmm3, xmm3, 16
2530 vpaddd xmm2, xmm2, xmm3
2531 vpxord xmm1, xmm1, xmm2
2532 vprord xmm1, xmm1, 12
2533 vpaddd xmm0, xmm0, xmm5
2534 vpaddd xmm0, xmm0, xmm1
2535 vpxord xmm3, xmm3, xmm0
2536 vprord xmm3, xmm3, 8
2537 vpaddd xmm2, xmm2, xmm3
2538 vpxord xmm1, xmm1, xmm2
2539 vprord xmm1, xmm1, 7
2540 vpshufd xmm0, xmm0, 0x93
2541 vpshufd xmm3, xmm3, 0x4E
2542 vpshufd xmm2, xmm2, 0x39
2543 vpaddd xmm0, xmm0, xmm6
2544 vpaddd xmm0, xmm0, xmm1
2545 vpxord xmm3, xmm3, xmm0
2546 vprord xmm3, xmm3, 16
2547 vpaddd xmm2, xmm2, xmm3
2548 vpxord xmm1, xmm1, xmm2
2549 vprord xmm1, xmm1, 12
2550 vpaddd xmm0, xmm0, xmm7
2551 vpaddd xmm0, xmm0, xmm1
2552 vpxord xmm3, xmm3, xmm0
2553 vprord xmm3, xmm3, 8
2554 vpaddd xmm2, xmm2, xmm3
2555 vpxord xmm1, xmm1, xmm2
2556 vprord xmm1, xmm1, 7
2557 vpshufd xmm0, xmm0, 0x39
2558 vpshufd xmm3, xmm3, 0x4E
2559 vpshufd xmm2, xmm2, 0x93
2560 dec al
2561 jz 9f
2562 vshufps xmm8, xmm4, xmm5, 214
2563 vpshufd xmm9, xmm4, 0x0F
2564 vpshufd xmm4, xmm8, 0x39
2565 vshufps xmm8, xmm6, xmm7, 250
2566 vpblendd xmm9, xmm9, xmm8, 0xAA
2567 vpunpcklqdq xmm8, xmm7, xmm5
2568 vpblendd xmm8, xmm8, xmm6, 0x88
2569 vpshufd xmm8, xmm8, 0x78
2570 vpunpckhdq xmm5, xmm5, xmm7
2571 vpunpckldq xmm6, xmm6, xmm5
2572 vpshufd xmm7, xmm6, 0x1E
2573 vmovdqa xmm5, xmm9
2574 vmovdqa xmm6, xmm8
2575 jmp 9b
25769:
2577 vpxor xmm0, xmm0, xmm2
2578 vpxor xmm1, xmm1, xmm3
2579 vpxor xmm2, xmm2, xmmword ptr [rcx]
2580 vpxor xmm3, xmm3, xmmword ptr [rcx+0x10]
2581 vmovdqu xmmword ptr [r10], xmm0
2582 vmovdqu xmmword ptr [r10+0x10], xmm1
2583 vmovdqu xmmword ptr [r10+0x20], xmm2
2584 vmovdqu xmmword ptr [r10+0x30], xmm3
2585 vmovdqa xmm6, xmmword ptr [rsp]
2586 vmovdqa xmm7, xmmword ptr [rsp+0x10]
2587 vmovdqa xmm8, xmmword ptr [rsp+0x20]
2588 vmovdqa xmm9, xmmword ptr [rsp+0x30]
2589 add rsp, 72
2590 ret
2591
2592.section .rodata
2593.p2align 6
2594INDEX0:
2595 .long 0, 1, 2, 3, 16, 17, 18, 19
2596 .long 8, 9, 10, 11, 24, 25, 26, 27
2597INDEX1:
2598 .long 4, 5, 6, 7, 20, 21, 22, 23
2599 .long 12, 13, 14, 15, 28, 29, 30, 31
2600ADD0:
2601 .long 0, 1, 2, 3, 4, 5, 6, 7
2602 .long 8, 9, 10, 11, 12, 13, 14, 15
2603ADD1: .long 1
2604
2605ADD16: .long 16
2606BLAKE3_BLOCK_LEN:
2607 .long 64
2608.p2align 6
2609BLAKE3_IV:
2610BLAKE3_IV_0:
2611 .long 0x6A09E667
2612BLAKE3_IV_1:
2613 .long 0xBB67AE85
2614BLAKE3_IV_2:
2615 .long 0x3C6EF372
2616BLAKE3_IV_3:
2617 .long 0xA54FF53A
2618

source code of llvm/lib/Support/BLAKE3/blake3_avx512_x86-64_windows_gnu.S