digest-blake3 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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