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