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