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