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