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