digest-blake3 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2634 @@
1
+ public _blake3_hash_many_avx512
2
+ public blake3_hash_many_avx512
3
+ public blake3_compress_in_place_avx512
4
+ public _blake3_compress_in_place_avx512
5
+ public blake3_compress_xof_avx512
6
+ public _blake3_compress_xof_avx512
7
+
8
+ _TEXT SEGMENT ALIGN(16) 'CODE'
9
+
10
+ ALIGN 16
11
+ blake3_hash_many_avx512 PROC
12
+ _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
+ vinserti32x8 zmm16, zmm16, ymmword ptr [rdx+r12-2H*20H], 01H
103
+ vmovdqu32 ymm17, ymmword ptr [rdx+r9-2H*20H]
104
+ vinserti32x8 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
+ vinserti32x8 zmm18, zmm18, ymmword ptr [rdx+r14-2H*20H], 01H
109
+ vmovdqu32 ymm19, ymmword ptr [rdx+r11-2H*20H]
110
+ vinserti32x8 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
+ vinserti32x8 zmm16, zmm16, ymmword ptr [rdx+r12-2H*20H], 01H
123
+ vmovdqu32 ymm17, ymmword ptr [rdx+r9-2H*20H]
124
+ vinserti32x8 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
+ vinserti32x8 zmm18, zmm18, ymmword ptr [rdx+r14-2H*20H], 01H
129
+ vmovdqu32 ymm19, ymmword ptr [rdx+r11-2H*20H]
130
+ vinserti32x8 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
+ vinserti32x8 zmm24, zmm24, ymmword ptr [r12+rdx-1H*20H], 01H
165
+ vmovdqu32 ymm25, ymmword ptr [r9+rdx-1H*20H]
166
+ vinserti32x8 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
+ vinserti32x8 zmm24, zmm24, ymmword ptr [r14+rdx-1H*20H], 01H
171
+ vmovdqu32 ymm25, ymmword ptr [r11+rdx-1H*20H]
172
+ vinserti32x8 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
+ vinserti32x8 zmm24, zmm24, ymmword ptr [r12+rdx-1H*20H], 01H
193
+ vmovdqu32 ymm25, ymmword ptr [r9+rdx-1H*20H]
194
+ vinserti32x8 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
+ vinserti32x8 zmm24, zmm24, ymmword ptr [r14+rdx-1H*20H], 01H
199
+ vmovdqu32 ymm25, ymmword ptr [r11+rdx-1H*20H]
200
+ vinserti32x8 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
1115
+ ret
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
+ vinserti32x8 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
2406
+
2407
+ _blake3_hash_many_avx512 ENDP
2408
+ blake3_hash_many_avx512 ENDP
2409
+
2410
+ ALIGN 16
2411
+ blake3_compress_in_place_avx512 PROC
2412
+ _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
2439
+ @@:
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
2490
+ @@:
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
2500
+ ret
2501
+ _blake3_compress_in_place_avx512 ENDP
2502
+ blake3_compress_in_place_avx512 ENDP
2503
+
2504
+ ALIGN 16
2505
+ blake3_compress_xof_avx512 PROC
2506
+ _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
2534
+ @@:
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
2585
+ @@:
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
2599
+ ret
2600
+ _blake3_compress_xof_avx512 ENDP
2601
+ blake3_compress_xof_avx512 ENDP
2602
+
2603
+ _TEXT ENDS
2604
+
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
2632
+
2633
+ _RDATA ENDS
2634
+ END