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