uncle_blake3 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +27 -0
  3. data/README.md +89 -0
  4. data/ext/Rakefile +55 -0
  5. data/ext/binding/uncle_blake3.c +41 -0
  6. data/ext/blake3/c/Makefile.testing +82 -0
  7. data/ext/blake3/c/README.md +316 -0
  8. data/ext/blake3/c/blake3.c +616 -0
  9. data/ext/blake3/c/blake3.h +60 -0
  10. data/ext/blake3/c/blake3_avx2.c +326 -0
  11. data/ext/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  12. data/ext/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  13. data/ext/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  14. data/ext/blake3/c/blake3_avx512.c +1207 -0
  15. data/ext/blake3/c/blake3_avx512_x86-64_unix.S +2585 -0
  16. data/ext/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  17. data/ext/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  18. data/ext/blake3/c/blake3_dispatch.c +276 -0
  19. data/ext/blake3/c/blake3_impl.h +282 -0
  20. data/ext/blake3/c/blake3_neon.c +351 -0
  21. data/ext/blake3/c/blake3_portable.c +160 -0
  22. data/ext/blake3/c/blake3_sse2.c +566 -0
  23. data/ext/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  24. data/ext/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  25. data/ext/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  26. data/ext/blake3/c/blake3_sse41.c +560 -0
  27. data/ext/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  28. data/ext/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  29. data/ext/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  30. data/ext/blake3/c/example.c +37 -0
  31. data/ext/blake3/c/main.c +166 -0
  32. data/ext/blake3/c/test.py +97 -0
  33. data/lib/uncle_blake3/binding.rb +20 -0
  34. data/lib/uncle_blake3/build/loader.rb +40 -0
  35. data/lib/uncle_blake3/build/platform.rb +37 -0
  36. data/lib/uncle_blake3/build.rb +4 -0
  37. data/lib/uncle_blake3/digest.rb +119 -0
  38. data/lib/uncle_blake3/version.rb +5 -0
  39. data/lib/uncle_blake3.rb +7 -0
  40. metadata +112 -0
@@ -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