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