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