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