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,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