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,1828 @@
1
+ public _blake3_hash_many_avx2
2
+ public blake3_hash_many_avx2
3
+
4
+ _TEXT SEGMENT ALIGN(16) 'CODE'
5
+
6
+ ALIGN 16
7
+ blake3_hash_many_avx2 PROC
8
+ _blake3_hash_many_avx2 PROC
9
+ push r15
10
+ push r14
11
+ push r13
12
+ push r12
13
+ push rsi
14
+ push rdi
15
+ push rbx
16
+ push rbp
17
+ mov rbp, rsp
18
+ sub rsp, 880
19
+ and rsp, 0FFFFFFFFFFFFFFC0H
20
+ vmovdqa xmmword ptr [rsp+2D0H], xmm6
21
+ vmovdqa xmmword ptr [rsp+2E0H], xmm7
22
+ vmovdqa xmmword ptr [rsp+2F0H], xmm8
23
+ vmovdqa xmmword ptr [rsp+300H], xmm9
24
+ vmovdqa xmmword ptr [rsp+310H], xmm10
25
+ vmovdqa xmmword ptr [rsp+320H], xmm11
26
+ vmovdqa xmmword ptr [rsp+330H], xmm12
27
+ vmovdqa xmmword ptr [rsp+340H], xmm13
28
+ vmovdqa xmmword ptr [rsp+350H], xmm14
29
+ vmovdqa xmmword ptr [rsp+360H], xmm15
30
+ mov rdi, rcx
31
+ mov rsi, rdx
32
+ mov rdx, r8
33
+ mov rcx, r9
34
+ mov r8, qword ptr [rbp+68H]
35
+ movzx r9, byte ptr [rbp+70H]
36
+ neg r9d
37
+ vmovd xmm0, r9d
38
+ vpbroadcastd ymm0, xmm0
39
+ vmovdqa ymmword ptr [rsp+260H], ymm0
40
+ vpand ymm1, ymm0, ymmword ptr [ADD0]
41
+ vpand ymm2, ymm0, ymmword ptr [ADD1]
42
+ vmovdqa ymmword ptr [rsp+2A0H], ymm2
43
+ vmovd xmm2, r8d
44
+ vpbroadcastd ymm2, xmm2
45
+ vpaddd ymm2, ymm2, ymm1
46
+ vmovdqa ymmword ptr [rsp+220H], ymm2
47
+ vpxor ymm1, ymm1, ymmword ptr [CMP_MSB_MASK]
48
+ vpxor ymm2, ymm2, ymmword ptr [CMP_MSB_MASK]
49
+ vpcmpgtd ymm2, ymm1, ymm2
50
+ shr r8, 32
51
+ vmovd xmm3, r8d
52
+ vpbroadcastd ymm3, xmm3
53
+ vpsubd ymm3, ymm3, ymm2
54
+ vmovdqa ymmword ptr [rsp+240H], ymm3
55
+ shl rdx, 6
56
+ mov qword ptr [rsp+2C0H], rdx
57
+ cmp rsi, 8
58
+ jc final7blocks
59
+ outerloop8:
60
+ vpbroadcastd ymm0, dword ptr [rcx]
61
+ vpbroadcastd ymm1, dword ptr [rcx+4H]
62
+ vpbroadcastd ymm2, dword ptr [rcx+8H]
63
+ vpbroadcastd ymm3, dword ptr [rcx+0CH]
64
+ vpbroadcastd ymm4, dword ptr [rcx+10H]
65
+ vpbroadcastd ymm5, dword ptr [rcx+14H]
66
+ vpbroadcastd ymm6, dword ptr [rcx+18H]
67
+ vpbroadcastd ymm7, dword ptr [rcx+1CH]
68
+ mov r8, qword ptr [rdi]
69
+ mov r9, qword ptr [rdi+8H]
70
+ mov r10, qword ptr [rdi+10H]
71
+ mov r11, qword ptr [rdi+18H]
72
+ mov r12, qword ptr [rdi+20H]
73
+ mov r13, qword ptr [rdi+28H]
74
+ mov r14, qword ptr [rdi+30H]
75
+ mov r15, qword ptr [rdi+38H]
76
+ movzx eax, byte ptr [rbp+78H]
77
+ movzx ebx, byte ptr [rbp+80H]
78
+ or eax, ebx
79
+ xor edx, edx
80
+ ALIGN 16
81
+ innerloop8:
82
+ movzx ebx, byte ptr [rbp+88H]
83
+ or ebx, eax
84
+ add rdx, 64
85
+ cmp rdx, qword ptr [rsp+2C0H]
86
+ cmove eax, ebx
87
+ mov dword ptr [rsp+200H], eax
88
+ vmovups xmm8, xmmword ptr [r8+rdx-40H]
89
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-40H], 01H
90
+ vmovups xmm9, xmmword ptr [r9+rdx-40H]
91
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-40H], 01H
92
+ vunpcklpd ymm12, ymm8, ymm9
93
+ vunpckhpd ymm13, ymm8, ymm9
94
+ vmovups xmm10, xmmword ptr [r10+rdx-40H]
95
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-40H], 01H
96
+ vmovups xmm11, xmmword ptr [r11+rdx-40H]
97
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-40H], 01H
98
+ vunpcklpd ymm14, ymm10, ymm11
99
+ vunpckhpd ymm15, ymm10, ymm11
100
+ vshufps ymm8, ymm12, ymm14, 136
101
+ vmovaps ymmword ptr [rsp], ymm8
102
+ vshufps ymm9, ymm12, ymm14, 221
103
+ vmovaps ymmword ptr [rsp+20H], ymm9
104
+ vshufps ymm10, ymm13, ymm15, 136
105
+ vmovaps ymmword ptr [rsp+40H], ymm10
106
+ vshufps ymm11, ymm13, ymm15, 221
107
+ vmovaps ymmword ptr [rsp+60H], ymm11
108
+ vmovups xmm8, xmmword ptr [r8+rdx-30H]
109
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-30H], 01H
110
+ vmovups xmm9, xmmword ptr [r9+rdx-30H]
111
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-30H], 01H
112
+ vunpcklpd ymm12, ymm8, ymm9
113
+ vunpckhpd ymm13, ymm8, ymm9
114
+ vmovups xmm10, xmmword ptr [r10+rdx-30H]
115
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-30H], 01H
116
+ vmovups xmm11, xmmword ptr [r11+rdx-30H]
117
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-30H], 01H
118
+ vunpcklpd ymm14, ymm10, ymm11
119
+ vunpckhpd ymm15, ymm10, ymm11
120
+ vshufps ymm8, ymm12, ymm14, 136
121
+ vmovaps ymmword ptr [rsp+80H], ymm8
122
+ vshufps ymm9, ymm12, ymm14, 221
123
+ vmovaps ymmword ptr [rsp+0A0H], ymm9
124
+ vshufps ymm10, ymm13, ymm15, 136
125
+ vmovaps ymmword ptr [rsp+0C0H], ymm10
126
+ vshufps ymm11, ymm13, ymm15, 221
127
+ vmovaps ymmword ptr [rsp+0E0H], ymm11
128
+ vmovups xmm8, xmmword ptr [r8+rdx-20H]
129
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-20H], 01H
130
+ vmovups xmm9, xmmword ptr [r9+rdx-20H]
131
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-20H], 01H
132
+ vunpcklpd ymm12, ymm8, ymm9
133
+ vunpckhpd ymm13, ymm8, ymm9
134
+ vmovups xmm10, xmmword ptr [r10+rdx-20H]
135
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-20H], 01H
136
+ vmovups xmm11, xmmword ptr [r11+rdx-20H]
137
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-20H], 01H
138
+ vunpcklpd ymm14, ymm10, ymm11
139
+ vunpckhpd ymm15, ymm10, ymm11
140
+ vshufps ymm8, ymm12, ymm14, 136
141
+ vmovaps ymmword ptr [rsp+100H], ymm8
142
+ vshufps ymm9, ymm12, ymm14, 221
143
+ vmovaps ymmword ptr [rsp+120H], ymm9
144
+ vshufps ymm10, ymm13, ymm15, 136
145
+ vmovaps ymmword ptr [rsp+140H], ymm10
146
+ vshufps ymm11, ymm13, ymm15, 221
147
+ vmovaps ymmword ptr [rsp+160H], ymm11
148
+ vmovups xmm8, xmmword ptr [r8+rdx-10H]
149
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-10H], 01H
150
+ vmovups xmm9, xmmword ptr [r9+rdx-10H]
151
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-10H], 01H
152
+ vunpcklpd ymm12, ymm8, ymm9
153
+ vunpckhpd ymm13, ymm8, ymm9
154
+ vmovups xmm10, xmmword ptr [r10+rdx-10H]
155
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-10H], 01H
156
+ vmovups xmm11, xmmword ptr [r11+rdx-10H]
157
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-10H], 01H
158
+ vunpcklpd ymm14, ymm10, ymm11
159
+ vunpckhpd ymm15, ymm10, ymm11
160
+ vshufps ymm8, ymm12, ymm14, 136
161
+ vmovaps ymmword ptr [rsp+180H], ymm8
162
+ vshufps ymm9, ymm12, ymm14, 221
163
+ vmovaps ymmword ptr [rsp+1A0H], ymm9
164
+ vshufps ymm10, ymm13, ymm15, 136
165
+ vmovaps ymmword ptr [rsp+1C0H], ymm10
166
+ vshufps ymm11, ymm13, ymm15, 221
167
+ vmovaps ymmword ptr [rsp+1E0H], ymm11
168
+ vpbroadcastd ymm15, dword ptr [rsp+200H]
169
+ prefetcht0 byte ptr [r8+rdx+80H]
170
+ prefetcht0 byte ptr [r12+rdx+80H]
171
+ prefetcht0 byte ptr [r9+rdx+80H]
172
+ prefetcht0 byte ptr [r13+rdx+80H]
173
+ prefetcht0 byte ptr [r10+rdx+80H]
174
+ prefetcht0 byte ptr [r14+rdx+80H]
175
+ prefetcht0 byte ptr [r11+rdx+80H]
176
+ prefetcht0 byte ptr [r15+rdx+80H]
177
+ vpaddd ymm0, ymm0, ymmword ptr [rsp]
178
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
179
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+80H]
180
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
181
+ vpaddd ymm0, ymm0, ymm4
182
+ vpaddd ymm1, ymm1, ymm5
183
+ vpaddd ymm2, ymm2, ymm6
184
+ vpaddd ymm3, ymm3, ymm7
185
+ vpxor ymm12, ymm0, ymmword ptr [rsp+220H]
186
+ vpxor ymm13, ymm1, ymmword ptr [rsp+240H]
187
+ vpxor ymm14, ymm2, ymmword ptr [BLAKE3_BLOCK_LEN]
188
+ vpxor ymm15, ymm3, ymm15
189
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
190
+ vpshufb ymm12, ymm12, ymm8
191
+ vpshufb ymm13, ymm13, ymm8
192
+ vpshufb ymm14, ymm14, ymm8
193
+ vpshufb ymm15, ymm15, ymm8
194
+ vpaddd ymm8, ymm12, ymmword ptr [BLAKE3_IV_0]
195
+ vpaddd ymm9, ymm13, ymmword ptr [BLAKE3_IV_1]
196
+ vpaddd ymm10, ymm14, ymmword ptr [BLAKE3_IV_2]
197
+ vpaddd ymm11, ymm15, ymmword ptr [BLAKE3_IV_3]
198
+ vpxor ymm4, ymm4, ymm8
199
+ vpxor ymm5, ymm5, ymm9
200
+ vpxor ymm6, ymm6, ymm10
201
+ vpxor ymm7, ymm7, ymm11
202
+ vmovdqa ymmword ptr [rsp+200H], ymm8
203
+ vpsrld ymm8, ymm4, 12
204
+ vpslld ymm4, ymm4, 20
205
+ vpor ymm4, ymm4, ymm8
206
+ vpsrld ymm8, ymm5, 12
207
+ vpslld ymm5, ymm5, 20
208
+ vpor ymm5, ymm5, ymm8
209
+ vpsrld ymm8, ymm6, 12
210
+ vpslld ymm6, ymm6, 20
211
+ vpor ymm6, ymm6, ymm8
212
+ vpsrld ymm8, ymm7, 12
213
+ vpslld ymm7, ymm7, 20
214
+ vpor ymm7, ymm7, ymm8
215
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+20H]
216
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
217
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0A0H]
218
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
219
+ vpaddd ymm0, ymm0, ymm4
220
+ vpaddd ymm1, ymm1, ymm5
221
+ vpaddd ymm2, ymm2, ymm6
222
+ vpaddd ymm3, ymm3, ymm7
223
+ vpxor ymm12, ymm12, ymm0
224
+ vpxor ymm13, ymm13, ymm1
225
+ vpxor ymm14, ymm14, ymm2
226
+ vpxor ymm15, ymm15, ymm3
227
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
228
+ vpshufb ymm12, ymm12, ymm8
229
+ vpshufb ymm13, ymm13, ymm8
230
+ vpshufb ymm14, ymm14, ymm8
231
+ vpshufb ymm15, ymm15, ymm8
232
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
233
+ vpaddd ymm9, ymm9, ymm13
234
+ vpaddd ymm10, ymm10, ymm14
235
+ vpaddd ymm11, ymm11, ymm15
236
+ vpxor ymm4, ymm4, ymm8
237
+ vpxor ymm5, ymm5, ymm9
238
+ vpxor ymm6, ymm6, ymm10
239
+ vpxor ymm7, ymm7, ymm11
240
+ vmovdqa ymmword ptr [rsp+200H], ymm8
241
+ vpsrld ymm8, ymm4, 7
242
+ vpslld ymm4, ymm4, 25
243
+ vpor ymm4, ymm4, ymm8
244
+ vpsrld ymm8, ymm5, 7
245
+ vpslld ymm5, ymm5, 25
246
+ vpor ymm5, ymm5, ymm8
247
+ vpsrld ymm8, ymm6, 7
248
+ vpslld ymm6, ymm6, 25
249
+ vpor ymm6, ymm6, ymm8
250
+ vpsrld ymm8, ymm7, 7
251
+ vpslld ymm7, ymm7, 25
252
+ vpor ymm7, ymm7, ymm8
253
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+100H]
254
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
255
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+180H]
256
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
257
+ vpaddd ymm0, ymm0, ymm5
258
+ vpaddd ymm1, ymm1, ymm6
259
+ vpaddd ymm2, ymm2, ymm7
260
+ vpaddd ymm3, ymm3, ymm4
261
+ vpxor ymm15, ymm15, ymm0
262
+ vpxor ymm12, ymm12, ymm1
263
+ vpxor ymm13, ymm13, ymm2
264
+ vpxor ymm14, ymm14, ymm3
265
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
266
+ vpshufb ymm15, ymm15, ymm8
267
+ vpshufb ymm12, ymm12, ymm8
268
+ vpshufb ymm13, ymm13, ymm8
269
+ vpshufb ymm14, ymm14, ymm8
270
+ vpaddd ymm10, ymm10, ymm15
271
+ vpaddd ymm11, ymm11, ymm12
272
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
273
+ vpaddd ymm9, ymm9, ymm14
274
+ vpxor ymm5, ymm5, ymm10
275
+ vpxor ymm6, ymm6, ymm11
276
+ vpxor ymm7, ymm7, ymm8
277
+ vpxor ymm4, ymm4, ymm9
278
+ vmovdqa ymmword ptr [rsp+200H], ymm8
279
+ vpsrld ymm8, ymm5, 12
280
+ vpslld ymm5, ymm5, 20
281
+ vpor ymm5, ymm5, ymm8
282
+ vpsrld ymm8, ymm6, 12
283
+ vpslld ymm6, ymm6, 20
284
+ vpor ymm6, ymm6, ymm8
285
+ vpsrld ymm8, ymm7, 12
286
+ vpslld ymm7, ymm7, 20
287
+ vpor ymm7, ymm7, ymm8
288
+ vpsrld ymm8, ymm4, 12
289
+ vpslld ymm4, ymm4, 20
290
+ vpor ymm4, ymm4, ymm8
291
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+120H]
292
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
293
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1A0H]
294
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
295
+ vpaddd ymm0, ymm0, ymm5
296
+ vpaddd ymm1, ymm1, ymm6
297
+ vpaddd ymm2, ymm2, ymm7
298
+ vpaddd ymm3, ymm3, ymm4
299
+ vpxor ymm15, ymm15, ymm0
300
+ vpxor ymm12, ymm12, ymm1
301
+ vpxor ymm13, ymm13, ymm2
302
+ vpxor ymm14, ymm14, ymm3
303
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
304
+ vpshufb ymm15, ymm15, ymm8
305
+ vpshufb ymm12, ymm12, ymm8
306
+ vpshufb ymm13, ymm13, ymm8
307
+ vpshufb ymm14, ymm14, ymm8
308
+ vpaddd ymm10, ymm10, ymm15
309
+ vpaddd ymm11, ymm11, ymm12
310
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
311
+ vpaddd ymm9, ymm9, ymm14
312
+ vpxor ymm5, ymm5, ymm10
313
+ vpxor ymm6, ymm6, ymm11
314
+ vpxor ymm7, ymm7, ymm8
315
+ vpxor ymm4, ymm4, ymm9
316
+ vmovdqa ymmword ptr [rsp+200H], ymm8
317
+ vpsrld ymm8, ymm5, 7
318
+ vpslld ymm5, ymm5, 25
319
+ vpor ymm5, ymm5, ymm8
320
+ vpsrld ymm8, ymm6, 7
321
+ vpslld ymm6, ymm6, 25
322
+ vpor ymm6, ymm6, ymm8
323
+ vpsrld ymm8, ymm7, 7
324
+ vpslld ymm7, ymm7, 25
325
+ vpor ymm7, ymm7, ymm8
326
+ vpsrld ymm8, ymm4, 7
327
+ vpslld ymm4, ymm4, 25
328
+ vpor ymm4, ymm4, ymm8
329
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+40H]
330
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
331
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0E0H]
332
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
333
+ vpaddd ymm0, ymm0, ymm4
334
+ vpaddd ymm1, ymm1, ymm5
335
+ vpaddd ymm2, ymm2, ymm6
336
+ vpaddd ymm3, ymm3, ymm7
337
+ vpxor ymm12, ymm12, ymm0
338
+ vpxor ymm13, ymm13, ymm1
339
+ vpxor ymm14, ymm14, ymm2
340
+ vpxor ymm15, ymm15, ymm3
341
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
342
+ vpshufb ymm12, ymm12, ymm8
343
+ vpshufb ymm13, ymm13, ymm8
344
+ vpshufb ymm14, ymm14, ymm8
345
+ vpshufb ymm15, ymm15, ymm8
346
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
347
+ vpaddd ymm9, ymm9, ymm13
348
+ vpaddd ymm10, ymm10, ymm14
349
+ vpaddd ymm11, ymm11, ymm15
350
+ vpxor ymm4, ymm4, ymm8
351
+ vpxor ymm5, ymm5, ymm9
352
+ vpxor ymm6, ymm6, ymm10
353
+ vpxor ymm7, ymm7, ymm11
354
+ vmovdqa ymmword ptr [rsp+200H], ymm8
355
+ vpsrld ymm8, ymm4, 12
356
+ vpslld ymm4, ymm4, 20
357
+ vpor ymm4, ymm4, ymm8
358
+ vpsrld ymm8, ymm5, 12
359
+ vpslld ymm5, ymm5, 20
360
+ vpor ymm5, ymm5, ymm8
361
+ vpsrld ymm8, ymm6, 12
362
+ vpslld ymm6, ymm6, 20
363
+ vpor ymm6, ymm6, ymm8
364
+ vpsrld ymm8, ymm7, 12
365
+ vpslld ymm7, ymm7, 20
366
+ vpor ymm7, ymm7, ymm8
367
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+0C0H]
368
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
369
+ vpaddd ymm2, ymm2, ymmword ptr [rsp]
370
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
371
+ vpaddd ymm0, ymm0, ymm4
372
+ vpaddd ymm1, ymm1, ymm5
373
+ vpaddd ymm2, ymm2, ymm6
374
+ vpaddd ymm3, ymm3, ymm7
375
+ vpxor ymm12, ymm12, ymm0
376
+ vpxor ymm13, ymm13, ymm1
377
+ vpxor ymm14, ymm14, ymm2
378
+ vpxor ymm15, ymm15, ymm3
379
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
380
+ vpshufb ymm12, ymm12, ymm8
381
+ vpshufb ymm13, ymm13, ymm8
382
+ vpshufb ymm14, ymm14, ymm8
383
+ vpshufb ymm15, ymm15, ymm8
384
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
385
+ vpaddd ymm9, ymm9, ymm13
386
+ vpaddd ymm10, ymm10, ymm14
387
+ vpaddd ymm11, ymm11, ymm15
388
+ vpxor ymm4, ymm4, ymm8
389
+ vpxor ymm5, ymm5, ymm9
390
+ vpxor ymm6, ymm6, ymm10
391
+ vpxor ymm7, ymm7, ymm11
392
+ vmovdqa ymmword ptr [rsp+200H], ymm8
393
+ vpsrld ymm8, ymm4, 7
394
+ vpslld ymm4, ymm4, 25
395
+ vpor ymm4, ymm4, ymm8
396
+ vpsrld ymm8, ymm5, 7
397
+ vpslld ymm5, ymm5, 25
398
+ vpor ymm5, ymm5, ymm8
399
+ vpsrld ymm8, ymm6, 7
400
+ vpslld ymm6, ymm6, 25
401
+ vpor ymm6, ymm6, ymm8
402
+ vpsrld ymm8, ymm7, 7
403
+ vpslld ymm7, ymm7, 25
404
+ vpor ymm7, ymm7, ymm8
405
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+20H]
406
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
407
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+120H]
408
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
409
+ vpaddd ymm0, ymm0, ymm5
410
+ vpaddd ymm1, ymm1, ymm6
411
+ vpaddd ymm2, ymm2, ymm7
412
+ vpaddd ymm3, ymm3, ymm4
413
+ vpxor ymm15, ymm15, ymm0
414
+ vpxor ymm12, ymm12, ymm1
415
+ vpxor ymm13, ymm13, ymm2
416
+ vpxor ymm14, ymm14, ymm3
417
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
418
+ vpshufb ymm15, ymm15, ymm8
419
+ vpshufb ymm12, ymm12, ymm8
420
+ vpshufb ymm13, ymm13, ymm8
421
+ vpshufb ymm14, ymm14, ymm8
422
+ vpaddd ymm10, ymm10, ymm15
423
+ vpaddd ymm11, ymm11, ymm12
424
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
425
+ vpaddd ymm9, ymm9, ymm14
426
+ vpxor ymm5, ymm5, ymm10
427
+ vpxor ymm6, ymm6, ymm11
428
+ vpxor ymm7, ymm7, ymm8
429
+ vpxor ymm4, ymm4, ymm9
430
+ vmovdqa ymmword ptr [rsp+200H], ymm8
431
+ vpsrld ymm8, ymm5, 12
432
+ vpslld ymm5, ymm5, 20
433
+ vpor ymm5, ymm5, ymm8
434
+ vpsrld ymm8, ymm6, 12
435
+ vpslld ymm6, ymm6, 20
436
+ vpor ymm6, ymm6, ymm8
437
+ vpsrld ymm8, ymm7, 12
438
+ vpslld ymm7, ymm7, 20
439
+ vpor ymm7, ymm7, ymm8
440
+ vpsrld ymm8, ymm4, 12
441
+ vpslld ymm4, ymm4, 20
442
+ vpor ymm4, ymm4, ymm8
443
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+160H]
444
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
445
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1C0H]
446
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
447
+ vpaddd ymm0, ymm0, ymm5
448
+ vpaddd ymm1, ymm1, ymm6
449
+ vpaddd ymm2, ymm2, ymm7
450
+ vpaddd ymm3, ymm3, ymm4
451
+ vpxor ymm15, ymm15, ymm0
452
+ vpxor ymm12, ymm12, ymm1
453
+ vpxor ymm13, ymm13, ymm2
454
+ vpxor ymm14, ymm14, ymm3
455
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
456
+ vpshufb ymm15, ymm15, ymm8
457
+ vpshufb ymm12, ymm12, ymm8
458
+ vpshufb ymm13, ymm13, ymm8
459
+ vpshufb ymm14, ymm14, ymm8
460
+ vpaddd ymm10, ymm10, ymm15
461
+ vpaddd ymm11, ymm11, ymm12
462
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
463
+ vpaddd ymm9, ymm9, ymm14
464
+ vpxor ymm5, ymm5, ymm10
465
+ vpxor ymm6, ymm6, ymm11
466
+ vpxor ymm7, ymm7, ymm8
467
+ vpxor ymm4, ymm4, ymm9
468
+ vmovdqa ymmword ptr [rsp+200H], ymm8
469
+ vpsrld ymm8, ymm5, 7
470
+ vpslld ymm5, ymm5, 25
471
+ vpor ymm5, ymm5, ymm8
472
+ vpsrld ymm8, ymm6, 7
473
+ vpslld ymm6, ymm6, 25
474
+ vpor ymm6, ymm6, ymm8
475
+ vpsrld ymm8, ymm7, 7
476
+ vpslld ymm7, ymm7, 25
477
+ vpor ymm7, ymm7, ymm8
478
+ vpsrld ymm8, ymm4, 7
479
+ vpslld ymm4, ymm4, 25
480
+ vpor ymm4, ymm4, ymm8
481
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+60H]
482
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
483
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1A0H]
484
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
485
+ vpaddd ymm0, ymm0, ymm4
486
+ vpaddd ymm1, ymm1, ymm5
487
+ vpaddd ymm2, ymm2, ymm6
488
+ vpaddd ymm3, ymm3, ymm7
489
+ vpxor ymm12, ymm12, ymm0
490
+ vpxor ymm13, ymm13, ymm1
491
+ vpxor ymm14, ymm14, ymm2
492
+ vpxor ymm15, ymm15, ymm3
493
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
494
+ vpshufb ymm12, ymm12, ymm8
495
+ vpshufb ymm13, ymm13, ymm8
496
+ vpshufb ymm14, ymm14, ymm8
497
+ vpshufb ymm15, ymm15, ymm8
498
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
499
+ vpaddd ymm9, ymm9, ymm13
500
+ vpaddd ymm10, ymm10, ymm14
501
+ vpaddd ymm11, ymm11, ymm15
502
+ vpxor ymm4, ymm4, ymm8
503
+ vpxor ymm5, ymm5, ymm9
504
+ vpxor ymm6, ymm6, ymm10
505
+ vpxor ymm7, ymm7, ymm11
506
+ vmovdqa ymmword ptr [rsp+200H], ymm8
507
+ vpsrld ymm8, ymm4, 12
508
+ vpslld ymm4, ymm4, 20
509
+ vpor ymm4, ymm4, ymm8
510
+ vpsrld ymm8, ymm5, 12
511
+ vpslld ymm5, ymm5, 20
512
+ vpor ymm5, ymm5, ymm8
513
+ vpsrld ymm8, ymm6, 12
514
+ vpslld ymm6, ymm6, 20
515
+ vpor ymm6, ymm6, ymm8
516
+ vpsrld ymm8, ymm7, 12
517
+ vpslld ymm7, ymm7, 20
518
+ vpor ymm7, ymm7, ymm8
519
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+80H]
520
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
521
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+40H]
522
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
523
+ vpaddd ymm0, ymm0, ymm4
524
+ vpaddd ymm1, ymm1, ymm5
525
+ vpaddd ymm2, ymm2, ymm6
526
+ vpaddd ymm3, ymm3, ymm7
527
+ vpxor ymm12, ymm12, ymm0
528
+ vpxor ymm13, ymm13, ymm1
529
+ vpxor ymm14, ymm14, ymm2
530
+ vpxor ymm15, ymm15, ymm3
531
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
532
+ vpshufb ymm12, ymm12, ymm8
533
+ vpshufb ymm13, ymm13, ymm8
534
+ vpshufb ymm14, ymm14, ymm8
535
+ vpshufb ymm15, ymm15, ymm8
536
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
537
+ vpaddd ymm9, ymm9, ymm13
538
+ vpaddd ymm10, ymm10, ymm14
539
+ vpaddd ymm11, ymm11, ymm15
540
+ vpxor ymm4, ymm4, ymm8
541
+ vpxor ymm5, ymm5, ymm9
542
+ vpxor ymm6, ymm6, ymm10
543
+ vpxor ymm7, ymm7, ymm11
544
+ vmovdqa ymmword ptr [rsp+200H], ymm8
545
+ vpsrld ymm8, ymm4, 7
546
+ vpslld ymm4, ymm4, 25
547
+ vpor ymm4, ymm4, ymm8
548
+ vpsrld ymm8, ymm5, 7
549
+ vpslld ymm5, ymm5, 25
550
+ vpor ymm5, ymm5, ymm8
551
+ vpsrld ymm8, ymm6, 7
552
+ vpslld ymm6, ymm6, 25
553
+ vpor ymm6, ymm6, ymm8
554
+ vpsrld ymm8, ymm7, 7
555
+ vpslld ymm7, ymm7, 25
556
+ vpor ymm7, ymm7, ymm8
557
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+0C0H]
558
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
559
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+160H]
560
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
561
+ vpaddd ymm0, ymm0, ymm5
562
+ vpaddd ymm1, ymm1, ymm6
563
+ vpaddd ymm2, ymm2, ymm7
564
+ vpaddd ymm3, ymm3, ymm4
565
+ vpxor ymm15, ymm15, ymm0
566
+ vpxor ymm12, ymm12, ymm1
567
+ vpxor ymm13, ymm13, ymm2
568
+ vpxor ymm14, ymm14, ymm3
569
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
570
+ vpshufb ymm15, ymm15, ymm8
571
+ vpshufb ymm12, ymm12, ymm8
572
+ vpshufb ymm13, ymm13, ymm8
573
+ vpshufb ymm14, ymm14, ymm8
574
+ vpaddd ymm10, ymm10, ymm15
575
+ vpaddd ymm11, ymm11, ymm12
576
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
577
+ vpaddd ymm9, ymm9, ymm14
578
+ vpxor ymm5, ymm5, ymm10
579
+ vpxor ymm6, ymm6, ymm11
580
+ vpxor ymm7, ymm7, ymm8
581
+ vpxor ymm4, ymm4, ymm9
582
+ vmovdqa ymmword ptr [rsp+200H], ymm8
583
+ vpsrld ymm8, ymm5, 12
584
+ vpslld ymm5, ymm5, 20
585
+ vpor ymm5, ymm5, ymm8
586
+ vpsrld ymm8, ymm6, 12
587
+ vpslld ymm6, ymm6, 20
588
+ vpor ymm6, ymm6, ymm8
589
+ vpsrld ymm8, ymm7, 12
590
+ vpslld ymm7, ymm7, 20
591
+ vpor ymm7, ymm7, ymm8
592
+ vpsrld ymm8, ymm4, 12
593
+ vpslld ymm4, ymm4, 20
594
+ vpor ymm4, ymm4, ymm8
595
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+0A0H]
596
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
597
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1E0H]
598
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
599
+ vpaddd ymm0, ymm0, ymm5
600
+ vpaddd ymm1, ymm1, ymm6
601
+ vpaddd ymm2, ymm2, ymm7
602
+ vpaddd ymm3, ymm3, ymm4
603
+ vpxor ymm15, ymm15, ymm0
604
+ vpxor ymm12, ymm12, ymm1
605
+ vpxor ymm13, ymm13, ymm2
606
+ vpxor ymm14, ymm14, ymm3
607
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
608
+ vpshufb ymm15, ymm15, ymm8
609
+ vpshufb ymm12, ymm12, ymm8
610
+ vpshufb ymm13, ymm13, ymm8
611
+ vpshufb ymm14, ymm14, ymm8
612
+ vpaddd ymm10, ymm10, ymm15
613
+ vpaddd ymm11, ymm11, ymm12
614
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
615
+ vpaddd ymm9, ymm9, ymm14
616
+ vpxor ymm5, ymm5, ymm10
617
+ vpxor ymm6, ymm6, ymm11
618
+ vpxor ymm7, ymm7, ymm8
619
+ vpxor ymm4, ymm4, ymm9
620
+ vmovdqa ymmword ptr [rsp+200H], ymm8
621
+ vpsrld ymm8, ymm5, 7
622
+ vpslld ymm5, ymm5, 25
623
+ vpor ymm5, ymm5, ymm8
624
+ vpsrld ymm8, ymm6, 7
625
+ vpslld ymm6, ymm6, 25
626
+ vpor ymm6, ymm6, ymm8
627
+ vpsrld ymm8, ymm7, 7
628
+ vpslld ymm7, ymm7, 25
629
+ vpor ymm7, ymm7, ymm8
630
+ vpsrld ymm8, ymm4, 7
631
+ vpslld ymm4, ymm4, 25
632
+ vpor ymm4, ymm4, ymm8
633
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+140H]
634
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
635
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1C0H]
636
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
637
+ vpaddd ymm0, ymm0, ymm4
638
+ vpaddd ymm1, ymm1, ymm5
639
+ vpaddd ymm2, ymm2, ymm6
640
+ vpaddd ymm3, ymm3, ymm7
641
+ vpxor ymm12, ymm12, ymm0
642
+ vpxor ymm13, ymm13, ymm1
643
+ vpxor ymm14, ymm14, ymm2
644
+ vpxor ymm15, ymm15, ymm3
645
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
646
+ vpshufb ymm12, ymm12, ymm8
647
+ vpshufb ymm13, ymm13, ymm8
648
+ vpshufb ymm14, ymm14, ymm8
649
+ vpshufb ymm15, ymm15, ymm8
650
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
651
+ vpaddd ymm9, ymm9, ymm13
652
+ vpaddd ymm10, ymm10, ymm14
653
+ vpaddd ymm11, ymm11, ymm15
654
+ vpxor ymm4, ymm4, ymm8
655
+ vpxor ymm5, ymm5, ymm9
656
+ vpxor ymm6, ymm6, ymm10
657
+ vpxor ymm7, ymm7, ymm11
658
+ vmovdqa ymmword ptr [rsp+200H], ymm8
659
+ vpsrld ymm8, ymm4, 12
660
+ vpslld ymm4, ymm4, 20
661
+ vpor ymm4, ymm4, ymm8
662
+ vpsrld ymm8, ymm5, 12
663
+ vpslld ymm5, ymm5, 20
664
+ vpor ymm5, ymm5, ymm8
665
+ vpsrld ymm8, ymm6, 12
666
+ vpslld ymm6, ymm6, 20
667
+ vpor ymm6, ymm6, ymm8
668
+ vpsrld ymm8, ymm7, 12
669
+ vpslld ymm7, ymm7, 20
670
+ vpor ymm7, ymm7, ymm8
671
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+0E0H]
672
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
673
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+60H]
674
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
675
+ vpaddd ymm0, ymm0, ymm4
676
+ vpaddd ymm1, ymm1, ymm5
677
+ vpaddd ymm2, ymm2, ymm6
678
+ vpaddd ymm3, ymm3, ymm7
679
+ vpxor ymm12, ymm12, ymm0
680
+ vpxor ymm13, ymm13, ymm1
681
+ vpxor ymm14, ymm14, ymm2
682
+ vpxor ymm15, ymm15, ymm3
683
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
684
+ vpshufb ymm12, ymm12, ymm8
685
+ vpshufb ymm13, ymm13, ymm8
686
+ vpshufb ymm14, ymm14, ymm8
687
+ vpshufb ymm15, ymm15, ymm8
688
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
689
+ vpaddd ymm9, ymm9, ymm13
690
+ vpaddd ymm10, ymm10, ymm14
691
+ vpaddd ymm11, ymm11, ymm15
692
+ vpxor ymm4, ymm4, ymm8
693
+ vpxor ymm5, ymm5, ymm9
694
+ vpxor ymm6, ymm6, ymm10
695
+ vpxor ymm7, ymm7, ymm11
696
+ vmovdqa ymmword ptr [rsp+200H], ymm8
697
+ vpsrld ymm8, ymm4, 7
698
+ vpslld ymm4, ymm4, 25
699
+ vpor ymm4, ymm4, ymm8
700
+ vpsrld ymm8, ymm5, 7
701
+ vpslld ymm5, ymm5, 25
702
+ vpor ymm5, ymm5, ymm8
703
+ vpsrld ymm8, ymm6, 7
704
+ vpslld ymm6, ymm6, 25
705
+ vpor ymm6, ymm6, ymm8
706
+ vpsrld ymm8, ymm7, 7
707
+ vpslld ymm7, ymm7, 25
708
+ vpor ymm7, ymm7, ymm8
709
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+80H]
710
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
711
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0A0H]
712
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
713
+ vpaddd ymm0, ymm0, ymm5
714
+ vpaddd ymm1, ymm1, ymm6
715
+ vpaddd ymm2, ymm2, ymm7
716
+ vpaddd ymm3, ymm3, ymm4
717
+ vpxor ymm15, ymm15, ymm0
718
+ vpxor ymm12, ymm12, ymm1
719
+ vpxor ymm13, ymm13, ymm2
720
+ vpxor ymm14, ymm14, ymm3
721
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
722
+ vpshufb ymm15, ymm15, ymm8
723
+ vpshufb ymm12, ymm12, ymm8
724
+ vpshufb ymm13, ymm13, ymm8
725
+ vpshufb ymm14, ymm14, ymm8
726
+ vpaddd ymm10, ymm10, ymm15
727
+ vpaddd ymm11, ymm11, ymm12
728
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
729
+ vpaddd ymm9, ymm9, ymm14
730
+ vpxor ymm5, ymm5, ymm10
731
+ vpxor ymm6, ymm6, ymm11
732
+ vpxor ymm7, ymm7, ymm8
733
+ vpxor ymm4, ymm4, ymm9
734
+ vmovdqa ymmword ptr [rsp+200H], ymm8
735
+ vpsrld ymm8, ymm5, 12
736
+ vpslld ymm5, ymm5, 20
737
+ vpor ymm5, ymm5, ymm8
738
+ vpsrld ymm8, ymm6, 12
739
+ vpslld ymm6, ymm6, 20
740
+ vpor ymm6, ymm6, ymm8
741
+ vpsrld ymm8, ymm7, 12
742
+ vpslld ymm7, ymm7, 20
743
+ vpor ymm7, ymm7, ymm8
744
+ vpsrld ymm8, ymm4, 12
745
+ vpslld ymm4, ymm4, 20
746
+ vpor ymm4, ymm4, ymm8
747
+ vpaddd ymm0, ymm0, ymmword ptr [rsp]
748
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
749
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+100H]
750
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
751
+ vpaddd ymm0, ymm0, ymm5
752
+ vpaddd ymm1, ymm1, ymm6
753
+ vpaddd ymm2, ymm2, ymm7
754
+ vpaddd ymm3, ymm3, ymm4
755
+ vpxor ymm15, ymm15, ymm0
756
+ vpxor ymm12, ymm12, ymm1
757
+ vpxor ymm13, ymm13, ymm2
758
+ vpxor ymm14, ymm14, ymm3
759
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
760
+ vpshufb ymm15, ymm15, ymm8
761
+ vpshufb ymm12, ymm12, ymm8
762
+ vpshufb ymm13, ymm13, ymm8
763
+ vpshufb ymm14, ymm14, ymm8
764
+ vpaddd ymm10, ymm10, ymm15
765
+ vpaddd ymm11, ymm11, ymm12
766
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
767
+ vpaddd ymm9, ymm9, ymm14
768
+ vpxor ymm5, ymm5, ymm10
769
+ vpxor ymm6, ymm6, ymm11
770
+ vpxor ymm7, ymm7, ymm8
771
+ vpxor ymm4, ymm4, ymm9
772
+ vmovdqa ymmword ptr [rsp+200H], ymm8
773
+ vpsrld ymm8, ymm5, 7
774
+ vpslld ymm5, ymm5, 25
775
+ vpor ymm5, ymm5, ymm8
776
+ vpsrld ymm8, ymm6, 7
777
+ vpslld ymm6, ymm6, 25
778
+ vpor ymm6, ymm6, ymm8
779
+ vpsrld ymm8, ymm7, 7
780
+ vpslld ymm7, ymm7, 25
781
+ vpor ymm7, ymm7, ymm8
782
+ vpsrld ymm8, ymm4, 7
783
+ vpslld ymm4, ymm4, 25
784
+ vpor ymm4, ymm4, ymm8
785
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+180H]
786
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+120H]
787
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+1E0H]
788
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1C0H]
789
+ vpaddd ymm0, ymm0, ymm4
790
+ vpaddd ymm1, ymm1, ymm5
791
+ vpaddd ymm2, ymm2, ymm6
792
+ vpaddd ymm3, ymm3, ymm7
793
+ vpxor ymm12, ymm12, ymm0
794
+ vpxor ymm13, ymm13, ymm1
795
+ vpxor ymm14, ymm14, ymm2
796
+ vpxor ymm15, ymm15, ymm3
797
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
798
+ vpshufb ymm12, ymm12, ymm8
799
+ vpshufb ymm13, ymm13, ymm8
800
+ vpshufb ymm14, ymm14, ymm8
801
+ vpshufb ymm15, ymm15, ymm8
802
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
803
+ vpaddd ymm9, ymm9, ymm13
804
+ vpaddd ymm10, ymm10, ymm14
805
+ vpaddd ymm11, ymm11, ymm15
806
+ vpxor ymm4, ymm4, ymm8
807
+ vpxor ymm5, ymm5, ymm9
808
+ vpxor ymm6, ymm6, ymm10
809
+ vpxor ymm7, ymm7, ymm11
810
+ vmovdqa ymmword ptr [rsp+200H], ymm8
811
+ vpsrld ymm8, ymm4, 12
812
+ vpslld ymm4, ymm4, 20
813
+ vpor ymm4, ymm4, ymm8
814
+ vpsrld ymm8, ymm5, 12
815
+ vpslld ymm5, ymm5, 20
816
+ vpor ymm5, ymm5, ymm8
817
+ vpsrld ymm8, ymm6, 12
818
+ vpslld ymm6, ymm6, 20
819
+ vpor ymm6, ymm6, ymm8
820
+ vpsrld ymm8, ymm7, 12
821
+ vpslld ymm7, ymm7, 20
822
+ vpor ymm7, ymm7, ymm8
823
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+1A0H]
824
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
825
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+140H]
826
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
827
+ vpaddd ymm0, ymm0, ymm4
828
+ vpaddd ymm1, ymm1, ymm5
829
+ vpaddd ymm2, ymm2, ymm6
830
+ vpaddd ymm3, ymm3, ymm7
831
+ vpxor ymm12, ymm12, ymm0
832
+ vpxor ymm13, ymm13, ymm1
833
+ vpxor ymm14, ymm14, ymm2
834
+ vpxor ymm15, ymm15, ymm3
835
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
836
+ vpshufb ymm12, ymm12, ymm8
837
+ vpshufb ymm13, ymm13, ymm8
838
+ vpshufb ymm14, ymm14, ymm8
839
+ vpshufb ymm15, ymm15, ymm8
840
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
841
+ vpaddd ymm9, ymm9, ymm13
842
+ vpaddd ymm10, ymm10, ymm14
843
+ vpaddd ymm11, ymm11, ymm15
844
+ vpxor ymm4, ymm4, ymm8
845
+ vpxor ymm5, ymm5, ymm9
846
+ vpxor ymm6, ymm6, ymm10
847
+ vpxor ymm7, ymm7, ymm11
848
+ vmovdqa ymmword ptr [rsp+200H], ymm8
849
+ vpsrld ymm8, ymm4, 7
850
+ vpslld ymm4, ymm4, 25
851
+ vpor ymm4, ymm4, ymm8
852
+ vpsrld ymm8, ymm5, 7
853
+ vpslld ymm5, ymm5, 25
854
+ vpor ymm5, ymm5, ymm8
855
+ vpsrld ymm8, ymm6, 7
856
+ vpslld ymm6, ymm6, 25
857
+ vpor ymm6, ymm6, ymm8
858
+ vpsrld ymm8, ymm7, 7
859
+ vpslld ymm7, ymm7, 25
860
+ vpor ymm7, ymm7, ymm8
861
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+0E0H]
862
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
863
+ vpaddd ymm2, ymm2, ymmword ptr [rsp]
864
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
865
+ vpaddd ymm0, ymm0, ymm5
866
+ vpaddd ymm1, ymm1, ymm6
867
+ vpaddd ymm2, ymm2, ymm7
868
+ vpaddd ymm3, ymm3, ymm4
869
+ vpxor ymm15, ymm15, ymm0
870
+ vpxor ymm12, ymm12, ymm1
871
+ vpxor ymm13, ymm13, ymm2
872
+ vpxor ymm14, ymm14, ymm3
873
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
874
+ vpshufb ymm15, ymm15, ymm8
875
+ vpshufb ymm12, ymm12, ymm8
876
+ vpshufb ymm13, ymm13, ymm8
877
+ vpshufb ymm14, ymm14, ymm8
878
+ vpaddd ymm10, ymm10, ymm15
879
+ vpaddd ymm11, ymm11, ymm12
880
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
881
+ vpaddd ymm9, ymm9, ymm14
882
+ vpxor ymm5, ymm5, ymm10
883
+ vpxor ymm6, ymm6, ymm11
884
+ vpxor ymm7, ymm7, ymm8
885
+ vpxor ymm4, ymm4, ymm9
886
+ vmovdqa ymmword ptr [rsp+200H], ymm8
887
+ vpsrld ymm8, ymm5, 12
888
+ vpslld ymm5, ymm5, 20
889
+ vpor ymm5, ymm5, ymm8
890
+ vpsrld ymm8, ymm6, 12
891
+ vpslld ymm6, ymm6, 20
892
+ vpor ymm6, ymm6, ymm8
893
+ vpsrld ymm8, ymm7, 12
894
+ vpslld ymm7, ymm7, 20
895
+ vpor ymm7, ymm7, ymm8
896
+ vpsrld ymm8, ymm4, 12
897
+ vpslld ymm4, ymm4, 20
898
+ vpor ymm4, ymm4, ymm8
899
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+40H]
900
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+60H]
901
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+20H]
902
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
903
+ vpaddd ymm0, ymm0, ymm5
904
+ vpaddd ymm1, ymm1, ymm6
905
+ vpaddd ymm2, ymm2, ymm7
906
+ vpaddd ymm3, ymm3, ymm4
907
+ vpxor ymm15, ymm15, ymm0
908
+ vpxor ymm12, ymm12, ymm1
909
+ vpxor ymm13, ymm13, ymm2
910
+ vpxor ymm14, ymm14, ymm3
911
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
912
+ vpshufb ymm15, ymm15, ymm8
913
+ vpshufb ymm12, ymm12, ymm8
914
+ vpshufb ymm13, ymm13, ymm8
915
+ vpshufb ymm14, ymm14, ymm8
916
+ vpaddd ymm10, ymm10, ymm15
917
+ vpaddd ymm11, ymm11, ymm12
918
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
919
+ vpaddd ymm9, ymm9, ymm14
920
+ vpxor ymm5, ymm5, ymm10
921
+ vpxor ymm6, ymm6, ymm11
922
+ vpxor ymm7, ymm7, ymm8
923
+ vpxor ymm4, ymm4, ymm9
924
+ vmovdqa ymmword ptr [rsp+200H], ymm8
925
+ vpsrld ymm8, ymm5, 7
926
+ vpslld ymm5, ymm5, 25
927
+ vpor ymm5, ymm5, ymm8
928
+ vpsrld ymm8, ymm6, 7
929
+ vpslld ymm6, ymm6, 25
930
+ vpor ymm6, ymm6, ymm8
931
+ vpsrld ymm8, ymm7, 7
932
+ vpslld ymm7, ymm7, 25
933
+ vpor ymm7, ymm7, ymm8
934
+ vpsrld ymm8, ymm4, 7
935
+ vpslld ymm4, ymm4, 25
936
+ vpor ymm4, ymm4, ymm8
937
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+120H]
938
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+160H]
939
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+100H]
940
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1E0H]
941
+ vpaddd ymm0, ymm0, ymm4
942
+ vpaddd ymm1, ymm1, ymm5
943
+ vpaddd ymm2, ymm2, ymm6
944
+ vpaddd ymm3, ymm3, ymm7
945
+ vpxor ymm12, ymm12, ymm0
946
+ vpxor ymm13, ymm13, ymm1
947
+ vpxor ymm14, ymm14, ymm2
948
+ vpxor ymm15, ymm15, ymm3
949
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
950
+ vpshufb ymm12, ymm12, ymm8
951
+ vpshufb ymm13, ymm13, ymm8
952
+ vpshufb ymm14, ymm14, ymm8
953
+ vpshufb ymm15, ymm15, ymm8
954
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
955
+ vpaddd ymm9, ymm9, ymm13
956
+ vpaddd ymm10, ymm10, ymm14
957
+ vpaddd ymm11, ymm11, ymm15
958
+ vpxor ymm4, ymm4, ymm8
959
+ vpxor ymm5, ymm5, ymm9
960
+ vpxor ymm6, ymm6, ymm10
961
+ vpxor ymm7, ymm7, ymm11
962
+ vmovdqa ymmword ptr [rsp+200H], ymm8
963
+ vpsrld ymm8, ymm4, 12
964
+ vpslld ymm4, ymm4, 20
965
+ vpor ymm4, ymm4, ymm8
966
+ vpsrld ymm8, ymm5, 12
967
+ vpslld ymm5, ymm5, 20
968
+ vpor ymm5, ymm5, ymm8
969
+ vpsrld ymm8, ymm6, 12
970
+ vpslld ymm6, ymm6, 20
971
+ vpor ymm6, ymm6, ymm8
972
+ vpsrld ymm8, ymm7, 12
973
+ vpslld ymm7, ymm7, 20
974
+ vpor ymm7, ymm7, ymm8
975
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+1C0H]
976
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
977
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+180H]
978
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+20H]
979
+ vpaddd ymm0, ymm0, ymm4
980
+ vpaddd ymm1, ymm1, ymm5
981
+ vpaddd ymm2, ymm2, ymm6
982
+ vpaddd ymm3, ymm3, ymm7
983
+ vpxor ymm12, ymm12, ymm0
984
+ vpxor ymm13, ymm13, ymm1
985
+ vpxor ymm14, ymm14, ymm2
986
+ vpxor ymm15, ymm15, ymm3
987
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
988
+ vpshufb ymm12, ymm12, ymm8
989
+ vpshufb ymm13, ymm13, ymm8
990
+ vpshufb ymm14, ymm14, ymm8
991
+ vpshufb ymm15, ymm15, ymm8
992
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
993
+ vpaddd ymm9, ymm9, ymm13
994
+ vpaddd ymm10, ymm10, ymm14
995
+ vpaddd ymm11, ymm11, ymm15
996
+ vpxor ymm4, ymm4, ymm8
997
+ vpxor ymm5, ymm5, ymm9
998
+ vpxor ymm6, ymm6, ymm10
999
+ vpxor ymm7, ymm7, ymm11
1000
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1001
+ vpsrld ymm8, ymm4, 7
1002
+ vpslld ymm4, ymm4, 25
1003
+ vpor ymm4, ymm4, ymm8
1004
+ vpsrld ymm8, ymm5, 7
1005
+ vpslld ymm5, ymm5, 25
1006
+ vpor ymm5, ymm5, ymm8
1007
+ vpsrld ymm8, ymm6, 7
1008
+ vpslld ymm6, ymm6, 25
1009
+ vpor ymm6, ymm6, ymm8
1010
+ vpsrld ymm8, ymm7, 7
1011
+ vpslld ymm7, ymm7, 25
1012
+ vpor ymm7, ymm7, ymm8
1013
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+1A0H]
1014
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
1015
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+40H]
1016
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+80H]
1017
+ vpaddd ymm0, ymm0, ymm5
1018
+ vpaddd ymm1, ymm1, ymm6
1019
+ vpaddd ymm2, ymm2, ymm7
1020
+ vpaddd ymm3, ymm3, ymm4
1021
+ vpxor ymm15, ymm15, ymm0
1022
+ vpxor ymm12, ymm12, ymm1
1023
+ vpxor ymm13, ymm13, ymm2
1024
+ vpxor ymm14, ymm14, ymm3
1025
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
1026
+ vpshufb ymm15, ymm15, ymm8
1027
+ vpshufb ymm12, ymm12, ymm8
1028
+ vpshufb ymm13, ymm13, ymm8
1029
+ vpshufb ymm14, ymm14, ymm8
1030
+ vpaddd ymm10, ymm10, ymm15
1031
+ vpaddd ymm11, ymm11, ymm12
1032
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
1033
+ vpaddd ymm9, ymm9, ymm14
1034
+ vpxor ymm5, ymm5, ymm10
1035
+ vpxor ymm6, ymm6, ymm11
1036
+ vpxor ymm7, ymm7, ymm8
1037
+ vpxor ymm4, ymm4, ymm9
1038
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1039
+ vpsrld ymm8, ymm5, 12
1040
+ vpslld ymm5, ymm5, 20
1041
+ vpor ymm5, ymm5, ymm8
1042
+ vpsrld ymm8, ymm6, 12
1043
+ vpslld ymm6, ymm6, 20
1044
+ vpor ymm6, ymm6, ymm8
1045
+ vpsrld ymm8, ymm7, 12
1046
+ vpslld ymm7, ymm7, 20
1047
+ vpor ymm7, ymm7, ymm8
1048
+ vpsrld ymm8, ymm4, 12
1049
+ vpslld ymm4, ymm4, 20
1050
+ vpor ymm4, ymm4, ymm8
1051
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+60H]
1052
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+140H]
1053
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0C0H]
1054
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
1055
+ vpaddd ymm0, ymm0, ymm5
1056
+ vpaddd ymm1, ymm1, ymm6
1057
+ vpaddd ymm2, ymm2, ymm7
1058
+ vpaddd ymm3, ymm3, ymm4
1059
+ vpxor ymm15, ymm15, ymm0
1060
+ vpxor ymm12, ymm12, ymm1
1061
+ vpxor ymm13, ymm13, ymm2
1062
+ vpxor ymm14, ymm14, ymm3
1063
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
1064
+ vpshufb ymm15, ymm15, ymm8
1065
+ vpshufb ymm12, ymm12, ymm8
1066
+ vpshufb ymm13, ymm13, ymm8
1067
+ vpshufb ymm14, ymm14, ymm8
1068
+ vpaddd ymm10, ymm10, ymm15
1069
+ vpaddd ymm11, ymm11, ymm12
1070
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
1071
+ vpaddd ymm9, ymm9, ymm14
1072
+ vpxor ymm5, ymm5, ymm10
1073
+ vpxor ymm6, ymm6, ymm11
1074
+ vpxor ymm7, ymm7, ymm8
1075
+ vpxor ymm4, ymm4, ymm9
1076
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1077
+ vpsrld ymm8, ymm5, 7
1078
+ vpslld ymm5, ymm5, 25
1079
+ vpor ymm5, ymm5, ymm8
1080
+ vpsrld ymm8, ymm6, 7
1081
+ vpslld ymm6, ymm6, 25
1082
+ vpor ymm6, ymm6, ymm8
1083
+ vpsrld ymm8, ymm7, 7
1084
+ vpslld ymm7, ymm7, 25
1085
+ vpor ymm7, ymm7, ymm8
1086
+ vpsrld ymm8, ymm4, 7
1087
+ vpslld ymm4, ymm4, 25
1088
+ vpor ymm4, ymm4, ymm8
1089
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+160H]
1090
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0A0H]
1091
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+20H]
1092
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+100H]
1093
+ vpaddd ymm0, ymm0, ymm4
1094
+ vpaddd ymm1, ymm1, ymm5
1095
+ vpaddd ymm2, ymm2, ymm6
1096
+ vpaddd ymm3, ymm3, ymm7
1097
+ vpxor ymm12, ymm12, ymm0
1098
+ vpxor ymm13, ymm13, ymm1
1099
+ vpxor ymm14, ymm14, ymm2
1100
+ vpxor ymm15, ymm15, ymm3
1101
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
1102
+ vpshufb ymm12, ymm12, ymm8
1103
+ vpshufb ymm13, ymm13, ymm8
1104
+ vpshufb ymm14, ymm14, ymm8
1105
+ vpshufb ymm15, ymm15, ymm8
1106
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
1107
+ vpaddd ymm9, ymm9, ymm13
1108
+ vpaddd ymm10, ymm10, ymm14
1109
+ vpaddd ymm11, ymm11, ymm15
1110
+ vpxor ymm4, ymm4, ymm8
1111
+ vpxor ymm5, ymm5, ymm9
1112
+ vpxor ymm6, ymm6, ymm10
1113
+ vpxor ymm7, ymm7, ymm11
1114
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1115
+ vpsrld ymm8, ymm4, 12
1116
+ vpslld ymm4, ymm4, 20
1117
+ vpor ymm4, ymm4, ymm8
1118
+ vpsrld ymm8, ymm5, 12
1119
+ vpslld ymm5, ymm5, 20
1120
+ vpor ymm5, ymm5, ymm8
1121
+ vpsrld ymm8, ymm6, 12
1122
+ vpslld ymm6, ymm6, 20
1123
+ vpor ymm6, ymm6, ymm8
1124
+ vpsrld ymm8, ymm7, 12
1125
+ vpslld ymm7, ymm7, 20
1126
+ vpor ymm7, ymm7, ymm8
1127
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+1E0H]
1128
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
1129
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+120H]
1130
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0C0H]
1131
+ vpaddd ymm0, ymm0, ymm4
1132
+ vpaddd ymm1, ymm1, ymm5
1133
+ vpaddd ymm2, ymm2, ymm6
1134
+ vpaddd ymm3, ymm3, ymm7
1135
+ vpxor ymm12, ymm12, ymm0
1136
+ vpxor ymm13, ymm13, ymm1
1137
+ vpxor ymm14, ymm14, ymm2
1138
+ vpxor ymm15, ymm15, ymm3
1139
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
1140
+ vpshufb ymm12, ymm12, ymm8
1141
+ vpshufb ymm13, ymm13, ymm8
1142
+ vpshufb ymm14, ymm14, ymm8
1143
+ vpshufb ymm15, ymm15, ymm8
1144
+ vpaddd ymm8, ymm12, ymmword ptr [rsp+200H]
1145
+ vpaddd ymm9, ymm9, ymm13
1146
+ vpaddd ymm10, ymm10, ymm14
1147
+ vpaddd ymm11, ymm11, ymm15
1148
+ vpxor ymm4, ymm4, ymm8
1149
+ vpxor ymm5, ymm5, ymm9
1150
+ vpxor ymm6, ymm6, ymm10
1151
+ vpxor ymm7, ymm7, ymm11
1152
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1153
+ vpsrld ymm8, ymm4, 7
1154
+ vpslld ymm4, ymm4, 25
1155
+ vpor ymm4, ymm4, ymm8
1156
+ vpsrld ymm8, ymm5, 7
1157
+ vpslld ymm5, ymm5, 25
1158
+ vpor ymm5, ymm5, ymm8
1159
+ vpsrld ymm8, ymm6, 7
1160
+ vpslld ymm6, ymm6, 25
1161
+ vpor ymm6, ymm6, ymm8
1162
+ vpsrld ymm8, ymm7, 7
1163
+ vpslld ymm7, ymm7, 25
1164
+ vpor ymm7, ymm7, ymm8
1165
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+1C0H]
1166
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+40H]
1167
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+60H]
1168
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0E0H]
1169
+ vpaddd ymm0, ymm0, ymm5
1170
+ vpaddd ymm1, ymm1, ymm6
1171
+ vpaddd ymm2, ymm2, ymm7
1172
+ vpaddd ymm3, ymm3, ymm4
1173
+ vpxor ymm15, ymm15, ymm0
1174
+ vpxor ymm12, ymm12, ymm1
1175
+ vpxor ymm13, ymm13, ymm2
1176
+ vpxor ymm14, ymm14, ymm3
1177
+ vbroadcasti128 ymm8, xmmword ptr [ROT16]
1178
+ vpshufb ymm15, ymm15, ymm8
1179
+ vpshufb ymm12, ymm12, ymm8
1180
+ vpshufb ymm13, ymm13, ymm8
1181
+ vpshufb ymm14, ymm14, ymm8
1182
+ vpaddd ymm10, ymm10, ymm15
1183
+ vpaddd ymm11, ymm11, ymm12
1184
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
1185
+ vpaddd ymm9, ymm9, ymm14
1186
+ vpxor ymm5, ymm5, ymm10
1187
+ vpxor ymm6, ymm6, ymm11
1188
+ vpxor ymm7, ymm7, ymm8
1189
+ vpxor ymm4, ymm4, ymm9
1190
+ vmovdqa ymmword ptr [rsp+200H], ymm8
1191
+ vpsrld ymm8, ymm5, 12
1192
+ vpslld ymm5, ymm5, 20
1193
+ vpor ymm5, ymm5, ymm8
1194
+ vpsrld ymm8, ymm6, 12
1195
+ vpslld ymm6, ymm6, 20
1196
+ vpor ymm6, ymm6, ymm8
1197
+ vpsrld ymm8, ymm7, 12
1198
+ vpslld ymm7, ymm7, 20
1199
+ vpor ymm7, ymm7, ymm8
1200
+ vpsrld ymm8, ymm4, 12
1201
+ vpslld ymm4, ymm4, 20
1202
+ vpor ymm4, ymm4, ymm8
1203
+ vpaddd ymm0, ymm0, ymmword ptr [rsp+140H]
1204
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+180H]
1205
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+80H]
1206
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+1A0H]
1207
+ vpaddd ymm0, ymm0, ymm5
1208
+ vpaddd ymm1, ymm1, ymm6
1209
+ vpaddd ymm2, ymm2, ymm7
1210
+ vpaddd ymm3, ymm3, ymm4
1211
+ vpxor ymm15, ymm15, ymm0
1212
+ vpxor ymm12, ymm12, ymm1
1213
+ vpxor ymm13, ymm13, ymm2
1214
+ vpxor ymm14, ymm14, ymm3
1215
+ vbroadcasti128 ymm8, xmmword ptr [ROT8]
1216
+ vpshufb ymm15, ymm15, ymm8
1217
+ vpshufb ymm12, ymm12, ymm8
1218
+ vpshufb ymm13, ymm13, ymm8
1219
+ vpshufb ymm14, ymm14, ymm8
1220
+ vpaddd ymm10, ymm10, ymm15
1221
+ vpaddd ymm11, ymm11, ymm12
1222
+ vpaddd ymm8, ymm13, ymmword ptr [rsp+200H]
1223
+ vpaddd ymm9, ymm9, ymm14
1224
+ vpxor ymm5, ymm5, ymm10
1225
+ vpxor ymm6, ymm6, ymm11
1226
+ vpxor ymm7, ymm7, ymm8
1227
+ vpxor ymm4, ymm4, ymm9
1228
+ vpxor ymm0, ymm0, ymm8
1229
+ vpxor ymm1, ymm1, ymm9
1230
+ vpxor ymm2, ymm2, ymm10
1231
+ vpxor ymm3, ymm3, ymm11
1232
+ vpsrld ymm8, ymm5, 7
1233
+ vpslld ymm5, ymm5, 25
1234
+ vpor ymm5, ymm5, ymm8
1235
+ vpsrld ymm8, ymm6, 7
1236
+ vpslld ymm6, ymm6, 25
1237
+ vpor ymm6, ymm6, ymm8
1238
+ vpsrld ymm8, ymm7, 7
1239
+ vpslld ymm7, ymm7, 25
1240
+ vpor ymm7, ymm7, ymm8
1241
+ vpsrld ymm8, ymm4, 7
1242
+ vpslld ymm4, ymm4, 25
1243
+ vpor ymm4, ymm4, ymm8
1244
+ vpxor ymm4, ymm4, ymm12
1245
+ vpxor ymm5, ymm5, ymm13
1246
+ vpxor ymm6, ymm6, ymm14
1247
+ vpxor ymm7, ymm7, ymm15
1248
+ movzx eax, byte ptr [rbp+78H]
1249
+ jne innerloop8
1250
+ mov rbx, qword ptr [rbp+90H]
1251
+ vunpcklps ymm8, ymm0, ymm1
1252
+ vunpcklps ymm9, ymm2, ymm3
1253
+ vunpckhps ymm10, ymm0, ymm1
1254
+ vunpcklps ymm11, ymm4, ymm5
1255
+ vunpcklps ymm0, ymm6, ymm7
1256
+ vshufps ymm12, ymm8, ymm9, 78
1257
+ vblendps ymm1, ymm8, ymm12, 0CCH
1258
+ vshufps ymm8, ymm11, ymm0, 78
1259
+ vunpckhps ymm13, ymm2, ymm3
1260
+ vblendps ymm2, ymm11, ymm8, 0CCH
1261
+ vblendps ymm3, ymm12, ymm9, 0CCH
1262
+ vperm2f128 ymm12, ymm1, ymm2, 20H
1263
+ vmovups ymmword ptr [rbx], ymm12
1264
+ vunpckhps ymm14, ymm4, ymm5
1265
+ vblendps ymm4, ymm8, ymm0, 0CCH
1266
+ vunpckhps ymm15, ymm6, ymm7
1267
+ vperm2f128 ymm7, ymm3, ymm4, 20H
1268
+ vmovups ymmword ptr [rbx+20H], ymm7
1269
+ vshufps ymm5, ymm10, ymm13, 78
1270
+ vblendps ymm6, ymm5, ymm13, 0CCH
1271
+ vshufps ymm13, ymm14, ymm15, 78
1272
+ vblendps ymm10, ymm10, ymm5, 0CCH
1273
+ vblendps ymm14, ymm14, ymm13, 0CCH
1274
+ vperm2f128 ymm8, ymm10, ymm14, 20H
1275
+ vmovups ymmword ptr [rbx+40H], ymm8
1276
+ vblendps ymm15, ymm13, ymm15, 0CCH
1277
+ vperm2f128 ymm13, ymm6, ymm15, 20H
1278
+ vmovups ymmword ptr [rbx+60H], ymm13
1279
+ vperm2f128 ymm9, ymm1, ymm2, 31H
1280
+ vperm2f128 ymm11, ymm3, ymm4, 31H
1281
+ vmovups ymmword ptr [rbx+80H], ymm9
1282
+ vperm2f128 ymm14, ymm10, ymm14, 31H
1283
+ vperm2f128 ymm15, ymm6, ymm15, 31H
1284
+ vmovups ymmword ptr [rbx+0A0H], ymm11
1285
+ vmovups ymmword ptr [rbx+0C0H], ymm14
1286
+ vmovups ymmword ptr [rbx+0E0H], ymm15
1287
+ vmovdqa ymm0, ymmword ptr [rsp+2A0H]
1288
+ vpaddd ymm1, ymm0, ymmword ptr [rsp+220H]
1289
+ vmovdqa ymmword ptr [rsp+220H], ymm1
1290
+ vpxor ymm0, ymm0, ymmword ptr [CMP_MSB_MASK]
1291
+ vpxor ymm2, ymm1, ymmword ptr [CMP_MSB_MASK]
1292
+ vpcmpgtd ymm2, ymm0, ymm2
1293
+ vmovdqa ymm0, ymmword ptr [rsp+240H]
1294
+ vpsubd ymm2, ymm0, ymm2
1295
+ vmovdqa ymmword ptr [rsp+240H], ymm2
1296
+ add rdi, 64
1297
+ add rbx, 256
1298
+ mov qword ptr [rbp+90H], rbx
1299
+ sub rsi, 8
1300
+ cmp rsi, 8
1301
+ jnc outerloop8
1302
+ test rsi, rsi
1303
+ jnz final7blocks
1304
+ unwind:
1305
+ vzeroupper
1306
+ vmovdqa xmm6, xmmword ptr [rsp+2D0H]
1307
+ vmovdqa xmm7, xmmword ptr [rsp+2E0H]
1308
+ vmovdqa xmm8, xmmword ptr [rsp+2F0H]
1309
+ vmovdqa xmm9, xmmword ptr [rsp+300H]
1310
+ vmovdqa xmm10, xmmword ptr [rsp+310H]
1311
+ vmovdqa xmm11, xmmword ptr [rsp+320H]
1312
+ vmovdqa xmm12, xmmword ptr [rsp+330H]
1313
+ vmovdqa xmm13, xmmword ptr [rsp+340H]
1314
+ vmovdqa xmm14, xmmword ptr [rsp+350H]
1315
+ vmovdqa xmm15, xmmword ptr [rsp+360H]
1316
+ mov rsp, rbp
1317
+ pop rbp
1318
+ pop rbx
1319
+ pop rdi
1320
+ pop rsi
1321
+ pop r12
1322
+ pop r13
1323
+ pop r14
1324
+ pop r15
1325
+ ret
1326
+ ALIGN 16
1327
+ final7blocks:
1328
+ mov rbx, qword ptr [rbp+90H]
1329
+ mov r15, qword ptr [rsp+2C0H]
1330
+ movzx r13d, byte ptr [rbp+78H]
1331
+ movzx r12d, byte ptr [rbp+88H]
1332
+ test rsi, 4H
1333
+ je final3blocks
1334
+ vbroadcasti128 ymm0, xmmword ptr [rcx]
1335
+ vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
1336
+ vmovdqa ymm8, ymm0
1337
+ vmovdqa ymm9, ymm1
1338
+ vbroadcasti128 ymm12, xmmword ptr [rsp+220H]
1339
+ vbroadcasti128 ymm13, xmmword ptr [rsp+240H]
1340
+ vpunpckldq ymm14, ymm12, ymm13
1341
+ vpunpckhdq ymm15, ymm12, ymm13
1342
+ vpermq ymm14, ymm14, 50H
1343
+ vpermq ymm15, ymm15, 50H
1344
+ vbroadcasti128 ymm12, xmmword ptr [BLAKE3_BLOCK_LEN]
1345
+ vpblendd ymm14, ymm14, ymm12, 44H
1346
+ vpblendd ymm15, ymm15, ymm12, 44H
1347
+ vmovdqa ymmword ptr [rsp], ymm14
1348
+ vmovdqa ymmword ptr [rsp+20H], ymm15
1349
+ mov r8, qword ptr [rdi]
1350
+ mov r9, qword ptr [rdi+8H]
1351
+ mov r10, qword ptr [rdi+10H]
1352
+ mov r11, qword ptr [rdi+18H]
1353
+ movzx eax, byte ptr [rbp+80H]
1354
+ or eax, r13d
1355
+ xor edx, edx
1356
+ ALIGN 16
1357
+ innerloop4:
1358
+ mov r14d, eax
1359
+ or eax, r12d
1360
+ add rdx, 64
1361
+ cmp rdx, r15
1362
+ cmovne eax, r14d
1363
+ mov dword ptr [rsp+200H], eax
1364
+ vmovups ymm2, ymmword ptr [r8+rdx-40H]
1365
+ vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-40H], 01H
1366
+ vmovups ymm3, ymmword ptr [r8+rdx-30H]
1367
+ vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-30H], 01H
1368
+ vshufps ymm4, ymm2, ymm3, 136
1369
+ vshufps ymm5, ymm2, ymm3, 221
1370
+ vmovups ymm2, ymmword ptr [r8+rdx-20H]
1371
+ vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-20H], 01H
1372
+ vmovups ymm3, ymmword ptr [r8+rdx-10H]
1373
+ vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-10H], 01H
1374
+ vshufps ymm6, ymm2, ymm3, 136
1375
+ vshufps ymm7, ymm2, ymm3, 221
1376
+ vpshufd ymm6, ymm6, 93H
1377
+ vpshufd ymm7, ymm7, 93H
1378
+ vmovups ymm10, ymmword ptr [r10+rdx-40H]
1379
+ vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-40H], 01H
1380
+ vmovups ymm11, ymmword ptr [r10+rdx-30H]
1381
+ vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-30H], 01H
1382
+ vshufps ymm12, ymm10, ymm11, 136
1383
+ vshufps ymm13, ymm10, ymm11, 221
1384
+ vmovups ymm10, ymmword ptr [r10+rdx-20H]
1385
+ vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-20H], 01H
1386
+ vmovups ymm11, ymmword ptr [r10+rdx-10H]
1387
+ vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-10H], 01H
1388
+ vshufps ymm14, ymm10, ymm11, 136
1389
+ vshufps ymm15, ymm10, ymm11, 221
1390
+ vpshufd ymm14, ymm14, 93H
1391
+ vpshufd ymm15, ymm15, 93H
1392
+ vpbroadcastd ymm2, dword ptr [rsp+200H]
1393
+ vmovdqa ymm3, ymmword ptr [rsp]
1394
+ vmovdqa ymm11, ymmword ptr [rsp+20H]
1395
+ vpblendd ymm3, ymm3, ymm2, 88H
1396
+ vpblendd ymm11, ymm11, ymm2, 88H
1397
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
1398
+ vmovdqa ymm10, ymm2
1399
+ mov al, 7
1400
+ roundloop4:
1401
+ vpaddd ymm0, ymm0, ymm4
1402
+ vpaddd ymm8, ymm8, ymm12
1403
+ vmovdqa ymmword ptr [rsp+40H], ymm4
1404
+ nop
1405
+ vmovdqa ymmword ptr [rsp+60H], ymm12
1406
+ nop
1407
+ vpaddd ymm0, ymm0, ymm1
1408
+ vpaddd ymm8, ymm8, ymm9
1409
+ vpxor ymm3, ymm3, ymm0
1410
+ vpxor ymm11, ymm11, ymm8
1411
+ vbroadcasti128 ymm4, xmmword ptr [ROT16]
1412
+ vpshufb ymm3, ymm3, ymm4
1413
+ vpshufb ymm11, ymm11, ymm4
1414
+ vpaddd ymm2, ymm2, ymm3
1415
+ vpaddd ymm10, ymm10, ymm11
1416
+ vpxor ymm1, ymm1, ymm2
1417
+ vpxor ymm9, ymm9, ymm10
1418
+ vpsrld ymm4, ymm1, 12
1419
+ vpslld ymm1, ymm1, 20
1420
+ vpor ymm1, ymm1, ymm4
1421
+ vpsrld ymm4, ymm9, 12
1422
+ vpslld ymm9, ymm9, 20
1423
+ vpor ymm9, ymm9, ymm4
1424
+ vpaddd ymm0, ymm0, ymm5
1425
+ vpaddd ymm8, ymm8, ymm13
1426
+ vpaddd ymm0, ymm0, ymm1
1427
+ vpaddd ymm8, ymm8, ymm9
1428
+ vmovdqa ymmword ptr [rsp+80H], ymm5
1429
+ vmovdqa ymmword ptr [rsp+0A0H], ymm13
1430
+ vpxor ymm3, ymm3, ymm0
1431
+ vpxor ymm11, ymm11, ymm8
1432
+ vbroadcasti128 ymm4, xmmword ptr [ROT8]
1433
+ vpshufb ymm3, ymm3, ymm4
1434
+ vpshufb ymm11, ymm11, ymm4
1435
+ vpaddd ymm2, ymm2, ymm3
1436
+ vpaddd ymm10, ymm10, ymm11
1437
+ vpxor ymm1, ymm1, ymm2
1438
+ vpxor ymm9, ymm9, ymm10
1439
+ vpsrld ymm4, ymm1, 7
1440
+ vpslld ymm1, ymm1, 25
1441
+ vpor ymm1, ymm1, ymm4
1442
+ vpsrld ymm4, ymm9, 7
1443
+ vpslld ymm9, ymm9, 25
1444
+ vpor ymm9, ymm9, ymm4
1445
+ vpshufd ymm0, ymm0, 93H
1446
+ vpshufd ymm8, ymm8, 93H
1447
+ vpshufd ymm3, ymm3, 4EH
1448
+ vpshufd ymm11, ymm11, 4EH
1449
+ vpshufd ymm2, ymm2, 39H
1450
+ vpshufd ymm10, ymm10, 39H
1451
+ vpaddd ymm0, ymm0, ymm6
1452
+ vpaddd ymm8, ymm8, ymm14
1453
+ vpaddd ymm0, ymm0, ymm1
1454
+ vpaddd ymm8, ymm8, ymm9
1455
+ vpxor ymm3, ymm3, ymm0
1456
+ vpxor ymm11, ymm11, ymm8
1457
+ vbroadcasti128 ymm4, xmmword ptr [ROT16]
1458
+ vpshufb ymm3, ymm3, ymm4
1459
+ vpshufb ymm11, ymm11, ymm4
1460
+ vpaddd ymm2, ymm2, ymm3
1461
+ vpaddd ymm10, ymm10, ymm11
1462
+ vpxor ymm1, ymm1, ymm2
1463
+ vpxor ymm9, ymm9, ymm10
1464
+ vpsrld ymm4, ymm1, 12
1465
+ vpslld ymm1, ymm1, 20
1466
+ vpor ymm1, ymm1, ymm4
1467
+ vpsrld ymm4, ymm9, 12
1468
+ vpslld ymm9, ymm9, 20
1469
+ vpor ymm9, ymm9, ymm4
1470
+ vpaddd ymm0, ymm0, ymm7
1471
+ vpaddd ymm8, ymm8, ymm15
1472
+ vpaddd ymm0, ymm0, ymm1
1473
+ vpaddd ymm8, ymm8, ymm9
1474
+ vpxor ymm3, ymm3, ymm0
1475
+ vpxor ymm11, ymm11, ymm8
1476
+ vbroadcasti128 ymm4, xmmword ptr [ROT8]
1477
+ vpshufb ymm3, ymm3, ymm4
1478
+ vpshufb ymm11, ymm11, ymm4
1479
+ vpaddd ymm2, ymm2, ymm3
1480
+ vpaddd ymm10, ymm10, ymm11
1481
+ vpxor ymm1, ymm1, ymm2
1482
+ vpxor ymm9, ymm9, ymm10
1483
+ vpsrld ymm4, ymm1, 7
1484
+ vpslld ymm1, ymm1, 25
1485
+ vpor ymm1, ymm1, ymm4
1486
+ vpsrld ymm4, ymm9, 7
1487
+ vpslld ymm9, ymm9, 25
1488
+ vpor ymm9, ymm9, ymm4
1489
+ vpshufd ymm0, ymm0, 39H
1490
+ vpshufd ymm8, ymm8, 39H
1491
+ vpshufd ymm3, ymm3, 4EH
1492
+ vpshufd ymm11, ymm11, 4EH
1493
+ vpshufd ymm2, ymm2, 93H
1494
+ vpshufd ymm10, ymm10, 93H
1495
+ dec al
1496
+ je endroundloop4
1497
+ vmovdqa ymm4, ymmword ptr [rsp+40H]
1498
+ vmovdqa ymm5, ymmword ptr [rsp+80H]
1499
+ vshufps ymm12, ymm4, ymm5, 214
1500
+ vpshufd ymm13, ymm4, 0FH
1501
+ vpshufd ymm4, ymm12, 39H
1502
+ vshufps ymm12, ymm6, ymm7, 250
1503
+ vpblendd ymm13, ymm13, ymm12, 0AAH
1504
+ vpunpcklqdq ymm12, ymm7, ymm5
1505
+ vpblendd ymm12, ymm12, ymm6, 88H
1506
+ vpshufd ymm12, ymm12, 78H
1507
+ vpunpckhdq ymm5, ymm5, ymm7
1508
+ vpunpckldq ymm6, ymm6, ymm5
1509
+ vpshufd ymm7, ymm6, 1EH
1510
+ vmovdqa ymmword ptr [rsp+40H], ymm13
1511
+ vmovdqa ymmword ptr [rsp+80H], ymm12
1512
+ vmovdqa ymm12, ymmword ptr [rsp+60H]
1513
+ vmovdqa ymm13, ymmword ptr [rsp+0A0H]
1514
+ vshufps ymm5, ymm12, ymm13, 214
1515
+ vpshufd ymm6, ymm12, 0FH
1516
+ vpshufd ymm12, ymm5, 39H
1517
+ vshufps ymm5, ymm14, ymm15, 250
1518
+ vpblendd ymm6, ymm6, ymm5, 0AAH
1519
+ vpunpcklqdq ymm5, ymm15, ymm13
1520
+ vpblendd ymm5, ymm5, ymm14, 88H
1521
+ vpshufd ymm5, ymm5, 78H
1522
+ vpunpckhdq ymm13, ymm13, ymm15
1523
+ vpunpckldq ymm14, ymm14, ymm13
1524
+ vpshufd ymm15, ymm14, 1EH
1525
+ vmovdqa ymm13, ymm6
1526
+ vmovdqa ymm14, ymm5
1527
+ vmovdqa ymm5, ymmword ptr [rsp+40H]
1528
+ vmovdqa ymm6, ymmword ptr [rsp+80H]
1529
+ jmp roundloop4
1530
+ endroundloop4:
1531
+ vpxor ymm0, ymm0, ymm2
1532
+ vpxor ymm1, ymm1, ymm3
1533
+ vpxor ymm8, ymm8, ymm10
1534
+ vpxor ymm9, ymm9, ymm11
1535
+ mov eax, r13d
1536
+ cmp rdx, r15
1537
+ jne innerloop4
1538
+ vmovdqu xmmword ptr [rbx], xmm0
1539
+ vmovdqu xmmword ptr [rbx+10H], xmm1
1540
+ vextracti128 xmmword ptr [rbx+20H], ymm0, 01H
1541
+ vextracti128 xmmword ptr [rbx+30H], ymm1, 01H
1542
+ vmovdqu xmmword ptr [rbx+40H], xmm8
1543
+ vmovdqu xmmword ptr [rbx+50H], xmm9
1544
+ vextracti128 xmmword ptr [rbx+60H], ymm8, 01H
1545
+ vextracti128 xmmword ptr [rbx+70H], ymm9, 01H
1546
+ vmovaps xmm8, xmmword ptr [rsp+260H]
1547
+ vmovaps xmm0, xmmword ptr [rsp+220H]
1548
+ vmovaps xmm1, xmmword ptr [rsp+230H]
1549
+ vmovaps xmm2, xmmword ptr [rsp+240H]
1550
+ vmovaps xmm3, xmmword ptr [rsp+250H]
1551
+ vblendvps xmm0, xmm0, xmm1, xmm8
1552
+ vblendvps xmm2, xmm2, xmm3, xmm8
1553
+ vmovaps xmmword ptr [rsp+220H], xmm0
1554
+ vmovaps xmmword ptr [rsp+240H], xmm2
1555
+ add rbx, 128
1556
+ add rdi, 32
1557
+ sub rsi, 4
1558
+ final3blocks:
1559
+ test rsi, 2H
1560
+ je final1blocks
1561
+ vbroadcasti128 ymm0, xmmword ptr [rcx]
1562
+ vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
1563
+ vmovd xmm13, dword ptr [rsp+220H]
1564
+ vpinsrd xmm13, xmm13, dword ptr [rsp+240H], 1
1565
+ vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN], 2
1566
+ vmovd xmm14, dword ptr [rsp+224H]
1567
+ vpinsrd xmm14, xmm14, dword ptr [rsp+244H], 1
1568
+ vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN], 2
1569
+ vinserti128 ymm13, ymm13, xmm14, 01H
1570
+ vbroadcasti128 ymm14, xmmword ptr [ROT16]
1571
+ vbroadcasti128 ymm15, xmmword ptr [ROT8]
1572
+ mov r8, qword ptr [rdi]
1573
+ mov r9, qword ptr [rdi+8H]
1574
+ movzx eax, byte ptr [rbp+80H]
1575
+ or eax, r13d
1576
+ xor edx, edx
1577
+ ALIGN 16
1578
+ innerloop2:
1579
+ mov r14d, eax
1580
+ or eax, r12d
1581
+ add rdx, 64
1582
+ cmp rdx, r15
1583
+ cmovne eax, r14d
1584
+ mov dword ptr [rsp+200H], eax
1585
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
1586
+ vpbroadcastd ymm8, dword ptr [rsp+200H]
1587
+ vpblendd ymm3, ymm13, ymm8, 88H
1588
+ vmovups ymm8, ymmword ptr [r8+rdx-40H]
1589
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-40H], 01H
1590
+ vmovups ymm9, ymmword ptr [r8+rdx-30H]
1591
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-30H], 01H
1592
+ vshufps ymm4, ymm8, ymm9, 136
1593
+ vshufps ymm5, ymm8, ymm9, 221
1594
+ vmovups ymm8, ymmword ptr [r8+rdx-20H]
1595
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-20H], 01H
1596
+ vmovups ymm9, ymmword ptr [r8+rdx-10H]
1597
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-10H], 01H
1598
+ vshufps ymm6, ymm8, ymm9, 136
1599
+ vshufps ymm7, ymm8, ymm9, 221
1600
+ vpshufd ymm6, ymm6, 93H
1601
+ vpshufd ymm7, ymm7, 93H
1602
+ mov al, 7
1603
+ roundloop2:
1604
+ vpaddd ymm0, ymm0, ymm4
1605
+ vpaddd ymm0, ymm0, ymm1
1606
+ vpxor ymm3, ymm3, ymm0
1607
+ vpshufb ymm3, ymm3, ymm14
1608
+ vpaddd ymm2, ymm2, ymm3
1609
+ vpxor ymm1, ymm1, ymm2
1610
+ vpsrld ymm8, ymm1, 12
1611
+ vpslld ymm1, ymm1, 20
1612
+ vpor ymm1, ymm1, ymm8
1613
+ vpaddd ymm0, ymm0, ymm5
1614
+ vpaddd ymm0, ymm0, ymm1
1615
+ vpxor ymm3, ymm3, ymm0
1616
+ vpshufb ymm3, ymm3, ymm15
1617
+ vpaddd ymm2, ymm2, ymm3
1618
+ vpxor ymm1, ymm1, ymm2
1619
+ vpsrld ymm8, ymm1, 7
1620
+ vpslld ymm1, ymm1, 25
1621
+ vpor ymm1, ymm1, ymm8
1622
+ vpshufd ymm0, ymm0, 93H
1623
+ vpshufd ymm3, ymm3, 4EH
1624
+ vpshufd ymm2, ymm2, 39H
1625
+ vpaddd ymm0, ymm0, ymm6
1626
+ vpaddd ymm0, ymm0, ymm1
1627
+ vpxor ymm3, ymm3, ymm0
1628
+ vpshufb ymm3, ymm3, ymm14
1629
+ vpaddd ymm2, ymm2, ymm3
1630
+ vpxor ymm1, ymm1, ymm2
1631
+ vpsrld ymm8, ymm1, 12
1632
+ vpslld ymm1, ymm1, 20
1633
+ vpor ymm1, ymm1, ymm8
1634
+ vpaddd ymm0, ymm0, ymm7
1635
+ vpaddd ymm0, ymm0, ymm1
1636
+ vpxor ymm3, ymm3, ymm0
1637
+ vpshufb ymm3, ymm3, ymm15
1638
+ vpaddd ymm2, ymm2, ymm3
1639
+ vpxor ymm1, ymm1, ymm2
1640
+ vpsrld ymm8, ymm1, 7
1641
+ vpslld ymm1, ymm1, 25
1642
+ vpor ymm1, ymm1, ymm8
1643
+ vpshufd ymm0, ymm0, 39H
1644
+ vpshufd ymm3, ymm3, 4EH
1645
+ vpshufd ymm2, ymm2, 93H
1646
+ dec al
1647
+ jz endroundloop2
1648
+ vshufps ymm8, ymm4, ymm5, 214
1649
+ vpshufd ymm9, ymm4, 0FH
1650
+ vpshufd ymm4, ymm8, 39H
1651
+ vshufps ymm8, ymm6, ymm7, 250
1652
+ vpblendd ymm9, ymm9, ymm8, 0AAH
1653
+ vpunpcklqdq ymm8, ymm7, ymm5
1654
+ vpblendd ymm8, ymm8, ymm6, 88H
1655
+ vpshufd ymm8, ymm8, 78H
1656
+ vpunpckhdq ymm5, ymm5, ymm7
1657
+ vpunpckldq ymm6, ymm6, ymm5
1658
+ vpshufd ymm7, ymm6, 1EH
1659
+ vmovdqa ymm5, ymm9
1660
+ vmovdqa ymm6, ymm8
1661
+ jmp roundloop2
1662
+ endroundloop2:
1663
+ vpxor ymm0, ymm0, ymm2
1664
+ vpxor ymm1, ymm1, ymm3
1665
+ mov eax, r13d
1666
+ cmp rdx, r15
1667
+ jne innerloop2
1668
+ vmovdqu xmmword ptr [rbx], xmm0
1669
+ vmovdqu xmmword ptr [rbx+10H], xmm1
1670
+ vextracti128 xmmword ptr [rbx+20H], ymm0, 01H
1671
+ vextracti128 xmmword ptr [rbx+30H], ymm1, 01H
1672
+ vmovaps ymm8, ymmword ptr [rsp+260H]
1673
+ vmovaps ymm0, ymmword ptr [rsp+220H]
1674
+ vmovups ymm1, ymmword ptr [rsp+228H]
1675
+ vmovaps ymm2, ymmword ptr [rsp+240H]
1676
+ vmovups ymm3, ymmword ptr [rsp+248H]
1677
+ vblendvps ymm0, ymm0, ymm1, ymm8
1678
+ vblendvps ymm2, ymm2, ymm3, ymm8
1679
+ vmovaps ymmword ptr [rsp+220H], ymm0
1680
+ vmovaps ymmword ptr [rsp+240H], ymm2
1681
+ add rbx, 64
1682
+ add rdi, 16
1683
+ sub rsi, 2
1684
+ final1blocks:
1685
+ test rsi, 1H
1686
+ je unwind
1687
+ vmovdqu xmm0, xmmword ptr [rcx]
1688
+ vmovdqu xmm1, xmmword ptr [rcx+10H]
1689
+ vmovd xmm3, dword ptr [rsp+220H]
1690
+ vpinsrd xmm3, xmm3, dword ptr [rsp+240H], 1
1691
+ vpinsrd xmm13, xmm3, dword ptr [BLAKE3_BLOCK_LEN], 2
1692
+ vmovdqa xmm14, xmmword ptr [ROT16]
1693
+ vmovdqa xmm15, xmmword ptr [ROT8]
1694
+ mov r8, qword ptr [rdi]
1695
+ movzx eax, byte ptr [rbp+80H]
1696
+ or eax, r13d
1697
+ xor edx, edx
1698
+ ALIGN 16
1699
+ innerloop1:
1700
+ mov r14d, eax
1701
+ or eax, r12d
1702
+ add rdx, 64
1703
+ cmp rdx, r15
1704
+ cmovne eax, r14d
1705
+ vmovdqa xmm2, xmmword ptr [BLAKE3_IV]
1706
+ vmovdqa xmm3, xmm13
1707
+ vpinsrd xmm3, xmm3, eax, 3
1708
+ vmovups xmm8, xmmword ptr [r8+rdx-40H]
1709
+ vmovups xmm9, xmmword ptr [r8+rdx-30H]
1710
+ vshufps xmm4, xmm8, xmm9, 136
1711
+ vshufps xmm5, xmm8, xmm9, 221
1712
+ vmovups xmm8, xmmword ptr [r8+rdx-20H]
1713
+ vmovups xmm9, xmmword ptr [r8+rdx-10H]
1714
+ vshufps xmm6, xmm8, xmm9, 136
1715
+ vshufps xmm7, xmm8, xmm9, 221
1716
+ vpshufd xmm6, xmm6, 93H
1717
+ vpshufd xmm7, xmm7, 93H
1718
+ mov al, 7
1719
+ roundloop1:
1720
+ vpaddd xmm0, xmm0, xmm4
1721
+ vpaddd xmm0, xmm0, xmm1
1722
+ vpxor xmm3, xmm3, xmm0
1723
+ vpshufb xmm3, xmm3, xmm14
1724
+ vpaddd xmm2, xmm2, xmm3
1725
+ vpxor xmm1, xmm1, xmm2
1726
+ vpsrld xmm8, xmm1, 12
1727
+ vpslld xmm1, xmm1, 20
1728
+ vpor xmm1, xmm1, xmm8
1729
+ vpaddd xmm0, xmm0, xmm5
1730
+ vpaddd xmm0, xmm0, xmm1
1731
+ vpxor xmm3, xmm3, xmm0
1732
+ vpshufb xmm3, xmm3, xmm15
1733
+ vpaddd xmm2, xmm2, xmm3
1734
+ vpxor xmm1, xmm1, xmm2
1735
+ vpsrld xmm8, xmm1, 7
1736
+ vpslld xmm1, xmm1, 25
1737
+ vpor xmm1, xmm1, xmm8
1738
+ vpshufd xmm0, xmm0, 93H
1739
+ vpshufd xmm3, xmm3, 4EH
1740
+ vpshufd xmm2, xmm2, 39H
1741
+ vpaddd xmm0, xmm0, xmm6
1742
+ vpaddd xmm0, xmm0, xmm1
1743
+ vpxor xmm3, xmm3, xmm0
1744
+ vpshufb xmm3, xmm3, xmm14
1745
+ vpaddd xmm2, xmm2, xmm3
1746
+ vpxor xmm1, xmm1, xmm2
1747
+ vpsrld xmm8, xmm1, 12
1748
+ vpslld xmm1, xmm1, 20
1749
+ vpor xmm1, xmm1, xmm8
1750
+ vpaddd xmm0, xmm0, xmm7
1751
+ vpaddd xmm0, xmm0, xmm1
1752
+ vpxor xmm3, xmm3, xmm0
1753
+ vpshufb xmm3, xmm3, xmm15
1754
+ vpaddd xmm2, xmm2, xmm3
1755
+ vpxor xmm1, xmm1, xmm2
1756
+ vpsrld xmm8, xmm1, 7
1757
+ vpslld xmm1, xmm1, 25
1758
+ vpor xmm1, xmm1, xmm8
1759
+ vpshufd xmm0, xmm0, 39H
1760
+ vpshufd xmm3, xmm3, 4EH
1761
+ vpshufd xmm2, xmm2, 93H
1762
+ dec al
1763
+ jz endroundloop1
1764
+ vshufps xmm8, xmm4, xmm5, 214
1765
+ vpshufd xmm9, xmm4, 0FH
1766
+ vpshufd xmm4, xmm8, 39H
1767
+ vshufps xmm8, xmm6, xmm7, 250
1768
+ vpblendd xmm9, xmm9, xmm8, 0AAH
1769
+ vpunpcklqdq xmm8, xmm7, xmm5
1770
+ vpblendd xmm8, xmm8, xmm6, 88H
1771
+ vpshufd xmm8, xmm8, 78H
1772
+ vpunpckhdq xmm5, xmm5, xmm7
1773
+ vpunpckldq xmm6, xmm6, xmm5
1774
+ vpshufd xmm7, xmm6, 1EH
1775
+ vmovdqa xmm5, xmm9
1776
+ vmovdqa xmm6, xmm8
1777
+ jmp roundloop1
1778
+ endroundloop1:
1779
+ vpxor xmm0, xmm0, xmm2
1780
+ vpxor xmm1, xmm1, xmm3
1781
+ mov eax, r13d
1782
+ cmp rdx, r15
1783
+ jne innerloop1
1784
+ vmovdqu xmmword ptr [rbx], xmm0
1785
+ vmovdqu xmmword ptr [rbx+10H], xmm1
1786
+ jmp unwind
1787
+
1788
+ _blake3_hash_many_avx2 ENDP
1789
+ blake3_hash_many_avx2 ENDP
1790
+ _TEXT ENDS
1791
+
1792
+ _RDATA SEGMENT READONLY PAGE ALIAS(".rdata") 'CONST'
1793
+ ALIGN 64
1794
+ ADD0:
1795
+ dd 0, 1, 2, 3, 4, 5, 6, 7
1796
+
1797
+ ADD1:
1798
+ dd 8 dup (8)
1799
+
1800
+ BLAKE3_IV_0:
1801
+ dd 8 dup (6A09E667H)
1802
+
1803
+ BLAKE3_IV_1:
1804
+ dd 8 dup (0BB67AE85H)
1805
+
1806
+ BLAKE3_IV_2:
1807
+ dd 8 dup (3C6EF372H)
1808
+
1809
+ BLAKE3_IV_3:
1810
+ dd 8 dup (0A54FF53AH)
1811
+
1812
+ BLAKE3_BLOCK_LEN:
1813
+ dd 8 dup (64)
1814
+
1815
+ ROT16:
1816
+ db 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
1817
+
1818
+ ROT8:
1819
+ db 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
1820
+
1821
+ CMP_MSB_MASK:
1822
+ dd 8 dup(80000000H)
1823
+
1824
+ BLAKE3_IV:
1825
+ dd 6A09E667H, 0BB67AE85H, 3C6EF372H, 0A54FF53AH
1826
+
1827
+ _RDATA ENDS
1828
+ END