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