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,1815 @@
1
+ #if defined(__ELF__) && defined(__linux__)
2
+ .section .note.GNU-stack,"",%progbits
3
+ #endif
4
+
5
+ #if defined(__ELF__) && defined(__CET__) && defined(__has_include)
6
+ #if __has_include(<cet.h>)
7
+ #include <cet.h>
8
+ #endif
9
+ #endif
10
+
11
+ #if !defined(_CET_ENDBR)
12
+ #define _CET_ENDBR
13
+ #endif
14
+
15
+ .intel_syntax noprefix
16
+ .global _blake3_hash_many_avx2
17
+ .global blake3_hash_many_avx2
18
+ #ifdef __APPLE__
19
+ .text
20
+ #else
21
+ .section .text
22
+ #endif
23
+ .p2align 6
24
+ _blake3_hash_many_avx2:
25
+ blake3_hash_many_avx2:
26
+ _CET_ENDBR
27
+ push r15
28
+ push r14
29
+ push r13
30
+ push r12
31
+ push rbx
32
+ push rbp
33
+ mov rbp, rsp
34
+ sub rsp, 680
35
+ and rsp, 0xFFFFFFFFFFFFFFC0
36
+ neg r9d
37
+ vmovd xmm0, r9d
38
+ vpbroadcastd ymm0, xmm0
39
+ vmovdqa ymmword ptr [rsp+0x280], ymm0
40
+ vpand ymm1, ymm0, ymmword ptr [ADD0+rip]
41
+ vpand ymm2, ymm0, ymmword ptr [ADD1+rip]
42
+ vmovdqa ymmword ptr [rsp+0x220], ymm2
43
+ vmovd xmm2, r8d
44
+ vpbroadcastd ymm2, xmm2
45
+ vpaddd ymm2, ymm2, ymm1
46
+ vmovdqa ymmword ptr [rsp+0x240], ymm2
47
+ vpxor ymm1, ymm1, ymmword ptr [CMP_MSB_MASK+rip]
48
+ vpxor ymm2, ymm2, ymmword ptr [CMP_MSB_MASK+rip]
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+0x260], ymm3
55
+ shl rdx, 6
56
+ mov qword ptr [rsp+0x2A0], rdx
57
+ cmp rsi, 8
58
+ jc 3f
59
+ 2:
60
+ vpbroadcastd ymm0, dword ptr [rcx]
61
+ vpbroadcastd ymm1, dword ptr [rcx+0x4]
62
+ vpbroadcastd ymm2, dword ptr [rcx+0x8]
63
+ vpbroadcastd ymm3, dword ptr [rcx+0xC]
64
+ vpbroadcastd ymm4, dword ptr [rcx+0x10]
65
+ vpbroadcastd ymm5, dword ptr [rcx+0x14]
66
+ vpbroadcastd ymm6, dword ptr [rcx+0x18]
67
+ vpbroadcastd ymm7, dword ptr [rcx+0x1C]
68
+ mov r8, qword ptr [rdi]
69
+ mov r9, qword ptr [rdi+0x8]
70
+ mov r10, qword ptr [rdi+0x10]
71
+ mov r11, qword ptr [rdi+0x18]
72
+ mov r12, qword ptr [rdi+0x20]
73
+ mov r13, qword ptr [rdi+0x28]
74
+ mov r14, qword ptr [rdi+0x30]
75
+ mov r15, qword ptr [rdi+0x38]
76
+ movzx eax, byte ptr [rbp+0x38]
77
+ movzx ebx, byte ptr [rbp+0x40]
78
+ or eax, ebx
79
+ xor edx, edx
80
+ .p2align 5
81
+ 9:
82
+ movzx ebx, byte ptr [rbp+0x48]
83
+ or ebx, eax
84
+ add rdx, 64
85
+ cmp rdx, qword ptr [rsp+0x2A0]
86
+ cmove eax, ebx
87
+ mov dword ptr [rsp+0x200], eax
88
+ vmovups xmm8, xmmword ptr [r8+rdx-0x40]
89
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x40], 0x01
90
+ vmovups xmm9, xmmword ptr [r9+rdx-0x40]
91
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x40], 0x01
92
+ vunpcklpd ymm12, ymm8, ymm9
93
+ vunpckhpd ymm13, ymm8, ymm9
94
+ vmovups xmm10, xmmword ptr [r10+rdx-0x40]
95
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x40], 0x01
96
+ vmovups xmm11, xmmword ptr [r11+rdx-0x40]
97
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x40], 0x01
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+0x20], ymm9
104
+ vshufps ymm10, ymm13, ymm15, 136
105
+ vmovaps ymmword ptr [rsp+0x40], ymm10
106
+ vshufps ymm11, ymm13, ymm15, 221
107
+ vmovaps ymmword ptr [rsp+0x60], ymm11
108
+ vmovups xmm8, xmmword ptr [r8+rdx-0x30]
109
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x30], 0x01
110
+ vmovups xmm9, xmmword ptr [r9+rdx-0x30]
111
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x30], 0x01
112
+ vunpcklpd ymm12, ymm8, ymm9
113
+ vunpckhpd ymm13, ymm8, ymm9
114
+ vmovups xmm10, xmmword ptr [r10+rdx-0x30]
115
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x30], 0x01
116
+ vmovups xmm11, xmmword ptr [r11+rdx-0x30]
117
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x30], 0x01
118
+ vunpcklpd ymm14, ymm10, ymm11
119
+ vunpckhpd ymm15, ymm10, ymm11
120
+ vshufps ymm8, ymm12, ymm14, 136
121
+ vmovaps ymmword ptr [rsp+0x80], ymm8
122
+ vshufps ymm9, ymm12, ymm14, 221
123
+ vmovaps ymmword ptr [rsp+0xA0], ymm9
124
+ vshufps ymm10, ymm13, ymm15, 136
125
+ vmovaps ymmword ptr [rsp+0xC0], ymm10
126
+ vshufps ymm11, ymm13, ymm15, 221
127
+ vmovaps ymmword ptr [rsp+0xE0], ymm11
128
+ vmovups xmm8, xmmword ptr [r8+rdx-0x20]
129
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x20], 0x01
130
+ vmovups xmm9, xmmword ptr [r9+rdx-0x20]
131
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x20], 0x01
132
+ vunpcklpd ymm12, ymm8, ymm9
133
+ vunpckhpd ymm13, ymm8, ymm9
134
+ vmovups xmm10, xmmword ptr [r10+rdx-0x20]
135
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x20], 0x01
136
+ vmovups xmm11, xmmword ptr [r11+rdx-0x20]
137
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x20], 0x01
138
+ vunpcklpd ymm14, ymm10, ymm11
139
+ vunpckhpd ymm15, ymm10, ymm11
140
+ vshufps ymm8, ymm12, ymm14, 136
141
+ vmovaps ymmword ptr [rsp+0x100], ymm8
142
+ vshufps ymm9, ymm12, ymm14, 221
143
+ vmovaps ymmword ptr [rsp+0x120], ymm9
144
+ vshufps ymm10, ymm13, ymm15, 136
145
+ vmovaps ymmword ptr [rsp+0x140], ymm10
146
+ vshufps ymm11, ymm13, ymm15, 221
147
+ vmovaps ymmword ptr [rsp+0x160], ymm11
148
+ vmovups xmm8, xmmword ptr [r8+rdx-0x10]
149
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x10], 0x01
150
+ vmovups xmm9, xmmword ptr [r9+rdx-0x10]
151
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x10], 0x01
152
+ vunpcklpd ymm12, ymm8, ymm9
153
+ vunpckhpd ymm13, ymm8, ymm9
154
+ vmovups xmm10, xmmword ptr [r10+rdx-0x10]
155
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x10], 0x01
156
+ vmovups xmm11, xmmword ptr [r11+rdx-0x10]
157
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x10], 0x01
158
+ vunpcklpd ymm14, ymm10, ymm11
159
+ vunpckhpd ymm15, ymm10, ymm11
160
+ vshufps ymm8, ymm12, ymm14, 136
161
+ vmovaps ymmword ptr [rsp+0x180], ymm8
162
+ vshufps ymm9, ymm12, ymm14, 221
163
+ vmovaps ymmword ptr [rsp+0x1A0], ymm9
164
+ vshufps ymm10, ymm13, ymm15, 136
165
+ vmovaps ymmword ptr [rsp+0x1C0], ymm10
166
+ vshufps ymm11, ymm13, ymm15, 221
167
+ vmovaps ymmword ptr [rsp+0x1E0], ymm11
168
+ vpbroadcastd ymm15, dword ptr [rsp+0x200]
169
+ prefetcht0 [r8+rdx+0x80]
170
+ prefetcht0 [r12+rdx+0x80]
171
+ prefetcht0 [r9+rdx+0x80]
172
+ prefetcht0 [r13+rdx+0x80]
173
+ prefetcht0 [r10+rdx+0x80]
174
+ prefetcht0 [r14+rdx+0x80]
175
+ prefetcht0 [r11+rdx+0x80]
176
+ prefetcht0 [r15+rdx+0x80]
177
+ vpaddd ymm0, ymm0, ymmword ptr [rsp]
178
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x40]
179
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x80]
180
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xC0]
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+0x240]
186
+ vpxor ymm13, ymm1, ymmword ptr [rsp+0x260]
187
+ vpxor ymm14, ymm2, ymmword ptr [BLAKE3_BLOCK_LEN+rip]
188
+ vpxor ymm15, ymm3, ymm15
189
+ vbroadcasti128 ymm8, xmmword ptr [ROT16+rip]
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+rip]
195
+ vpaddd ymm9, ymm13, ymmword ptr [BLAKE3_IV_1+rip]
196
+ vpaddd ymm10, ymm14, ymmword ptr [BLAKE3_IV_2+rip]
197
+ vpaddd ymm11, ymm15, ymmword ptr [BLAKE3_IV_3+rip]
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+0x200], 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+0x20]
216
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x60]
217
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0xA0]
218
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xE0]
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+rip]
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+0x200]
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+0x200], 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+0x100]
254
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x140]
255
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x180]
256
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1C0]
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+rip]
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+0x200]
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+0x200], 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+0x120]
292
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x160]
293
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1A0]
294
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1E0]
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+rip]
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+0x200]
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+0x200], 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+0x40]
330
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x60]
331
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0xE0]
332
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x80]
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+rip]
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+0x200]
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+0x200], 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+0xC0]
368
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x140]
369
+ vpaddd ymm2, ymm2, ymmword ptr [rsp]
370
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1A0]
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+rip]
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+0x200]
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+0x200], 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+0x20]
406
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x180]
407
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x120]
408
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1E0]
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+rip]
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+0x200]
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+0x200], 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+0x160]
444
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0xA0]
445
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1C0]
446
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x100]
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+rip]
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+0x200]
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+0x200], 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+0x60]
482
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x140]
483
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1A0]
484
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xE0]
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+rip]
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+0x200]
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+0x200], 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+0x80]
520
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x180]
521
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x40]
522
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1C0]
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+rip]
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+0x200]
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+0x200], 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+0xC0]
558
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x120]
559
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x160]
560
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x100]
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+rip]
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+0x200]
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+0x200], 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+0xA0]
596
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
597
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1E0]
598
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x20]
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+rip]
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+0x200]
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+0x200], 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+0x140]
634
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x180]
635
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1C0]
636
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1A0]
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+rip]
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+0x200]
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+0x200], 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+0xE0]
672
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x120]
673
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x60]
674
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1E0]
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+rip]
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+0x200]
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+0x200], 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+0x80]
710
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x160]
711
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0xA0]
712
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x20]
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+rip]
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+0x200]
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+0x200], 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+0x40]
749
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x100]
750
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xC0]
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+rip]
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+0x200]
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+0x200], 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+0x180]
786
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x120]
787
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x1E0]
788
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1C0]
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+rip]
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+0x200]
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+0x200], 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+0x1A0]
824
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x160]
825
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x140]
826
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x100]
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+rip]
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+0x200]
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+0x200], 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+0xE0]
862
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0xA0]
863
+ vpaddd ymm2, ymm2, ymmword ptr [rsp]
864
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xC0]
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+rip]
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+0x200]
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+0x200], 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+0x40]
900
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x60]
901
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x20]
902
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x80]
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+rip]
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+0x200]
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+0x200], 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+0x120]
938
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x160]
939
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x100]
940
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1E0]
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+rip]
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+0x200]
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+0x200], 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+0x1C0]
976
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0xA0]
977
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x180]
978
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x20]
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+rip]
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+0x200]
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+0x200], 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+0x1A0]
1014
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
1015
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x40]
1016
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x80]
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+rip]
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+0x200]
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+0x200], 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+0x60]
1052
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x140]
1053
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0xC0]
1054
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xE0]
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+rip]
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+0x200]
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+0x200], 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+0x160]
1090
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0xA0]
1091
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x20]
1092
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x100]
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+rip]
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+0x200]
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+0x200], 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+0x1E0]
1128
+ vpaddd ymm1, ymm1, ymmword ptr [rsp]
1129
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x120]
1130
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xC0]
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+rip]
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+0x200]
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+0x200], 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+0x1C0]
1166
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x40]
1167
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x60]
1168
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0xE0]
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+rip]
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+0x200]
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+0x200], 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+0x140]
1204
+ vpaddd ymm1, ymm1, ymmword ptr [rsp+0x180]
1205
+ vpaddd ymm2, ymm2, ymmword ptr [rsp+0x80]
1206
+ vpaddd ymm3, ymm3, ymmword ptr [rsp+0x1A0]
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+rip]
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+0x200]
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+0x38]
1249
+ jne 9b
1250
+ mov rbx, qword ptr [rbp+0x50]
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, 0xCC
1258
+ vshufps ymm8, ymm11, ymm0, 78
1259
+ vunpckhps ymm13, ymm2, ymm3
1260
+ vblendps ymm2, ymm11, ymm8, 0xCC
1261
+ vblendps ymm3, ymm12, ymm9, 0xCC
1262
+ vperm2f128 ymm12, ymm1, ymm2, 0x20
1263
+ vmovups ymmword ptr [rbx], ymm12
1264
+ vunpckhps ymm14, ymm4, ymm5
1265
+ vblendps ymm4, ymm8, ymm0, 0xCC
1266
+ vunpckhps ymm15, ymm6, ymm7
1267
+ vperm2f128 ymm7, ymm3, ymm4, 0x20
1268
+ vmovups ymmword ptr [rbx+0x20], ymm7
1269
+ vshufps ymm5, ymm10, ymm13, 78
1270
+ vblendps ymm6, ymm5, ymm13, 0xCC
1271
+ vshufps ymm13, ymm14, ymm15, 78
1272
+ vblendps ymm10, ymm10, ymm5, 0xCC
1273
+ vblendps ymm14, ymm14, ymm13, 0xCC
1274
+ vperm2f128 ymm8, ymm10, ymm14, 0x20
1275
+ vmovups ymmword ptr [rbx+0x40], ymm8
1276
+ vblendps ymm15, ymm13, ymm15, 0xCC
1277
+ vperm2f128 ymm13, ymm6, ymm15, 0x20
1278
+ vmovups ymmword ptr [rbx+0x60], ymm13
1279
+ vperm2f128 ymm9, ymm1, ymm2, 0x31
1280
+ vperm2f128 ymm11, ymm3, ymm4, 0x31
1281
+ vmovups ymmword ptr [rbx+0x80], ymm9
1282
+ vperm2f128 ymm14, ymm10, ymm14, 0x31
1283
+ vperm2f128 ymm15, ymm6, ymm15, 0x31
1284
+ vmovups ymmword ptr [rbx+0xA0], ymm11
1285
+ vmovups ymmword ptr [rbx+0xC0], ymm14
1286
+ vmovups ymmword ptr [rbx+0xE0], ymm15
1287
+ vmovdqa ymm0, ymmword ptr [rsp+0x220]
1288
+ vpaddd ymm1, ymm0, ymmword ptr [rsp+0x240]
1289
+ vmovdqa ymmword ptr [rsp+0x240], ymm1
1290
+ vpxor ymm0, ymm0, ymmword ptr [CMP_MSB_MASK+rip]
1291
+ vpxor ymm2, ymm1, ymmword ptr [CMP_MSB_MASK+rip]
1292
+ vpcmpgtd ymm2, ymm0, ymm2
1293
+ vmovdqa ymm0, ymmword ptr [rsp+0x260]
1294
+ vpsubd ymm2, ymm0, ymm2
1295
+ vmovdqa ymmword ptr [rsp+0x260], ymm2
1296
+ add rdi, 64
1297
+ add rbx, 256
1298
+ mov qword ptr [rbp+0x50], rbx
1299
+ sub rsi, 8
1300
+ cmp rsi, 8
1301
+ jnc 2b
1302
+ test rsi, rsi
1303
+ jnz 3f
1304
+ 4:
1305
+ vzeroupper
1306
+ mov rsp, rbp
1307
+ pop rbp
1308
+ pop rbx
1309
+ pop r12
1310
+ pop r13
1311
+ pop r14
1312
+ pop r15
1313
+ ret
1314
+ .p2align 5
1315
+ 3:
1316
+ mov rbx, qword ptr [rbp+0x50]
1317
+ mov r15, qword ptr [rsp+0x2A0]
1318
+ movzx r13d, byte ptr [rbp+0x38]
1319
+ movzx r12d, byte ptr [rbp+0x48]
1320
+ test rsi, 0x4
1321
+ je 3f
1322
+ vbroadcasti128 ymm0, xmmword ptr [rcx]
1323
+ vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
1324
+ vmovdqa ymm8, ymm0
1325
+ vmovdqa ymm9, ymm1
1326
+ vbroadcasti128 ymm12, xmmword ptr [rsp+0x240]
1327
+ vbroadcasti128 ymm13, xmmword ptr [rsp+0x260]
1328
+ vpunpckldq ymm14, ymm12, ymm13
1329
+ vpunpckhdq ymm15, ymm12, ymm13
1330
+ vpermq ymm14, ymm14, 0x50
1331
+ vpermq ymm15, ymm15, 0x50
1332
+ vbroadcasti128 ymm12, xmmword ptr [BLAKE3_BLOCK_LEN+rip]
1333
+ vpblendd ymm14, ymm14, ymm12, 0x44
1334
+ vpblendd ymm15, ymm15, ymm12, 0x44
1335
+ vmovdqa ymmword ptr [rsp], ymm14
1336
+ vmovdqa ymmword ptr [rsp+0x20], ymm15
1337
+ mov r8, qword ptr [rdi]
1338
+ mov r9, qword ptr [rdi+0x8]
1339
+ mov r10, qword ptr [rdi+0x10]
1340
+ mov r11, qword ptr [rdi+0x18]
1341
+ movzx eax, byte ptr [rbp+0x40]
1342
+ or eax, r13d
1343
+ xor edx, edx
1344
+ .p2align 5
1345
+ 2:
1346
+ mov r14d, eax
1347
+ or eax, r12d
1348
+ add rdx, 64
1349
+ cmp rdx, r15
1350
+ cmovne eax, r14d
1351
+ mov dword ptr [rsp+0x200], eax
1352
+ vmovups ymm2, ymmword ptr [r8+rdx-0x40]
1353
+ vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-0x40], 0x01
1354
+ vmovups ymm3, ymmword ptr [r8+rdx-0x30]
1355
+ vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-0x30], 0x01
1356
+ vshufps ymm4, ymm2, ymm3, 136
1357
+ vshufps ymm5, ymm2, ymm3, 221
1358
+ vmovups ymm2, ymmword ptr [r8+rdx-0x20]
1359
+ vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-0x20], 0x01
1360
+ vmovups ymm3, ymmword ptr [r8+rdx-0x10]
1361
+ vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-0x10], 0x01
1362
+ vshufps ymm6, ymm2, ymm3, 136
1363
+ vshufps ymm7, ymm2, ymm3, 221
1364
+ vpshufd ymm6, ymm6, 0x93
1365
+ vpshufd ymm7, ymm7, 0x93
1366
+ vmovups ymm10, ymmword ptr [r10+rdx-0x40]
1367
+ vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-0x40], 0x01
1368
+ vmovups ymm11, ymmword ptr [r10+rdx-0x30]
1369
+ vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-0x30], 0x01
1370
+ vshufps ymm12, ymm10, ymm11, 136
1371
+ vshufps ymm13, ymm10, ymm11, 221
1372
+ vmovups ymm10, ymmword ptr [r10+rdx-0x20]
1373
+ vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-0x20], 0x01
1374
+ vmovups ymm11, ymmword ptr [r10+rdx-0x10]
1375
+ vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-0x10], 0x01
1376
+ vshufps ymm14, ymm10, ymm11, 136
1377
+ vshufps ymm15, ymm10, ymm11, 221
1378
+ vpshufd ymm14, ymm14, 0x93
1379
+ vpshufd ymm15, ymm15, 0x93
1380
+ prefetcht0 [r8+rdx+0x80]
1381
+ prefetcht0 [r9+rdx+0x80]
1382
+ prefetcht0 [r10+rdx+0x80]
1383
+ prefetcht0 [r11+rdx+0x80]
1384
+ vpbroadcastd ymm2, dword ptr [rsp+0x200]
1385
+ vmovdqa ymm3, ymmword ptr [rsp]
1386
+ vmovdqa ymm11, ymmword ptr [rsp+0x20]
1387
+ vpblendd ymm3, ymm3, ymm2, 0x88
1388
+ vpblendd ymm11, ymm11, ymm2, 0x88
1389
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
1390
+ vmovdqa ymm10, ymm2
1391
+ mov al, 7
1392
+ 9:
1393
+ vpaddd ymm0, ymm0, ymm4
1394
+ vpaddd ymm8, ymm8, ymm12
1395
+ vmovdqa ymmword ptr [rsp+0x40], ymm4
1396
+ nop
1397
+ vmovdqa ymmword ptr [rsp+0x60], ymm12
1398
+ nop
1399
+ vpaddd ymm0, ymm0, ymm1
1400
+ vpaddd ymm8, ymm8, ymm9
1401
+ vpxor ymm3, ymm3, ymm0
1402
+ vpxor ymm11, ymm11, ymm8
1403
+ vbroadcasti128 ymm4, xmmword ptr [ROT16+rip]
1404
+ vpshufb ymm3, ymm3, ymm4
1405
+ vpshufb ymm11, ymm11, ymm4
1406
+ vpaddd ymm2, ymm2, ymm3
1407
+ vpaddd ymm10, ymm10, ymm11
1408
+ vpxor ymm1, ymm1, ymm2
1409
+ vpxor ymm9, ymm9, ymm10
1410
+ vpsrld ymm4, ymm1, 12
1411
+ vpslld ymm1, ymm1, 20
1412
+ vpor ymm1, ymm1, ymm4
1413
+ vpsrld ymm4, ymm9, 12
1414
+ vpslld ymm9, ymm9, 20
1415
+ vpor ymm9, ymm9, ymm4
1416
+ vpaddd ymm0, ymm0, ymm5
1417
+ vpaddd ymm8, ymm8, ymm13
1418
+ vpaddd ymm0, ymm0, ymm1
1419
+ vpaddd ymm8, ymm8, ymm9
1420
+ vmovdqa ymmword ptr [rsp+0x80], ymm5
1421
+ vmovdqa ymmword ptr [rsp+0xA0], ymm13
1422
+ vpxor ymm3, ymm3, ymm0
1423
+ vpxor ymm11, ymm11, ymm8
1424
+ vbroadcasti128 ymm4, xmmword ptr [ROT8+rip]
1425
+ vpshufb ymm3, ymm3, ymm4
1426
+ vpshufb ymm11, ymm11, ymm4
1427
+ vpaddd ymm2, ymm2, ymm3
1428
+ vpaddd ymm10, ymm10, ymm11
1429
+ vpxor ymm1, ymm1, ymm2
1430
+ vpxor ymm9, ymm9, ymm10
1431
+ vpsrld ymm4, ymm1, 7
1432
+ vpslld ymm1, ymm1, 25
1433
+ vpor ymm1, ymm1, ymm4
1434
+ vpsrld ymm4, ymm9, 7
1435
+ vpslld ymm9, ymm9, 25
1436
+ vpor ymm9, ymm9, ymm4
1437
+ vpshufd ymm0, ymm0, 0x93
1438
+ vpshufd ymm8, ymm8, 0x93
1439
+ vpshufd ymm3, ymm3, 0x4E
1440
+ vpshufd ymm11, ymm11, 0x4E
1441
+ vpshufd ymm2, ymm2, 0x39
1442
+ vpshufd ymm10, ymm10, 0x39
1443
+ vpaddd ymm0, ymm0, ymm6
1444
+ vpaddd ymm8, ymm8, ymm14
1445
+ vpaddd ymm0, ymm0, ymm1
1446
+ vpaddd ymm8, ymm8, ymm9
1447
+ vpxor ymm3, ymm3, ymm0
1448
+ vpxor ymm11, ymm11, ymm8
1449
+ vbroadcasti128 ymm4, xmmword ptr [ROT16+rip]
1450
+ vpshufb ymm3, ymm3, ymm4
1451
+ vpshufb ymm11, ymm11, ymm4
1452
+ vpaddd ymm2, ymm2, ymm3
1453
+ vpaddd ymm10, ymm10, ymm11
1454
+ vpxor ymm1, ymm1, ymm2
1455
+ vpxor ymm9, ymm9, ymm10
1456
+ vpsrld ymm4, ymm1, 12
1457
+ vpslld ymm1, ymm1, 20
1458
+ vpor ymm1, ymm1, ymm4
1459
+ vpsrld ymm4, ymm9, 12
1460
+ vpslld ymm9, ymm9, 20
1461
+ vpor ymm9, ymm9, ymm4
1462
+ vpaddd ymm0, ymm0, ymm7
1463
+ vpaddd ymm8, ymm8, ymm15
1464
+ vpaddd ymm0, ymm0, ymm1
1465
+ vpaddd ymm8, ymm8, ymm9
1466
+ vpxor ymm3, ymm3, ymm0
1467
+ vpxor ymm11, ymm11, ymm8
1468
+ vbroadcasti128 ymm4, xmmword ptr [ROT8+rip]
1469
+ vpshufb ymm3, ymm3, ymm4
1470
+ vpshufb ymm11, ymm11, ymm4
1471
+ vpaddd ymm2, ymm2, ymm3
1472
+ vpaddd ymm10, ymm10, ymm11
1473
+ vpxor ymm1, ymm1, ymm2
1474
+ vpxor ymm9, ymm9, ymm10
1475
+ vpsrld ymm4, ymm1, 7
1476
+ vpslld ymm1, ymm1, 25
1477
+ vpor ymm1, ymm1, ymm4
1478
+ vpsrld ymm4, ymm9, 7
1479
+ vpslld ymm9, ymm9, 25
1480
+ vpor ymm9, ymm9, ymm4
1481
+ vpshufd ymm0, ymm0, 0x39
1482
+ vpshufd ymm8, ymm8, 0x39
1483
+ vpshufd ymm3, ymm3, 0x4E
1484
+ vpshufd ymm11, ymm11, 0x4E
1485
+ vpshufd ymm2, ymm2, 0x93
1486
+ vpshufd ymm10, ymm10, 0x93
1487
+ dec al
1488
+ je 9f
1489
+ vmovdqa ymm4, ymmword ptr [rsp+0x40]
1490
+ vmovdqa ymm5, ymmword ptr [rsp+0x80]
1491
+ vshufps ymm12, ymm4, ymm5, 214
1492
+ vpshufd ymm13, ymm4, 0x0F
1493
+ vpshufd ymm4, ymm12, 0x39
1494
+ vshufps ymm12, ymm6, ymm7, 250
1495
+ vpblendd ymm13, ymm13, ymm12, 0xAA
1496
+ vpunpcklqdq ymm12, ymm7, ymm5
1497
+ vpblendd ymm12, ymm12, ymm6, 0x88
1498
+ vpshufd ymm12, ymm12, 0x78
1499
+ vpunpckhdq ymm5, ymm5, ymm7
1500
+ vpunpckldq ymm6, ymm6, ymm5
1501
+ vpshufd ymm7, ymm6, 0x1E
1502
+ vmovdqa ymmword ptr [rsp+0x40], ymm13
1503
+ vmovdqa ymmword ptr [rsp+0x80], ymm12
1504
+ vmovdqa ymm12, ymmword ptr [rsp+0x60]
1505
+ vmovdqa ymm13, ymmword ptr [rsp+0xA0]
1506
+ vshufps ymm5, ymm12, ymm13, 214
1507
+ vpshufd ymm6, ymm12, 0x0F
1508
+ vpshufd ymm12, ymm5, 0x39
1509
+ vshufps ymm5, ymm14, ymm15, 250
1510
+ vpblendd ymm6, ymm6, ymm5, 0xAA
1511
+ vpunpcklqdq ymm5, ymm15, ymm13
1512
+ vpblendd ymm5, ymm5, ymm14, 0x88
1513
+ vpshufd ymm5, ymm5, 0x78
1514
+ vpunpckhdq ymm13, ymm13, ymm15
1515
+ vpunpckldq ymm14, ymm14, ymm13
1516
+ vpshufd ymm15, ymm14, 0x1E
1517
+ vmovdqa ymm13, ymm6
1518
+ vmovdqa ymm14, ymm5
1519
+ vmovdqa ymm5, ymmword ptr [rsp+0x40]
1520
+ vmovdqa ymm6, ymmword ptr [rsp+0x80]
1521
+ jmp 9b
1522
+ 9:
1523
+ vpxor ymm0, ymm0, ymm2
1524
+ vpxor ymm1, ymm1, ymm3
1525
+ vpxor ymm8, ymm8, ymm10
1526
+ vpxor ymm9, ymm9, ymm11
1527
+ mov eax, r13d
1528
+ cmp rdx, r15
1529
+ jne 2b
1530
+ vmovdqu xmmword ptr [rbx], xmm0
1531
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
1532
+ vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
1533
+ vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
1534
+ vmovdqu xmmword ptr [rbx+0x40], xmm8
1535
+ vmovdqu xmmword ptr [rbx+0x50], xmm9
1536
+ vextracti128 xmmword ptr [rbx+0x60], ymm8, 0x01
1537
+ vextracti128 xmmword ptr [rbx+0x70], ymm9, 0x01
1538
+ vmovaps xmm8, xmmword ptr [rsp+0x280]
1539
+ vmovaps xmm0, xmmword ptr [rsp+0x240]
1540
+ vmovaps xmm1, xmmword ptr [rsp+0x250]
1541
+ vmovaps xmm2, xmmword ptr [rsp+0x260]
1542
+ vmovaps xmm3, xmmword ptr [rsp+0x270]
1543
+ vblendvps xmm0, xmm0, xmm1, xmm8
1544
+ vblendvps xmm2, xmm2, xmm3, xmm8
1545
+ vmovaps xmmword ptr [rsp+0x240], xmm0
1546
+ vmovaps xmmword ptr [rsp+0x260], xmm2
1547
+ add rbx, 128
1548
+ add rdi, 32
1549
+ sub rsi, 4
1550
+ 3:
1551
+ test rsi, 0x2
1552
+ je 3f
1553
+ vbroadcasti128 ymm0, xmmword ptr [rcx]
1554
+ vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
1555
+ vmovd xmm13, dword ptr [rsp+0x240]
1556
+ vpinsrd xmm13, xmm13, dword ptr [rsp+0x260], 1
1557
+ vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
1558
+ vmovd xmm14, dword ptr [rsp+0x244]
1559
+ vpinsrd xmm14, xmm14, dword ptr [rsp+0x264], 1
1560
+ vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
1561
+ vinserti128 ymm13, ymm13, xmm14, 0x01
1562
+ vbroadcasti128 ymm14, xmmword ptr [ROT16+rip]
1563
+ vbroadcasti128 ymm15, xmmword ptr [ROT8+rip]
1564
+ mov r8, qword ptr [rdi]
1565
+ mov r9, qword ptr [rdi+0x8]
1566
+ movzx eax, byte ptr [rbp+0x40]
1567
+ or eax, r13d
1568
+ xor edx, edx
1569
+ .p2align 5
1570
+ 2:
1571
+ mov r14d, eax
1572
+ or eax, r12d
1573
+ add rdx, 64
1574
+ cmp rdx, r15
1575
+ cmovne eax, r14d
1576
+ mov dword ptr [rsp+0x200], eax
1577
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
1578
+ vpbroadcastd ymm8, dword ptr [rsp+0x200]
1579
+ vpblendd ymm3, ymm13, ymm8, 0x88
1580
+ vmovups ymm8, ymmword ptr [r8+rdx-0x40]
1581
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x40], 0x01
1582
+ vmovups ymm9, ymmword ptr [r8+rdx-0x30]
1583
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x30], 0x01
1584
+ vshufps ymm4, ymm8, ymm9, 136
1585
+ vshufps ymm5, ymm8, ymm9, 221
1586
+ vmovups ymm8, ymmword ptr [r8+rdx-0x20]
1587
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x20], 0x01
1588
+ vmovups ymm9, ymmword ptr [r8+rdx-0x10]
1589
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x10], 0x01
1590
+ vshufps ymm6, ymm8, ymm9, 136
1591
+ vshufps ymm7, ymm8, ymm9, 221
1592
+ vpshufd ymm6, ymm6, 0x93
1593
+ vpshufd ymm7, ymm7, 0x93
1594
+ mov al, 7
1595
+ 9:
1596
+ vpaddd ymm0, ymm0, ymm4
1597
+ vpaddd ymm0, ymm0, ymm1
1598
+ vpxor ymm3, ymm3, ymm0
1599
+ vpshufb ymm3, ymm3, ymm14
1600
+ vpaddd ymm2, ymm2, ymm3
1601
+ vpxor ymm1, ymm1, ymm2
1602
+ vpsrld ymm8, ymm1, 12
1603
+ vpslld ymm1, ymm1, 20
1604
+ vpor ymm1, ymm1, ymm8
1605
+ vpaddd ymm0, ymm0, ymm5
1606
+ vpaddd ymm0, ymm0, ymm1
1607
+ vpxor ymm3, ymm3, ymm0
1608
+ vpshufb ymm3, ymm3, ymm15
1609
+ vpaddd ymm2, ymm2, ymm3
1610
+ vpxor ymm1, ymm1, ymm2
1611
+ vpsrld ymm8, ymm1, 7
1612
+ vpslld ymm1, ymm1, 25
1613
+ vpor ymm1, ymm1, ymm8
1614
+ vpshufd ymm0, ymm0, 0x93
1615
+ vpshufd ymm3, ymm3, 0x4E
1616
+ vpshufd ymm2, ymm2, 0x39
1617
+ vpaddd ymm0, ymm0, ymm6
1618
+ vpaddd ymm0, ymm0, ymm1
1619
+ vpxor ymm3, ymm3, ymm0
1620
+ vpshufb ymm3, ymm3, ymm14
1621
+ vpaddd ymm2, ymm2, ymm3
1622
+ vpxor ymm1, ymm1, ymm2
1623
+ vpsrld ymm8, ymm1, 12
1624
+ vpslld ymm1, ymm1, 20
1625
+ vpor ymm1, ymm1, ymm8
1626
+ vpaddd ymm0, ymm0, ymm7
1627
+ vpaddd ymm0, ymm0, ymm1
1628
+ vpxor ymm3, ymm3, ymm0
1629
+ vpshufb ymm3, ymm3, ymm15
1630
+ vpaddd ymm2, ymm2, ymm3
1631
+ vpxor ymm1, ymm1, ymm2
1632
+ vpsrld ymm8, ymm1, 7
1633
+ vpslld ymm1, ymm1, 25
1634
+ vpor ymm1, ymm1, ymm8
1635
+ vpshufd ymm0, ymm0, 0x39
1636
+ vpshufd ymm3, ymm3, 0x4E
1637
+ vpshufd ymm2, ymm2, 0x93
1638
+ dec al
1639
+ jz 9f
1640
+ vshufps ymm8, ymm4, ymm5, 214
1641
+ vpshufd ymm9, ymm4, 0x0F
1642
+ vpshufd ymm4, ymm8, 0x39
1643
+ vshufps ymm8, ymm6, ymm7, 250
1644
+ vpblendd ymm9, ymm9, ymm8, 0xAA
1645
+ vpunpcklqdq ymm8, ymm7, ymm5
1646
+ vpblendd ymm8, ymm8, ymm6, 0x88
1647
+ vpshufd ymm8, ymm8, 0x78
1648
+ vpunpckhdq ymm5, ymm5, ymm7
1649
+ vpunpckldq ymm6, ymm6, ymm5
1650
+ vpshufd ymm7, ymm6, 0x1E
1651
+ vmovdqa ymm5, ymm9
1652
+ vmovdqa ymm6, ymm8
1653
+ jmp 9b
1654
+ 9:
1655
+ vpxor ymm0, ymm0, ymm2
1656
+ vpxor ymm1, ymm1, ymm3
1657
+ mov eax, r13d
1658
+ cmp rdx, r15
1659
+ jne 2b
1660
+ vmovdqu xmmword ptr [rbx], xmm0
1661
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
1662
+ vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
1663
+ vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
1664
+ vmovaps ymm8, ymmword ptr [rsp+0x280]
1665
+ vmovaps ymm0, ymmword ptr [rsp+0x240]
1666
+ vmovups ymm1, ymmword ptr [rsp+0x248]
1667
+ vmovaps ymm2, ymmword ptr [rsp+0x260]
1668
+ vmovups ymm3, ymmword ptr [rsp+0x268]
1669
+ vblendvps ymm0, ymm0, ymm1, ymm8
1670
+ vblendvps ymm2, ymm2, ymm3, ymm8
1671
+ vmovaps ymmword ptr [rsp+0x240], ymm0
1672
+ vmovaps ymmword ptr [rsp+0x260], ymm2
1673
+ add rbx, 64
1674
+ add rdi, 16
1675
+ sub rsi, 2
1676
+ 3:
1677
+ test rsi, 0x1
1678
+ je 4b
1679
+ vmovdqu xmm0, xmmword ptr [rcx]
1680
+ vmovdqu xmm1, xmmword ptr [rcx+0x10]
1681
+ vmovd xmm3, dword ptr [rsp+0x240]
1682
+ vpinsrd xmm3, xmm3, dword ptr [rsp+0x260], 1
1683
+ vpinsrd xmm13, xmm3, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
1684
+ vmovdqa xmm14, xmmword ptr [ROT16+rip]
1685
+ vmovdqa xmm15, xmmword ptr [ROT8+rip]
1686
+ mov r8, qword ptr [rdi]
1687
+ movzx eax, byte ptr [rbp+0x40]
1688
+ or eax, r13d
1689
+ xor edx, edx
1690
+ .p2align 5
1691
+ 2:
1692
+ mov r14d, eax
1693
+ or eax, r12d
1694
+ add rdx, 64
1695
+ cmp rdx, r15
1696
+ cmovne eax, r14d
1697
+ vmovdqa xmm2, xmmword ptr [BLAKE3_IV+rip]
1698
+ vmovdqa xmm3, xmm13
1699
+ vpinsrd xmm3, xmm3, eax, 3
1700
+ vmovups xmm8, xmmword ptr [r8+rdx-0x40]
1701
+ vmovups xmm9, xmmword ptr [r8+rdx-0x30]
1702
+ vshufps xmm4, xmm8, xmm9, 136
1703
+ vshufps xmm5, xmm8, xmm9, 221
1704
+ vmovups xmm8, xmmword ptr [r8+rdx-0x20]
1705
+ vmovups xmm9, xmmword ptr [r8+rdx-0x10]
1706
+ vshufps xmm6, xmm8, xmm9, 136
1707
+ vshufps xmm7, xmm8, xmm9, 221
1708
+ vpshufd xmm6, xmm6, 0x93
1709
+ vpshufd xmm7, xmm7, 0x93
1710
+ mov al, 7
1711
+ 9:
1712
+ vpaddd xmm0, xmm0, xmm4
1713
+ vpaddd xmm0, xmm0, xmm1
1714
+ vpxor xmm3, xmm3, xmm0
1715
+ vpshufb xmm3, xmm3, xmm14
1716
+ vpaddd xmm2, xmm2, xmm3
1717
+ vpxor xmm1, xmm1, xmm2
1718
+ vpsrld xmm8, xmm1, 12
1719
+ vpslld xmm1, xmm1, 20
1720
+ vpor xmm1, xmm1, xmm8
1721
+ vpaddd xmm0, xmm0, xmm5
1722
+ vpaddd xmm0, xmm0, xmm1
1723
+ vpxor xmm3, xmm3, xmm0
1724
+ vpshufb xmm3, xmm3, xmm15
1725
+ vpaddd xmm2, xmm2, xmm3
1726
+ vpxor xmm1, xmm1, xmm2
1727
+ vpsrld xmm8, xmm1, 7
1728
+ vpslld xmm1, xmm1, 25
1729
+ vpor xmm1, xmm1, xmm8
1730
+ vpshufd xmm0, xmm0, 0x93
1731
+ vpshufd xmm3, xmm3, 0x4E
1732
+ vpshufd xmm2, xmm2, 0x39
1733
+ vpaddd xmm0, xmm0, xmm6
1734
+ vpaddd xmm0, xmm0, xmm1
1735
+ vpxor xmm3, xmm3, xmm0
1736
+ vpshufb xmm3, xmm3, xmm14
1737
+ vpaddd xmm2, xmm2, xmm3
1738
+ vpxor xmm1, xmm1, xmm2
1739
+ vpsrld xmm8, xmm1, 12
1740
+ vpslld xmm1, xmm1, 20
1741
+ vpor xmm1, xmm1, xmm8
1742
+ vpaddd xmm0, xmm0, xmm7
1743
+ vpaddd xmm0, xmm0, xmm1
1744
+ vpxor xmm3, xmm3, xmm0
1745
+ vpshufb xmm3, xmm3, xmm15
1746
+ vpaddd xmm2, xmm2, xmm3
1747
+ vpxor xmm1, xmm1, xmm2
1748
+ vpsrld xmm8, xmm1, 7
1749
+ vpslld xmm1, xmm1, 25
1750
+ vpor xmm1, xmm1, xmm8
1751
+ vpshufd xmm0, xmm0, 0x39
1752
+ vpshufd xmm3, xmm3, 0x4E
1753
+ vpshufd xmm2, xmm2, 0x93
1754
+ dec al
1755
+ jz 9f
1756
+ vshufps xmm8, xmm4, xmm5, 214
1757
+ vpshufd xmm9, xmm4, 0x0F
1758
+ vpshufd xmm4, xmm8, 0x39
1759
+ vshufps xmm8, xmm6, xmm7, 250
1760
+ vpblendd xmm9, xmm9, xmm8, 0xAA
1761
+ vpunpcklqdq xmm8, xmm7, xmm5
1762
+ vpblendd xmm8, xmm8, xmm6, 0x88
1763
+ vpshufd xmm8, xmm8, 0x78
1764
+ vpunpckhdq xmm5, xmm5, xmm7
1765
+ vpunpckldq xmm6, xmm6, xmm5
1766
+ vpshufd xmm7, xmm6, 0x1E
1767
+ vmovdqa xmm5, xmm9
1768
+ vmovdqa xmm6, xmm8
1769
+ jmp 9b
1770
+ 9:
1771
+ vpxor xmm0, xmm0, xmm2
1772
+ vpxor xmm1, xmm1, xmm3
1773
+ mov eax, r13d
1774
+ cmp rdx, r15
1775
+ jne 2b
1776
+ vmovdqu xmmword ptr [rbx], xmm0
1777
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
1778
+ jmp 4b
1779
+
1780
+
1781
+ #ifdef __APPLE__
1782
+ .static_data
1783
+ #else
1784
+ .section .rodata
1785
+ #endif
1786
+ .p2align 6
1787
+ ADD0:
1788
+ .long 0, 1, 2, 3, 4, 5, 6, 7
1789
+ ADD1:
1790
+ .long 8, 8, 8, 8, 8, 8, 8, 8
1791
+ BLAKE3_IV_0:
1792
+ .long 0x6A09E667, 0x6A09E667, 0x6A09E667, 0x6A09E667
1793
+ .long 0x6A09E667, 0x6A09E667, 0x6A09E667, 0x6A09E667
1794
+ BLAKE3_IV_1:
1795
+ .long 0xBB67AE85, 0xBB67AE85, 0xBB67AE85, 0xBB67AE85
1796
+ .long 0xBB67AE85, 0xBB67AE85, 0xBB67AE85, 0xBB67AE85
1797
+ BLAKE3_IV_2:
1798
+ .long 0x3C6EF372, 0x3C6EF372, 0x3C6EF372, 0x3C6EF372
1799
+ .long 0x3C6EF372, 0x3C6EF372, 0x3C6EF372, 0x3C6EF372
1800
+ BLAKE3_IV_3:
1801
+ .long 0xA54FF53A, 0xA54FF53A, 0xA54FF53A, 0xA54FF53A
1802
+ .long 0xA54FF53A, 0xA54FF53A, 0xA54FF53A, 0xA54FF53A
1803
+ BLAKE3_BLOCK_LEN:
1804
+ .long 0x00000040, 0x00000040, 0x00000040, 0x00000040
1805
+ .long 0x00000040, 0x00000040, 0x00000040, 0x00000040
1806
+ ROT16:
1807
+ .byte 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
1808
+ ROT8:
1809
+ .byte 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
1810
+ CMP_MSB_MASK:
1811
+ .long 0x80000000, 0x80000000, 0x80000000, 0x80000000
1812
+ .long 0x80000000, 0x80000000, 0x80000000, 0x80000000
1813
+ BLAKE3_IV:
1814
+ .long 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A
1815
+