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 */
21
22/*
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 */
27
28#if defined(HAVE_AVX2)
29
30#define _ASM
31#include <sys/asm_linkage.h>
32
33.intel_syntax noprefix
34.text
35
36ENTRY_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
702:
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
929:
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
13154:
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
13263:
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
13562:
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
14039:
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
15339:
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
15613:
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
15812:
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
16069:
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
16659:
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
16873:
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
17022:
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
17229:
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
17819:
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
1790
1791SET_SIZE(zfs_blake3_hash_many_avx2)
1792
1793SECTION_STATIC
1794
1795.p2align  6
1796ADD0:
1797        .long  0, 1, 2, 3, 4, 5, 6, 7
1798ADD1:
1799        .long  8, 8, 8, 8, 8, 8, 8, 8
1800BLAKE3_IV_0:
1801        .long  0x6A09E667, 0x6A09E667, 0x6A09E667, 0x6A09E667
1802        .long  0x6A09E667, 0x6A09E667, 0x6A09E667, 0x6A09E667
1803BLAKE3_IV_1:
1804        .long  0xBB67AE85, 0xBB67AE85, 0xBB67AE85, 0xBB67AE85
1805        .long  0xBB67AE85, 0xBB67AE85, 0xBB67AE85, 0xBB67AE85
1806BLAKE3_IV_2:
1807        .long  0x3C6EF372, 0x3C6EF372, 0x3C6EF372, 0x3C6EF372
1808        .long  0x3C6EF372, 0x3C6EF372, 0x3C6EF372, 0x3C6EF372
1809BLAKE3_IV_3:
1810        .long  0xA54FF53A, 0xA54FF53A, 0xA54FF53A, 0xA54FF53A
1811        .long  0xA54FF53A, 0xA54FF53A, 0xA54FF53A, 0xA54FF53A
1812BLAKE3_BLOCK_LEN:
1813        .long  0x00000040, 0x00000040, 0x00000040, 0x00000040
1814        .long  0x00000040, 0x00000040, 0x00000040, 0x00000040
1815ROT16:
1816        .byte  2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
1817ROT8:
1818        .byte  1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
1819CMP_MSB_MASK:
1820        .long  0x80000000, 0x80000000, 0x80000000, 0x80000000
1821        .long  0x80000000, 0x80000000, 0x80000000, 0x80000000
1822BLAKE3_IV:
1823        .long  0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A
1824#endif	/* HAVE_AVX2 */
1825
1826#ifdef __ELF__
1827.section .note.GNU-stack,"",%progbits
1828#endif
1829