Fix readonly check for vdev user properties
[zfs.git] / module / icp / asm-x86_64 / blake3 / blake3_avx512.S
blob39830f1556bb101f360cc7a0d5198eaacefce08f
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_AVX512F) && defined(HAVE_AVX512VL)
30 #define _ASM
31 #include <sys/asm_linkage.h>
33 .intel_syntax noprefix
34 .text
36 ENTRY_ALIGN(zfs_blake3_hash_many_avx512, 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, 144
46         and     rsp, 0xFFFFFFFFFFFFFFC0
47         neg     r9
48         kmovw   k1, r9d
49         vmovd   xmm0, r8d
50         vpbroadcastd ymm0, xmm0
51         shr     r8, 32
52         vmovd   xmm1, r8d
53         vpbroadcastd ymm1, xmm1
54         vmovdqa ymm4, ymm1
55         vmovdqa ymm5, ymm1
56         vpaddd  ymm2, ymm0, ymmword ptr [ADD0+rip]
57         vpaddd  ymm3, ymm0, ymmword ptr [ADD0+32+rip]
58         vpcmpltud k2, ymm2, ymm0
59         vpcmpltud k3, ymm3, ymm0
60         vpaddd  ymm4 {k2}, ymm4, dword ptr [ADD1+rip] {1to8}
61         vpaddd  ymm5 {k3}, ymm5, dword ptr [ADD1+rip] {1to8}
62         knotw   k2, k1
63         vmovdqa32 ymm2 {k2}, ymm0
64         vmovdqa32 ymm3 {k2}, ymm0
65         vmovdqa32 ymm4 {k2}, ymm1
66         vmovdqa32 ymm5 {k2}, ymm1
67         vmovdqa ymmword ptr [rsp], ymm2
68         vmovdqa ymmword ptr [rsp+0x1*0x20], ymm3
69         vmovdqa ymmword ptr [rsp+0x2*0x20], ymm4
70         vmovdqa ymmword ptr [rsp+0x3*0x20], ymm5
71         shl     rdx, 6
72         mov     qword ptr [rsp+0x80], rdx
73         cmp     rsi, 16
74         jc      3f
76         vpbroadcastd zmm0, dword ptr [rcx]
77         vpbroadcastd zmm1, dword ptr [rcx+0x1*0x4]
78         vpbroadcastd zmm2, dword ptr [rcx+0x2*0x4]
79         vpbroadcastd zmm3, dword ptr [rcx+0x3*0x4]
80         vpbroadcastd zmm4, dword ptr [rcx+0x4*0x4]
81         vpbroadcastd zmm5, dword ptr [rcx+0x5*0x4]
82         vpbroadcastd zmm6, dword ptr [rcx+0x6*0x4]
83         vpbroadcastd zmm7, dword ptr [rcx+0x7*0x4]
84         movzx   eax, byte ptr [rbp+0x38]
85         movzx   ebx, byte ptr [rbp+0x40]
86         or      eax, ebx
87         xor     edx, edx
88 .p2align 5
90         movzx   ebx, byte ptr [rbp+0x48]
91         or      ebx, eax
92         add     rdx, 64
93         cmp     rdx, qword ptr [rsp+0x80]
94         cmove   eax, ebx
95         mov     dword ptr [rsp+0x88], eax
96         mov     r8, qword ptr [rdi]
97         mov     r9, qword ptr [rdi+0x8]
98         mov     r10, qword ptr [rdi+0x10]
99         mov     r11, qword ptr [rdi+0x18]
100         mov     r12, qword ptr [rdi+0x40]
101         mov     r13, qword ptr [rdi+0x48]
102         mov     r14, qword ptr [rdi+0x50]
103         mov     r15, qword ptr [rdi+0x58]
104         vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
105         vinserti32x8 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
106         vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
107         vinserti32x8 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
108         vpunpcklqdq zmm8, zmm16, zmm17
109         vpunpckhqdq zmm9, zmm16, zmm17
110         vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
111         vinserti32x8 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
112         vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
113         vinserti32x8 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
114         vpunpcklqdq zmm10, zmm18, zmm19
115         vpunpckhqdq zmm11, zmm18, zmm19
116         mov     r8, qword ptr [rdi+0x20]
117         mov     r9, qword ptr [rdi+0x28]
118         mov     r10, qword ptr [rdi+0x30]
119         mov     r11, qword ptr [rdi+0x38]
120         mov     r12, qword ptr [rdi+0x60]
121         mov     r13, qword ptr [rdi+0x68]
122         mov     r14, qword ptr [rdi+0x70]
123         mov     r15, qword ptr [rdi+0x78]
124         vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
125         vinserti32x8 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
126         vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
127         vinserti32x8 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
128         vpunpcklqdq zmm12, zmm16, zmm17
129         vpunpckhqdq zmm13, zmm16, zmm17
130         vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
131         vinserti32x8 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
132         vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
133         vinserti32x8 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
134         vpunpcklqdq zmm14, zmm18, zmm19
135         vpunpckhqdq zmm15, zmm18, zmm19
136         vmovdqa32 zmm27, zmmword ptr [INDEX0+rip]
137         vmovdqa32 zmm31, zmmword ptr [INDEX1+rip]
138         vshufps zmm16, zmm8, zmm10, 136
139         vshufps zmm17, zmm12, zmm14, 136
140         vmovdqa32 zmm20, zmm16
141         vpermt2d zmm16, zmm27, zmm17
142         vpermt2d zmm20, zmm31, zmm17
143         vshufps zmm17, zmm8, zmm10, 221
144         vshufps zmm30, zmm12, zmm14, 221
145         vmovdqa32 zmm21, zmm17
146         vpermt2d zmm17, zmm27, zmm30
147         vpermt2d zmm21, zmm31, zmm30
148         vshufps zmm18, zmm9, zmm11, 136
149         vshufps zmm8, zmm13, zmm15, 136
150         vmovdqa32 zmm22, zmm18
151         vpermt2d zmm18, zmm27, zmm8
152         vpermt2d zmm22, zmm31, zmm8
153         vshufps zmm19, zmm9, zmm11, 221
154         vshufps zmm8, zmm13, zmm15, 221
155         vmovdqa32 zmm23, zmm19
156         vpermt2d zmm19, zmm27, zmm8
157         vpermt2d zmm23, zmm31, zmm8
158         mov     r8, qword ptr [rdi]
159         mov     r9, qword ptr [rdi+0x8]
160         mov     r10, qword ptr [rdi+0x10]
161         mov     r11, qword ptr [rdi+0x18]
162         mov     r12, qword ptr [rdi+0x40]
163         mov     r13, qword ptr [rdi+0x48]
164         mov     r14, qword ptr [rdi+0x50]
165         mov     r15, qword ptr [rdi+0x58]
166         vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
167         vinserti32x8 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
168         vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
169         vinserti32x8 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
170         vpunpcklqdq zmm8, zmm24, zmm25
171         vpunpckhqdq zmm9, zmm24, zmm25
172         vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
173         vinserti32x8 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
174         vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
175         vinserti32x8 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
176         vpunpcklqdq zmm10, zmm24, zmm25
177         vpunpckhqdq zmm11, zmm24, zmm25
178         prefetcht0 [r8+rdx+0x80]
179         prefetcht0 [r12+rdx+0x80]
180         prefetcht0 [r9+rdx+0x80]
181         prefetcht0 [r13+rdx+0x80]
182         prefetcht0 [r10+rdx+0x80]
183         prefetcht0 [r14+rdx+0x80]
184         prefetcht0 [r11+rdx+0x80]
185         prefetcht0 [r15+rdx+0x80]
186         mov     r8, qword ptr [rdi+0x20]
187         mov     r9, qword ptr [rdi+0x28]
188         mov     r10, qword ptr [rdi+0x30]
189         mov     r11, qword ptr [rdi+0x38]
190         mov     r12, qword ptr [rdi+0x60]
191         mov     r13, qword ptr [rdi+0x68]
192         mov     r14, qword ptr [rdi+0x70]
193         mov     r15, qword ptr [rdi+0x78]
194         vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
195         vinserti32x8 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
196         vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
197         vinserti32x8 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
198         vpunpcklqdq zmm12, zmm24, zmm25
199         vpunpckhqdq zmm13, zmm24, zmm25
200         vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
201         vinserti32x8 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
202         vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
203         vinserti32x8 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
204         vpunpcklqdq zmm14, zmm24, zmm25
205         vpunpckhqdq zmm15, zmm24, zmm25
206         prefetcht0 [r8+rdx+0x80]
207         prefetcht0 [r12+rdx+0x80]
208         prefetcht0 [r9+rdx+0x80]
209         prefetcht0 [r13+rdx+0x80]
210         prefetcht0 [r10+rdx+0x80]
211         prefetcht0 [r14+rdx+0x80]
212         prefetcht0 [r11+rdx+0x80]
213         prefetcht0 [r15+rdx+0x80]
214         vshufps zmm24, zmm8, zmm10, 136
215         vshufps zmm30, zmm12, zmm14, 136
216         vmovdqa32 zmm28, zmm24
217         vpermt2d zmm24, zmm27, zmm30
218         vpermt2d zmm28, zmm31, zmm30
219         vshufps zmm25, zmm8, zmm10, 221
220         vshufps zmm30, zmm12, zmm14, 221
221         vmovdqa32 zmm29, zmm25
222         vpermt2d zmm25, zmm27, zmm30
223         vpermt2d zmm29, zmm31, zmm30
224         vshufps zmm26, zmm9, zmm11, 136
225         vshufps zmm8, zmm13, zmm15, 136
226         vmovdqa32 zmm30, zmm26
227         vpermt2d zmm26, zmm27, zmm8
228         vpermt2d zmm30, zmm31, zmm8
229         vshufps zmm8, zmm9, zmm11, 221
230         vshufps zmm10, zmm13, zmm15, 221
231         vpermi2d zmm27, zmm8, zmm10
232         vpermi2d zmm31, zmm8, zmm10
233         vpbroadcastd zmm8, dword ptr [BLAKE3_IV_0+rip]
234         vpbroadcastd zmm9, dword ptr [BLAKE3_IV_1+rip]
235         vpbroadcastd zmm10, dword ptr [BLAKE3_IV_2+rip]
236         vpbroadcastd zmm11, dword ptr [BLAKE3_IV_3+rip]
237         vmovdqa32 zmm12, zmmword ptr [rsp]
238         vmovdqa32 zmm13, zmmword ptr [rsp+0x1*0x40]
239         vpbroadcastd zmm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
240         vpbroadcastd zmm15, dword ptr [rsp+0x22*0x4]
241         vpaddd  zmm0, zmm0, zmm16
242         vpaddd  zmm1, zmm1, zmm18
243         vpaddd  zmm2, zmm2, zmm20
244         vpaddd  zmm3, zmm3, zmm22
245         vpaddd  zmm0, zmm0, zmm4
246         vpaddd  zmm1, zmm1, zmm5
247         vpaddd  zmm2, zmm2, zmm6
248         vpaddd  zmm3, zmm3, zmm7
249         vpxord  zmm12, zmm12, zmm0
250         vpxord  zmm13, zmm13, zmm1
251         vpxord  zmm14, zmm14, zmm2
252         vpxord  zmm15, zmm15, zmm3
253         vprord  zmm12, zmm12, 16
254         vprord  zmm13, zmm13, 16
255         vprord  zmm14, zmm14, 16
256         vprord  zmm15, zmm15, 16
257         vpaddd  zmm8, zmm8, zmm12
258         vpaddd  zmm9, zmm9, zmm13
259         vpaddd  zmm10, zmm10, zmm14
260         vpaddd  zmm11, zmm11, zmm15
261         vpxord  zmm4, zmm4, zmm8
262         vpxord  zmm5, zmm5, zmm9
263         vpxord  zmm6, zmm6, zmm10
264         vpxord  zmm7, zmm7, zmm11
265         vprord  zmm4, zmm4, 12
266         vprord  zmm5, zmm5, 12
267         vprord  zmm6, zmm6, 12
268         vprord  zmm7, zmm7, 12
269         vpaddd  zmm0, zmm0, zmm17
270         vpaddd  zmm1, zmm1, zmm19
271         vpaddd  zmm2, zmm2, zmm21
272         vpaddd  zmm3, zmm3, zmm23
273         vpaddd  zmm0, zmm0, zmm4
274         vpaddd  zmm1, zmm1, zmm5
275         vpaddd  zmm2, zmm2, zmm6
276         vpaddd  zmm3, zmm3, zmm7
277         vpxord  zmm12, zmm12, zmm0
278         vpxord  zmm13, zmm13, zmm1
279         vpxord  zmm14, zmm14, zmm2
280         vpxord  zmm15, zmm15, zmm3
281         vprord  zmm12, zmm12, 8
282         vprord  zmm13, zmm13, 8
283         vprord  zmm14, zmm14, 8
284         vprord  zmm15, zmm15, 8
285         vpaddd  zmm8, zmm8, zmm12
286         vpaddd  zmm9, zmm9, zmm13
287         vpaddd  zmm10, zmm10, zmm14
288         vpaddd  zmm11, zmm11, zmm15
289         vpxord  zmm4, zmm4, zmm8
290         vpxord  zmm5, zmm5, zmm9
291         vpxord  zmm6, zmm6, zmm10
292         vpxord  zmm7, zmm7, zmm11
293         vprord  zmm4, zmm4, 7
294         vprord  zmm5, zmm5, 7
295         vprord  zmm6, zmm6, 7
296         vprord  zmm7, zmm7, 7
297         vpaddd  zmm0, zmm0, zmm24
298         vpaddd  zmm1, zmm1, zmm26
299         vpaddd  zmm2, zmm2, zmm28
300         vpaddd  zmm3, zmm3, zmm30
301         vpaddd  zmm0, zmm0, zmm5
302         vpaddd  zmm1, zmm1, zmm6
303         vpaddd  zmm2, zmm2, zmm7
304         vpaddd  zmm3, zmm3, zmm4
305         vpxord  zmm15, zmm15, zmm0
306         vpxord  zmm12, zmm12, zmm1
307         vpxord  zmm13, zmm13, zmm2
308         vpxord  zmm14, zmm14, zmm3
309         vprord  zmm15, zmm15, 16
310         vprord  zmm12, zmm12, 16
311         vprord  zmm13, zmm13, 16
312         vprord  zmm14, zmm14, 16
313         vpaddd  zmm10, zmm10, zmm15
314         vpaddd  zmm11, zmm11, zmm12
315         vpaddd  zmm8, zmm8, zmm13
316         vpaddd  zmm9, zmm9, zmm14
317         vpxord  zmm5, zmm5, zmm10
318         vpxord  zmm6, zmm6, zmm11
319         vpxord  zmm7, zmm7, zmm8
320         vpxord  zmm4, zmm4, zmm9
321         vprord  zmm5, zmm5, 12
322         vprord  zmm6, zmm6, 12
323         vprord  zmm7, zmm7, 12
324         vprord  zmm4, zmm4, 12
325         vpaddd  zmm0, zmm0, zmm25
326         vpaddd  zmm1, zmm1, zmm27
327         vpaddd  zmm2, zmm2, zmm29
328         vpaddd  zmm3, zmm3, zmm31
329         vpaddd  zmm0, zmm0, zmm5
330         vpaddd  zmm1, zmm1, zmm6
331         vpaddd  zmm2, zmm2, zmm7
332         vpaddd  zmm3, zmm3, zmm4
333         vpxord  zmm15, zmm15, zmm0
334         vpxord  zmm12, zmm12, zmm1
335         vpxord  zmm13, zmm13, zmm2
336         vpxord  zmm14, zmm14, zmm3
337         vprord  zmm15, zmm15, 8
338         vprord  zmm12, zmm12, 8
339         vprord  zmm13, zmm13, 8
340         vprord  zmm14, zmm14, 8
341         vpaddd  zmm10, zmm10, zmm15
342         vpaddd  zmm11, zmm11, zmm12
343         vpaddd  zmm8, zmm8, zmm13
344         vpaddd  zmm9, zmm9, zmm14
345         vpxord  zmm5, zmm5, zmm10
346         vpxord  zmm6, zmm6, zmm11
347         vpxord  zmm7, zmm7, zmm8
348         vpxord  zmm4, zmm4, zmm9
349         vprord  zmm5, zmm5, 7
350         vprord  zmm6, zmm6, 7
351         vprord  zmm7, zmm7, 7
352         vprord  zmm4, zmm4, 7
353         vpaddd  zmm0, zmm0, zmm18
354         vpaddd  zmm1, zmm1, zmm19
355         vpaddd  zmm2, zmm2, zmm23
356         vpaddd  zmm3, zmm3, zmm20
357         vpaddd  zmm0, zmm0, zmm4
358         vpaddd  zmm1, zmm1, zmm5
359         vpaddd  zmm2, zmm2, zmm6
360         vpaddd  zmm3, zmm3, zmm7
361         vpxord  zmm12, zmm12, zmm0
362         vpxord  zmm13, zmm13, zmm1
363         vpxord  zmm14, zmm14, zmm2
364         vpxord  zmm15, zmm15, zmm3
365         vprord  zmm12, zmm12, 16
366         vprord  zmm13, zmm13, 16
367         vprord  zmm14, zmm14, 16
368         vprord  zmm15, zmm15, 16
369         vpaddd  zmm8, zmm8, zmm12
370         vpaddd  zmm9, zmm9, zmm13
371         vpaddd  zmm10, zmm10, zmm14
372         vpaddd  zmm11, zmm11, zmm15
373         vpxord  zmm4, zmm4, zmm8
374         vpxord  zmm5, zmm5, zmm9
375         vpxord  zmm6, zmm6, zmm10
376         vpxord  zmm7, zmm7, zmm11
377         vprord  zmm4, zmm4, 12
378         vprord  zmm5, zmm5, 12
379         vprord  zmm6, zmm6, 12
380         vprord  zmm7, zmm7, 12
381         vpaddd  zmm0, zmm0, zmm22
382         vpaddd  zmm1, zmm1, zmm26
383         vpaddd  zmm2, zmm2, zmm16
384         vpaddd  zmm3, zmm3, zmm29
385         vpaddd  zmm0, zmm0, zmm4
386         vpaddd  zmm1, zmm1, zmm5
387         vpaddd  zmm2, zmm2, zmm6
388         vpaddd  zmm3, zmm3, zmm7
389         vpxord  zmm12, zmm12, zmm0
390         vpxord  zmm13, zmm13, zmm1
391         vpxord  zmm14, zmm14, zmm2
392         vpxord  zmm15, zmm15, zmm3
393         vprord  zmm12, zmm12, 8
394         vprord  zmm13, zmm13, 8
395         vprord  zmm14, zmm14, 8
396         vprord  zmm15, zmm15, 8
397         vpaddd  zmm8, zmm8, zmm12
398         vpaddd  zmm9, zmm9, zmm13
399         vpaddd  zmm10, zmm10, zmm14
400         vpaddd  zmm11, zmm11, zmm15
401         vpxord  zmm4, zmm4, zmm8
402         vpxord  zmm5, zmm5, zmm9
403         vpxord  zmm6, zmm6, zmm10
404         vpxord  zmm7, zmm7, zmm11
405         vprord  zmm4, zmm4, 7
406         vprord  zmm5, zmm5, 7
407         vprord  zmm6, zmm6, 7
408         vprord  zmm7, zmm7, 7
409         vpaddd  zmm0, zmm0, zmm17
410         vpaddd  zmm1, zmm1, zmm28
411         vpaddd  zmm2, zmm2, zmm25
412         vpaddd  zmm3, zmm3, zmm31
413         vpaddd  zmm0, zmm0, zmm5
414         vpaddd  zmm1, zmm1, zmm6
415         vpaddd  zmm2, zmm2, zmm7
416         vpaddd  zmm3, zmm3, zmm4
417         vpxord  zmm15, zmm15, zmm0
418         vpxord  zmm12, zmm12, zmm1
419         vpxord  zmm13, zmm13, zmm2
420         vpxord  zmm14, zmm14, zmm3
421         vprord  zmm15, zmm15, 16
422         vprord  zmm12, zmm12, 16
423         vprord  zmm13, zmm13, 16
424         vprord  zmm14, zmm14, 16
425         vpaddd  zmm10, zmm10, zmm15
426         vpaddd  zmm11, zmm11, zmm12
427         vpaddd  zmm8, zmm8, zmm13
428         vpaddd  zmm9, zmm9, zmm14
429         vpxord  zmm5, zmm5, zmm10
430         vpxord  zmm6, zmm6, zmm11
431         vpxord  zmm7, zmm7, zmm8
432         vpxord  zmm4, zmm4, zmm9
433         vprord  zmm5, zmm5, 12
434         vprord  zmm6, zmm6, 12
435         vprord  zmm7, zmm7, 12
436         vprord  zmm4, zmm4, 12
437         vpaddd  zmm0, zmm0, zmm27
438         vpaddd  zmm1, zmm1, zmm21
439         vpaddd  zmm2, zmm2, zmm30
440         vpaddd  zmm3, zmm3, zmm24
441         vpaddd  zmm0, zmm0, zmm5
442         vpaddd  zmm1, zmm1, zmm6
443         vpaddd  zmm2, zmm2, zmm7
444         vpaddd  zmm3, zmm3, zmm4
445         vpxord  zmm15, zmm15, zmm0
446         vpxord  zmm12, zmm12, zmm1
447         vpxord  zmm13, zmm13, zmm2
448         vpxord  zmm14, zmm14, zmm3
449         vprord  zmm15, zmm15, 8
450         vprord  zmm12, zmm12, 8
451         vprord  zmm13, zmm13, 8
452         vprord  zmm14, zmm14, 8
453         vpaddd  zmm10, zmm10, zmm15
454         vpaddd  zmm11, zmm11, zmm12
455         vpaddd  zmm8, zmm8, zmm13
456         vpaddd  zmm9, zmm9, zmm14
457         vpxord  zmm5, zmm5, zmm10
458         vpxord  zmm6, zmm6, zmm11
459         vpxord  zmm7, zmm7, zmm8
460         vpxord  zmm4, zmm4, zmm9
461         vprord  zmm5, zmm5, 7
462         vprord  zmm6, zmm6, 7
463         vprord  zmm7, zmm7, 7
464         vprord  zmm4, zmm4, 7
465         vpaddd  zmm0, zmm0, zmm19
466         vpaddd  zmm1, zmm1, zmm26
467         vpaddd  zmm2, zmm2, zmm29
468         vpaddd  zmm3, zmm3, zmm23
469         vpaddd  zmm0, zmm0, zmm4
470         vpaddd  zmm1, zmm1, zmm5
471         vpaddd  zmm2, zmm2, zmm6
472         vpaddd  zmm3, zmm3, zmm7
473         vpxord  zmm12, zmm12, zmm0
474         vpxord  zmm13, zmm13, zmm1
475         vpxord  zmm14, zmm14, zmm2
476         vpxord  zmm15, zmm15, zmm3
477         vprord  zmm12, zmm12, 16
478         vprord  zmm13, zmm13, 16
479         vprord  zmm14, zmm14, 16
480         vprord  zmm15, zmm15, 16
481         vpaddd  zmm8, zmm8, zmm12
482         vpaddd  zmm9, zmm9, zmm13
483         vpaddd  zmm10, zmm10, zmm14
484         vpaddd  zmm11, zmm11, zmm15
485         vpxord  zmm4, zmm4, zmm8
486         vpxord  zmm5, zmm5, zmm9
487         vpxord  zmm6, zmm6, zmm10
488         vpxord  zmm7, zmm7, zmm11
489         vprord  zmm4, zmm4, 12
490         vprord  zmm5, zmm5, 12
491         vprord  zmm6, zmm6, 12
492         vprord  zmm7, zmm7, 12
493         vpaddd  zmm0, zmm0, zmm20
494         vpaddd  zmm1, zmm1, zmm28
495         vpaddd  zmm2, zmm2, zmm18
496         vpaddd  zmm3, zmm3, zmm30
497         vpaddd  zmm0, zmm0, zmm4
498         vpaddd  zmm1, zmm1, zmm5
499         vpaddd  zmm2, zmm2, zmm6
500         vpaddd  zmm3, zmm3, zmm7
501         vpxord  zmm12, zmm12, zmm0
502         vpxord  zmm13, zmm13, zmm1
503         vpxord  zmm14, zmm14, zmm2
504         vpxord  zmm15, zmm15, zmm3
505         vprord  zmm12, zmm12, 8
506         vprord  zmm13, zmm13, 8
507         vprord  zmm14, zmm14, 8
508         vprord  zmm15, zmm15, 8
509         vpaddd  zmm8, zmm8, zmm12
510         vpaddd  zmm9, zmm9, zmm13
511         vpaddd  zmm10, zmm10, zmm14
512         vpaddd  zmm11, zmm11, zmm15
513         vpxord  zmm4, zmm4, zmm8
514         vpxord  zmm5, zmm5, zmm9
515         vpxord  zmm6, zmm6, zmm10
516         vpxord  zmm7, zmm7, zmm11
517         vprord  zmm4, zmm4, 7
518         vprord  zmm5, zmm5, 7
519         vprord  zmm6, zmm6, 7
520         vprord  zmm7, zmm7, 7
521         vpaddd  zmm0, zmm0, zmm22
522         vpaddd  zmm1, zmm1, zmm25
523         vpaddd  zmm2, zmm2, zmm27
524         vpaddd  zmm3, zmm3, zmm24
525         vpaddd  zmm0, zmm0, zmm5
526         vpaddd  zmm1, zmm1, zmm6
527         vpaddd  zmm2, zmm2, zmm7
528         vpaddd  zmm3, zmm3, zmm4
529         vpxord  zmm15, zmm15, zmm0
530         vpxord  zmm12, zmm12, zmm1
531         vpxord  zmm13, zmm13, zmm2
532         vpxord  zmm14, zmm14, zmm3
533         vprord  zmm15, zmm15, 16
534         vprord  zmm12, zmm12, 16
535         vprord  zmm13, zmm13, 16
536         vprord  zmm14, zmm14, 16
537         vpaddd  zmm10, zmm10, zmm15
538         vpaddd  zmm11, zmm11, zmm12
539         vpaddd  zmm8, zmm8, zmm13
540         vpaddd  zmm9, zmm9, zmm14
541         vpxord  zmm5, zmm5, zmm10
542         vpxord  zmm6, zmm6, zmm11
543         vpxord  zmm7, zmm7, zmm8
544         vpxord  zmm4, zmm4, zmm9
545         vprord  zmm5, zmm5, 12
546         vprord  zmm6, zmm6, 12
547         vprord  zmm7, zmm7, 12
548         vprord  zmm4, zmm4, 12
549         vpaddd  zmm0, zmm0, zmm21
550         vpaddd  zmm1, zmm1, zmm16
551         vpaddd  zmm2, zmm2, zmm31
552         vpaddd  zmm3, zmm3, zmm17
553         vpaddd  zmm0, zmm0, zmm5
554         vpaddd  zmm1, zmm1, zmm6
555         vpaddd  zmm2, zmm2, zmm7
556         vpaddd  zmm3, zmm3, zmm4
557         vpxord  zmm15, zmm15, zmm0
558         vpxord  zmm12, zmm12, zmm1
559         vpxord  zmm13, zmm13, zmm2
560         vpxord  zmm14, zmm14, zmm3
561         vprord  zmm15, zmm15, 8
562         vprord  zmm12, zmm12, 8
563         vprord  zmm13, zmm13, 8
564         vprord  zmm14, zmm14, 8
565         vpaddd  zmm10, zmm10, zmm15
566         vpaddd  zmm11, zmm11, zmm12
567         vpaddd  zmm8, zmm8, zmm13
568         vpaddd  zmm9, zmm9, zmm14
569         vpxord  zmm5, zmm5, zmm10
570         vpxord  zmm6, zmm6, zmm11
571         vpxord  zmm7, zmm7, zmm8
572         vpxord  zmm4, zmm4, zmm9
573         vprord  zmm5, zmm5, 7
574         vprord  zmm6, zmm6, 7
575         vprord  zmm7, zmm7, 7
576         vprord  zmm4, zmm4, 7
577         vpaddd  zmm0, zmm0, zmm26
578         vpaddd  zmm1, zmm1, zmm28
579         vpaddd  zmm2, zmm2, zmm30
580         vpaddd  zmm3, zmm3, zmm29
581         vpaddd  zmm0, zmm0, zmm4
582         vpaddd  zmm1, zmm1, zmm5
583         vpaddd  zmm2, zmm2, zmm6
584         vpaddd  zmm3, zmm3, zmm7
585         vpxord  zmm12, zmm12, zmm0
586         vpxord  zmm13, zmm13, zmm1
587         vpxord  zmm14, zmm14, zmm2
588         vpxord  zmm15, zmm15, zmm3
589         vprord  zmm12, zmm12, 16
590         vprord  zmm13, zmm13, 16
591         vprord  zmm14, zmm14, 16
592         vprord  zmm15, zmm15, 16
593         vpaddd  zmm8, zmm8, zmm12
594         vpaddd  zmm9, zmm9, zmm13
595         vpaddd  zmm10, zmm10, zmm14
596         vpaddd  zmm11, zmm11, zmm15
597         vpxord  zmm4, zmm4, zmm8
598         vpxord  zmm5, zmm5, zmm9
599         vpxord  zmm6, zmm6, zmm10
600         vpxord  zmm7, zmm7, zmm11
601         vprord  zmm4, zmm4, 12
602         vprord  zmm5, zmm5, 12
603         vprord  zmm6, zmm6, 12
604         vprord  zmm7, zmm7, 12
605         vpaddd  zmm0, zmm0, zmm23
606         vpaddd  zmm1, zmm1, zmm25
607         vpaddd  zmm2, zmm2, zmm19
608         vpaddd  zmm3, zmm3, zmm31
609         vpaddd  zmm0, zmm0, zmm4
610         vpaddd  zmm1, zmm1, zmm5
611         vpaddd  zmm2, zmm2, zmm6
612         vpaddd  zmm3, zmm3, zmm7
613         vpxord  zmm12, zmm12, zmm0
614         vpxord  zmm13, zmm13, zmm1
615         vpxord  zmm14, zmm14, zmm2
616         vpxord  zmm15, zmm15, zmm3
617         vprord  zmm12, zmm12, 8
618         vprord  zmm13, zmm13, 8
619         vprord  zmm14, zmm14, 8
620         vprord  zmm15, zmm15, 8
621         vpaddd  zmm8, zmm8, zmm12
622         vpaddd  zmm9, zmm9, zmm13
623         vpaddd  zmm10, zmm10, zmm14
624         vpaddd  zmm11, zmm11, zmm15
625         vpxord  zmm4, zmm4, zmm8
626         vpxord  zmm5, zmm5, zmm9
627         vpxord  zmm6, zmm6, zmm10
628         vpxord  zmm7, zmm7, zmm11
629         vprord  zmm4, zmm4, 7
630         vprord  zmm5, zmm5, 7
631         vprord  zmm6, zmm6, 7
632         vprord  zmm7, zmm7, 7
633         vpaddd  zmm0, zmm0, zmm20
634         vpaddd  zmm1, zmm1, zmm27
635         vpaddd  zmm2, zmm2, zmm21
636         vpaddd  zmm3, zmm3, zmm17
637         vpaddd  zmm0, zmm0, zmm5
638         vpaddd  zmm1, zmm1, zmm6
639         vpaddd  zmm2, zmm2, zmm7
640         vpaddd  zmm3, zmm3, zmm4
641         vpxord  zmm15, zmm15, zmm0
642         vpxord  zmm12, zmm12, zmm1
643         vpxord  zmm13, zmm13, zmm2
644         vpxord  zmm14, zmm14, zmm3
645         vprord  zmm15, zmm15, 16
646         vprord  zmm12, zmm12, 16
647         vprord  zmm13, zmm13, 16
648         vprord  zmm14, zmm14, 16
649         vpaddd  zmm10, zmm10, zmm15
650         vpaddd  zmm11, zmm11, zmm12
651         vpaddd  zmm8, zmm8, zmm13
652         vpaddd  zmm9, zmm9, zmm14
653         vpxord  zmm5, zmm5, zmm10
654         vpxord  zmm6, zmm6, zmm11
655         vpxord  zmm7, zmm7, zmm8
656         vpxord  zmm4, zmm4, zmm9
657         vprord  zmm5, zmm5, 12
658         vprord  zmm6, zmm6, 12
659         vprord  zmm7, zmm7, 12
660         vprord  zmm4, zmm4, 12
661         vpaddd  zmm0, zmm0, zmm16
662         vpaddd  zmm1, zmm1, zmm18
663         vpaddd  zmm2, zmm2, zmm24
664         vpaddd  zmm3, zmm3, zmm22
665         vpaddd  zmm0, zmm0, zmm5
666         vpaddd  zmm1, zmm1, zmm6
667         vpaddd  zmm2, zmm2, zmm7
668         vpaddd  zmm3, zmm3, zmm4
669         vpxord  zmm15, zmm15, zmm0
670         vpxord  zmm12, zmm12, zmm1
671         vpxord  zmm13, zmm13, zmm2
672         vpxord  zmm14, zmm14, zmm3
673         vprord  zmm15, zmm15, 8
674         vprord  zmm12, zmm12, 8
675         vprord  zmm13, zmm13, 8
676         vprord  zmm14, zmm14, 8
677         vpaddd  zmm10, zmm10, zmm15
678         vpaddd  zmm11, zmm11, zmm12
679         vpaddd  zmm8, zmm8, zmm13
680         vpaddd  zmm9, zmm9, zmm14
681         vpxord  zmm5, zmm5, zmm10
682         vpxord  zmm6, zmm6, zmm11
683         vpxord  zmm7, zmm7, zmm8
684         vpxord  zmm4, zmm4, zmm9
685         vprord  zmm5, zmm5, 7
686         vprord  zmm6, zmm6, 7
687         vprord  zmm7, zmm7, 7
688         vprord  zmm4, zmm4, 7
689         vpaddd  zmm0, zmm0, zmm28
690         vpaddd  zmm1, zmm1, zmm25
691         vpaddd  zmm2, zmm2, zmm31
692         vpaddd  zmm3, zmm3, zmm30
693         vpaddd  zmm0, zmm0, zmm4
694         vpaddd  zmm1, zmm1, zmm5
695         vpaddd  zmm2, zmm2, zmm6
696         vpaddd  zmm3, zmm3, zmm7
697         vpxord  zmm12, zmm12, zmm0
698         vpxord  zmm13, zmm13, zmm1
699         vpxord  zmm14, zmm14, zmm2
700         vpxord  zmm15, zmm15, zmm3
701         vprord  zmm12, zmm12, 16
702         vprord  zmm13, zmm13, 16
703         vprord  zmm14, zmm14, 16
704         vprord  zmm15, zmm15, 16
705         vpaddd  zmm8, zmm8, zmm12
706         vpaddd  zmm9, zmm9, zmm13
707         vpaddd  zmm10, zmm10, zmm14
708         vpaddd  zmm11, zmm11, zmm15
709         vpxord  zmm4, zmm4, zmm8
710         vpxord  zmm5, zmm5, zmm9
711         vpxord  zmm6, zmm6, zmm10
712         vpxord  zmm7, zmm7, zmm11
713         vprord  zmm4, zmm4, 12
714         vprord  zmm5, zmm5, 12
715         vprord  zmm6, zmm6, 12
716         vprord  zmm7, zmm7, 12
717         vpaddd  zmm0, zmm0, zmm29
718         vpaddd  zmm1, zmm1, zmm27
719         vpaddd  zmm2, zmm2, zmm26
720         vpaddd  zmm3, zmm3, zmm24
721         vpaddd  zmm0, zmm0, zmm4
722         vpaddd  zmm1, zmm1, zmm5
723         vpaddd  zmm2, zmm2, zmm6
724         vpaddd  zmm3, zmm3, zmm7
725         vpxord  zmm12, zmm12, zmm0
726         vpxord  zmm13, zmm13, zmm1
727         vpxord  zmm14, zmm14, zmm2
728         vpxord  zmm15, zmm15, zmm3
729         vprord  zmm12, zmm12, 8
730         vprord  zmm13, zmm13, 8
731         vprord  zmm14, zmm14, 8
732         vprord  zmm15, zmm15, 8
733         vpaddd  zmm8, zmm8, zmm12
734         vpaddd  zmm9, zmm9, zmm13
735         vpaddd  zmm10, zmm10, zmm14
736         vpaddd  zmm11, zmm11, zmm15
737         vpxord  zmm4, zmm4, zmm8
738         vpxord  zmm5, zmm5, zmm9
739         vpxord  zmm6, zmm6, zmm10
740         vpxord  zmm7, zmm7, zmm11
741         vprord  zmm4, zmm4, 7
742         vprord  zmm5, zmm5, 7
743         vprord  zmm6, zmm6, 7
744         vprord  zmm7, zmm7, 7
745         vpaddd  zmm0, zmm0, zmm23
746         vpaddd  zmm1, zmm1, zmm21
747         vpaddd  zmm2, zmm2, zmm16
748         vpaddd  zmm3, zmm3, zmm22
749         vpaddd  zmm0, zmm0, zmm5
750         vpaddd  zmm1, zmm1, zmm6
751         vpaddd  zmm2, zmm2, zmm7
752         vpaddd  zmm3, zmm3, zmm4
753         vpxord  zmm15, zmm15, zmm0
754         vpxord  zmm12, zmm12, zmm1
755         vpxord  zmm13, zmm13, zmm2
756         vpxord  zmm14, zmm14, zmm3
757         vprord  zmm15, zmm15, 16
758         vprord  zmm12, zmm12, 16
759         vprord  zmm13, zmm13, 16
760         vprord  zmm14, zmm14, 16
761         vpaddd  zmm10, zmm10, zmm15
762         vpaddd  zmm11, zmm11, zmm12
763         vpaddd  zmm8, zmm8, zmm13
764         vpaddd  zmm9, zmm9, zmm14
765         vpxord  zmm5, zmm5, zmm10
766         vpxord  zmm6, zmm6, zmm11
767         vpxord  zmm7, zmm7, zmm8
768         vpxord  zmm4, zmm4, zmm9
769         vprord  zmm5, zmm5, 12
770         vprord  zmm6, zmm6, 12
771         vprord  zmm7, zmm7, 12
772         vprord  zmm4, zmm4, 12
773         vpaddd  zmm0, zmm0, zmm18
774         vpaddd  zmm1, zmm1, zmm19
775         vpaddd  zmm2, zmm2, zmm17
776         vpaddd  zmm3, zmm3, zmm20
777         vpaddd  zmm0, zmm0, zmm5
778         vpaddd  zmm1, zmm1, zmm6
779         vpaddd  zmm2, zmm2, zmm7
780         vpaddd  zmm3, zmm3, zmm4
781         vpxord  zmm15, zmm15, zmm0
782         vpxord  zmm12, zmm12, zmm1
783         vpxord  zmm13, zmm13, zmm2
784         vpxord  zmm14, zmm14, zmm3
785         vprord  zmm15, zmm15, 8
786         vprord  zmm12, zmm12, 8
787         vprord  zmm13, zmm13, 8
788         vprord  zmm14, zmm14, 8
789         vpaddd  zmm10, zmm10, zmm15
790         vpaddd  zmm11, zmm11, zmm12
791         vpaddd  zmm8, zmm8, zmm13
792         vpaddd  zmm9, zmm9, zmm14
793         vpxord  zmm5, zmm5, zmm10
794         vpxord  zmm6, zmm6, zmm11
795         vpxord  zmm7, zmm7, zmm8
796         vpxord  zmm4, zmm4, zmm9
797         vprord  zmm5, zmm5, 7
798         vprord  zmm6, zmm6, 7
799         vprord  zmm7, zmm7, 7
800         vprord  zmm4, zmm4, 7
801         vpaddd  zmm0, zmm0, zmm25
802         vpaddd  zmm1, zmm1, zmm27
803         vpaddd  zmm2, zmm2, zmm24
804         vpaddd  zmm3, zmm3, zmm31
805         vpaddd  zmm0, zmm0, zmm4
806         vpaddd  zmm1, zmm1, zmm5
807         vpaddd  zmm2, zmm2, zmm6
808         vpaddd  zmm3, zmm3, zmm7
809         vpxord  zmm12, zmm12, zmm0
810         vpxord  zmm13, zmm13, zmm1
811         vpxord  zmm14, zmm14, zmm2
812         vpxord  zmm15, zmm15, zmm3
813         vprord  zmm12, zmm12, 16
814         vprord  zmm13, zmm13, 16
815         vprord  zmm14, zmm14, 16
816         vprord  zmm15, zmm15, 16
817         vpaddd  zmm8, zmm8, zmm12
818         vpaddd  zmm9, zmm9, zmm13
819         vpaddd  zmm10, zmm10, zmm14
820         vpaddd  zmm11, zmm11, zmm15
821         vpxord  zmm4, zmm4, zmm8
822         vpxord  zmm5, zmm5, zmm9
823         vpxord  zmm6, zmm6, zmm10
824         vpxord  zmm7, zmm7, zmm11
825         vprord  zmm4, zmm4, 12
826         vprord  zmm5, zmm5, 12
827         vprord  zmm6, zmm6, 12
828         vprord  zmm7, zmm7, 12
829         vpaddd  zmm0, zmm0, zmm30
830         vpaddd  zmm1, zmm1, zmm21
831         vpaddd  zmm2, zmm2, zmm28
832         vpaddd  zmm3, zmm3, zmm17
833         vpaddd  zmm0, zmm0, zmm4
834         vpaddd  zmm1, zmm1, zmm5
835         vpaddd  zmm2, zmm2, zmm6
836         vpaddd  zmm3, zmm3, zmm7
837         vpxord  zmm12, zmm12, zmm0
838         vpxord  zmm13, zmm13, zmm1
839         vpxord  zmm14, zmm14, zmm2
840         vpxord  zmm15, zmm15, zmm3
841         vprord  zmm12, zmm12, 8
842         vprord  zmm13, zmm13, 8
843         vprord  zmm14, zmm14, 8
844         vprord  zmm15, zmm15, 8
845         vpaddd  zmm8, zmm8, zmm12
846         vpaddd  zmm9, zmm9, zmm13
847         vpaddd  zmm10, zmm10, zmm14
848         vpaddd  zmm11, zmm11, zmm15
849         vpxord  zmm4, zmm4, zmm8
850         vpxord  zmm5, zmm5, zmm9
851         vpxord  zmm6, zmm6, zmm10
852         vpxord  zmm7, zmm7, zmm11
853         vprord  zmm4, zmm4, 7
854         vprord  zmm5, zmm5, 7
855         vprord  zmm6, zmm6, 7
856         vprord  zmm7, zmm7, 7
857         vpaddd  zmm0, zmm0, zmm29
858         vpaddd  zmm1, zmm1, zmm16
859         vpaddd  zmm2, zmm2, zmm18
860         vpaddd  zmm3, zmm3, zmm20
861         vpaddd  zmm0, zmm0, zmm5
862         vpaddd  zmm1, zmm1, zmm6
863         vpaddd  zmm2, zmm2, zmm7
864         vpaddd  zmm3, zmm3, zmm4
865         vpxord  zmm15, zmm15, zmm0
866         vpxord  zmm12, zmm12, zmm1
867         vpxord  zmm13, zmm13, zmm2
868         vpxord  zmm14, zmm14, zmm3
869         vprord  zmm15, zmm15, 16
870         vprord  zmm12, zmm12, 16
871         vprord  zmm13, zmm13, 16
872         vprord  zmm14, zmm14, 16
873         vpaddd  zmm10, zmm10, zmm15
874         vpaddd  zmm11, zmm11, zmm12
875         vpaddd  zmm8, zmm8, zmm13
876         vpaddd  zmm9, zmm9, zmm14
877         vpxord  zmm5, zmm5, zmm10
878         vpxord  zmm6, zmm6, zmm11
879         vpxord  zmm7, zmm7, zmm8
880         vpxord  zmm4, zmm4, zmm9
881         vprord  zmm5, zmm5, 12
882         vprord  zmm6, zmm6, 12
883         vprord  zmm7, zmm7, 12
884         vprord  zmm4, zmm4, 12
885         vpaddd  zmm0, zmm0, zmm19
886         vpaddd  zmm1, zmm1, zmm26
887         vpaddd  zmm2, zmm2, zmm22
888         vpaddd  zmm3, zmm3, zmm23
889         vpaddd  zmm0, zmm0, zmm5
890         vpaddd  zmm1, zmm1, zmm6
891         vpaddd  zmm2, zmm2, zmm7
892         vpaddd  zmm3, zmm3, zmm4
893         vpxord  zmm15, zmm15, zmm0
894         vpxord  zmm12, zmm12, zmm1
895         vpxord  zmm13, zmm13, zmm2
896         vpxord  zmm14, zmm14, zmm3
897         vprord  zmm15, zmm15, 8
898         vprord  zmm12, zmm12, 8
899         vprord  zmm13, zmm13, 8
900         vprord  zmm14, zmm14, 8
901         vpaddd  zmm10, zmm10, zmm15
902         vpaddd  zmm11, zmm11, zmm12
903         vpaddd  zmm8, zmm8, zmm13
904         vpaddd  zmm9, zmm9, zmm14
905         vpxord  zmm5, zmm5, zmm10
906         vpxord  zmm6, zmm6, zmm11
907         vpxord  zmm7, zmm7, zmm8
908         vpxord  zmm4, zmm4, zmm9
909         vprord  zmm5, zmm5, 7
910         vprord  zmm6, zmm6, 7
911         vprord  zmm7, zmm7, 7
912         vprord  zmm4, zmm4, 7
913         vpaddd  zmm0, zmm0, zmm27
914         vpaddd  zmm1, zmm1, zmm21
915         vpaddd  zmm2, zmm2, zmm17
916         vpaddd  zmm3, zmm3, zmm24
917         vpaddd  zmm0, zmm0, zmm4
918         vpaddd  zmm1, zmm1, zmm5
919         vpaddd  zmm2, zmm2, zmm6
920         vpaddd  zmm3, zmm3, zmm7
921         vpxord  zmm12, zmm12, zmm0
922         vpxord  zmm13, zmm13, zmm1
923         vpxord  zmm14, zmm14, zmm2
924         vpxord  zmm15, zmm15, zmm3
925         vprord  zmm12, zmm12, 16
926         vprord  zmm13, zmm13, 16
927         vprord  zmm14, zmm14, 16
928         vprord  zmm15, zmm15, 16
929         vpaddd  zmm8, zmm8, zmm12
930         vpaddd  zmm9, zmm9, zmm13
931         vpaddd  zmm10, zmm10, zmm14
932         vpaddd  zmm11, zmm11, zmm15
933         vpxord  zmm4, zmm4, zmm8
934         vpxord  zmm5, zmm5, zmm9
935         vpxord  zmm6, zmm6, zmm10
936         vpxord  zmm7, zmm7, zmm11
937         vprord  zmm4, zmm4, 12
938         vprord  zmm5, zmm5, 12
939         vprord  zmm6, zmm6, 12
940         vprord  zmm7, zmm7, 12
941         vpaddd  zmm0, zmm0, zmm31
942         vpaddd  zmm1, zmm1, zmm16
943         vpaddd  zmm2, zmm2, zmm25
944         vpaddd  zmm3, zmm3, zmm22
945         vpaddd  zmm0, zmm0, zmm4
946         vpaddd  zmm1, zmm1, zmm5
947         vpaddd  zmm2, zmm2, zmm6
948         vpaddd  zmm3, zmm3, zmm7
949         vpxord  zmm12, zmm12, zmm0
950         vpxord  zmm13, zmm13, zmm1
951         vpxord  zmm14, zmm14, zmm2
952         vpxord  zmm15, zmm15, zmm3
953         vprord  zmm12, zmm12, 8
954         vprord  zmm13, zmm13, 8
955         vprord  zmm14, zmm14, 8
956         vprord  zmm15, zmm15, 8
957         vpaddd  zmm8, zmm8, zmm12
958         vpaddd  zmm9, zmm9, zmm13
959         vpaddd  zmm10, zmm10, zmm14
960         vpaddd  zmm11, zmm11, zmm15
961         vpxord  zmm4, zmm4, zmm8
962         vpxord  zmm5, zmm5, zmm9
963         vpxord  zmm6, zmm6, zmm10
964         vpxord  zmm7, zmm7, zmm11
965         vprord  zmm4, zmm4, 7
966         vprord  zmm5, zmm5, 7
967         vprord  zmm6, zmm6, 7
968         vprord  zmm7, zmm7, 7
969         vpaddd  zmm0, zmm0, zmm30
970         vpaddd  zmm1, zmm1, zmm18
971         vpaddd  zmm2, zmm2, zmm19
972         vpaddd  zmm3, zmm3, zmm23
973         vpaddd  zmm0, zmm0, zmm5
974         vpaddd  zmm1, zmm1, zmm6
975         vpaddd  zmm2, zmm2, zmm7
976         vpaddd  zmm3, zmm3, zmm4
977         vpxord  zmm15, zmm15, zmm0
978         vpxord  zmm12, zmm12, zmm1
979         vpxord  zmm13, zmm13, zmm2
980         vpxord  zmm14, zmm14, zmm3
981         vprord  zmm15, zmm15, 16
982         vprord  zmm12, zmm12, 16
983         vprord  zmm13, zmm13, 16
984         vprord  zmm14, zmm14, 16
985         vpaddd  zmm10, zmm10, zmm15
986         vpaddd  zmm11, zmm11, zmm12
987         vpaddd  zmm8, zmm8, zmm13
988         vpaddd  zmm9, zmm9, zmm14
989         vpxord  zmm5, zmm5, zmm10
990         vpxord  zmm6, zmm6, zmm11
991         vpxord  zmm7, zmm7, zmm8
992         vpxord  zmm4, zmm4, zmm9
993         vprord  zmm5, zmm5, 12
994         vprord  zmm6, zmm6, 12
995         vprord  zmm7, zmm7, 12
996         vprord  zmm4, zmm4, 12
997         vpaddd  zmm0, zmm0, zmm26
998         vpaddd  zmm1, zmm1, zmm28
999         vpaddd  zmm2, zmm2, zmm20
1000         vpaddd  zmm3, zmm3, zmm29
1001         vpaddd  zmm0, zmm0, zmm5
1002         vpaddd  zmm1, zmm1, zmm6
1003         vpaddd  zmm2, zmm2, zmm7
1004         vpaddd  zmm3, zmm3, zmm4
1005         vpxord  zmm15, zmm15, zmm0
1006         vpxord  zmm12, zmm12, zmm1
1007         vpxord  zmm13, zmm13, zmm2
1008         vpxord  zmm14, zmm14, zmm3
1009         vprord  zmm15, zmm15, 8
1010         vprord  zmm12, zmm12, 8
1011         vprord  zmm13, zmm13, 8
1012         vprord  zmm14, zmm14, 8
1013         vpaddd  zmm10, zmm10, zmm15
1014         vpaddd  zmm11, zmm11, zmm12
1015         vpaddd  zmm8, zmm8, zmm13
1016         vpaddd  zmm9, zmm9, zmm14
1017         vpxord  zmm5, zmm5, zmm10
1018         vpxord  zmm6, zmm6, zmm11
1019         vpxord  zmm7, zmm7, zmm8
1020         vpxord  zmm4, zmm4, zmm9
1021         vprord  zmm5, zmm5, 7
1022         vprord  zmm6, zmm6, 7
1023         vprord  zmm7, zmm7, 7
1024         vprord  zmm4, zmm4, 7
1025         vpxord  zmm0, zmm0, zmm8
1026         vpxord  zmm1, zmm1, zmm9
1027         vpxord  zmm2, zmm2, zmm10
1028         vpxord  zmm3, zmm3, zmm11
1029         vpxord  zmm4, zmm4, zmm12
1030         vpxord  zmm5, zmm5, zmm13
1031         vpxord  zmm6, zmm6, zmm14
1032         vpxord  zmm7, zmm7, zmm15
1033         movzx   eax, byte ptr [rbp+0x38]
1034         jne     9b
1035         mov     rbx, qword ptr [rbp+0x50]
1036         vpunpckldq zmm16, zmm0, zmm1
1037         vpunpckhdq zmm17, zmm0, zmm1
1038         vpunpckldq zmm18, zmm2, zmm3
1039         vpunpckhdq zmm19, zmm2, zmm3
1040         vpunpckldq zmm20, zmm4, zmm5
1041         vpunpckhdq zmm21, zmm4, zmm5
1042         vpunpckldq zmm22, zmm6, zmm7
1043         vpunpckhdq zmm23, zmm6, zmm7
1044         vpunpcklqdq zmm0, zmm16, zmm18
1045         vpunpckhqdq zmm1, zmm16, zmm18
1046         vpunpcklqdq zmm2, zmm17, zmm19
1047         vpunpckhqdq zmm3, zmm17, zmm19
1048         vpunpcklqdq zmm4, zmm20, zmm22
1049         vpunpckhqdq zmm5, zmm20, zmm22
1050         vpunpcklqdq zmm6, zmm21, zmm23
1051         vpunpckhqdq zmm7, zmm21, zmm23
1052         vshufi32x4 zmm16, zmm0, zmm4, 0x88
1053         vshufi32x4 zmm17, zmm1, zmm5, 0x88
1054         vshufi32x4 zmm18, zmm2, zmm6, 0x88
1055         vshufi32x4 zmm19, zmm3, zmm7, 0x88
1056         vshufi32x4 zmm20, zmm0, zmm4, 0xDD
1057         vshufi32x4 zmm21, zmm1, zmm5, 0xDD
1058         vshufi32x4 zmm22, zmm2, zmm6, 0xDD
1059         vshufi32x4 zmm23, zmm3, zmm7, 0xDD
1060         vshufi32x4 zmm0, zmm16, zmm17, 0x88
1061         vshufi32x4 zmm1, zmm18, zmm19, 0x88
1062         vshufi32x4 zmm2, zmm20, zmm21, 0x88
1063         vshufi32x4 zmm3, zmm22, zmm23, 0x88
1064         vshufi32x4 zmm4, zmm16, zmm17, 0xDD
1065         vshufi32x4 zmm5, zmm18, zmm19, 0xDD
1066         vshufi32x4 zmm6, zmm20, zmm21, 0xDD
1067         vshufi32x4 zmm7, zmm22, zmm23, 0xDD
1068         vmovdqu32 zmmword ptr [rbx], zmm0
1069         vmovdqu32 zmmword ptr [rbx+0x1*0x40], zmm1
1070         vmovdqu32 zmmword ptr [rbx+0x2*0x40], zmm2
1071         vmovdqu32 zmmword ptr [rbx+0x3*0x40], zmm3
1072         vmovdqu32 zmmword ptr [rbx+0x4*0x40], zmm4
1073         vmovdqu32 zmmword ptr [rbx+0x5*0x40], zmm5
1074         vmovdqu32 zmmword ptr [rbx+0x6*0x40], zmm6
1075         vmovdqu32 zmmword ptr [rbx+0x7*0x40], zmm7
1076         vmovdqa32 zmm0, zmmword ptr [rsp]
1077         vmovdqa32 zmm1, zmmword ptr [rsp+0x1*0x40]
1078         vmovdqa32 zmm2, zmm0
1079         vpaddd  zmm2{k1}, zmm0, dword ptr [ADD16+rip] {1to16}
1080         vpcmpltud k2, zmm2, zmm0
1081         vpaddd  zmm1 {k2}, zmm1, dword ptr [ADD1+rip] {1to16}
1082         vmovdqa32 zmmword ptr [rsp], zmm2
1083         vmovdqa32 zmmword ptr [rsp+0x1*0x40], zmm1
1084         add     rdi, 128
1085         add     rbx, 512
1086         mov     qword ptr [rbp+0x50], rbx
1087         sub     rsi, 16
1088         cmp     rsi, 16
1089         jnc     2b
1090         test    rsi, rsi
1091         jnz     3f
1093         vzeroupper
1094         mov     rsp, rbp
1095         pop     rbp
1096         pop     rbx
1097         pop     r12
1098         pop     r13
1099         pop     r14
1100         pop     r15
1101         RET
1102 .p2align 6
1104         test    esi, 0x8
1105         je      3f
1106         vpbroadcastd ymm0, dword ptr [rcx]
1107         vpbroadcastd ymm1, dword ptr [rcx+0x4]
1108         vpbroadcastd ymm2, dword ptr [rcx+0x8]
1109         vpbroadcastd ymm3, dword ptr [rcx+0xC]
1110         vpbroadcastd ymm4, dword ptr [rcx+0x10]
1111         vpbroadcastd ymm5, dword ptr [rcx+0x14]
1112         vpbroadcastd ymm6, dword ptr [rcx+0x18]
1113         vpbroadcastd ymm7, dword ptr [rcx+0x1C]
1114         mov     r8, qword ptr [rdi]
1115         mov     r9, qword ptr [rdi+0x8]
1116         mov     r10, qword ptr [rdi+0x10]
1117         mov     r11, qword ptr [rdi+0x18]
1118         mov     r12, qword ptr [rdi+0x20]
1119         mov     r13, qword ptr [rdi+0x28]
1120         mov     r14, qword ptr [rdi+0x30]
1121         mov     r15, qword ptr [rdi+0x38]
1122         movzx   eax, byte ptr [rbp+0x38]
1123         movzx   ebx, byte ptr [rbp+0x40]
1124         or      eax, ebx
1125         xor     edx, edx
1127         movzx   ebx, byte ptr [rbp+0x48]
1128         or      ebx, eax
1129         add     rdx, 64
1130         cmp     rdx, qword ptr [rsp+0x80]
1131         cmove   eax, ebx
1132         mov     dword ptr [rsp+0x88], eax
1133         vmovups xmm8, xmmword ptr [r8+rdx-0x40]
1134         vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x40], 0x01
1135         vmovups xmm9, xmmword ptr [r9+rdx-0x40]
1136         vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x40], 0x01
1137         vunpcklpd ymm12, ymm8, ymm9
1138         vunpckhpd ymm13, ymm8, ymm9
1139         vmovups xmm10, xmmword ptr [r10+rdx-0x40]
1140         vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x40], 0x01
1141         vmovups xmm11, xmmword ptr [r11+rdx-0x40]
1142         vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x40], 0x01
1143         vunpcklpd ymm14, ymm10, ymm11
1144         vunpckhpd ymm15, ymm10, ymm11
1145         vshufps ymm16, ymm12, ymm14, 136
1146         vshufps ymm17, ymm12, ymm14, 221
1147         vshufps ymm18, ymm13, ymm15, 136
1148         vshufps ymm19, ymm13, ymm15, 221
1149         vmovups xmm8, xmmword ptr [r8+rdx-0x30]
1150         vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x30], 0x01
1151         vmovups xmm9, xmmword ptr [r9+rdx-0x30]
1152         vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x30], 0x01
1153         vunpcklpd ymm12, ymm8, ymm9
1154         vunpckhpd ymm13, ymm8, ymm9
1155         vmovups xmm10, xmmword ptr [r10+rdx-0x30]
1156         vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x30], 0x01
1157         vmovups xmm11, xmmword ptr [r11+rdx-0x30]
1158         vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x30], 0x01
1159         vunpcklpd ymm14, ymm10, ymm11
1160         vunpckhpd ymm15, ymm10, ymm11
1161         vshufps ymm20, ymm12, ymm14, 136
1162         vshufps ymm21, ymm12, ymm14, 221
1163         vshufps ymm22, ymm13, ymm15, 136
1164         vshufps ymm23, ymm13, ymm15, 221
1165         vmovups xmm8, xmmword ptr [r8+rdx-0x20]
1166         vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x20], 0x01
1167         vmovups xmm9, xmmword ptr [r9+rdx-0x20]
1168         vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x20], 0x01
1169         vunpcklpd ymm12, ymm8, ymm9
1170         vunpckhpd ymm13, ymm8, ymm9
1171         vmovups xmm10, xmmword ptr [r10+rdx-0x20]
1172         vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x20], 0x01
1173         vmovups xmm11, xmmword ptr [r11+rdx-0x20]
1174         vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x20], 0x01
1175         vunpcklpd ymm14, ymm10, ymm11
1176         vunpckhpd ymm15, ymm10, ymm11
1177         vshufps ymm24, ymm12, ymm14, 136
1178         vshufps ymm25, ymm12, ymm14, 221
1179         vshufps ymm26, ymm13, ymm15, 136
1180         vshufps ymm27, ymm13, ymm15, 221
1181         vmovups xmm8, xmmword ptr [r8+rdx-0x10]
1182         vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x10], 0x01
1183         vmovups xmm9, xmmword ptr [r9+rdx-0x10]
1184         vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x10], 0x01
1185         vunpcklpd ymm12, ymm8, ymm9
1186         vunpckhpd ymm13, ymm8, ymm9
1187         vmovups xmm10, xmmword ptr [r10+rdx-0x10]
1188         vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x10], 0x01
1189         vmovups xmm11, xmmword ptr [r11+rdx-0x10]
1190         vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x10], 0x01
1191         vunpcklpd ymm14, ymm10, ymm11
1192         vunpckhpd ymm15, ymm10, ymm11
1193         vshufps ymm28, ymm12, ymm14, 136
1194         vshufps ymm29, ymm12, ymm14, 221
1195         vshufps ymm30, ymm13, ymm15, 136
1196         vshufps ymm31, ymm13, ymm15, 221
1197         vpbroadcastd ymm8, dword ptr [BLAKE3_IV_0+rip]
1198         vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1+rip]
1199         vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2+rip]
1200         vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3+rip]
1201         vmovdqa ymm12, ymmword ptr [rsp]
1202         vmovdqa ymm13, ymmword ptr [rsp+0x40]
1203         vpbroadcastd ymm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
1204         vpbroadcastd ymm15, dword ptr [rsp+0x88]
1205         vpaddd  ymm0, ymm0, ymm16
1206         vpaddd  ymm1, ymm1, ymm18
1207         vpaddd  ymm2, ymm2, ymm20
1208         vpaddd  ymm3, ymm3, ymm22
1209         vpaddd  ymm0, ymm0, ymm4
1210         vpaddd  ymm1, ymm1, ymm5
1211         vpaddd  ymm2, ymm2, ymm6
1212         vpaddd  ymm3, ymm3, ymm7
1213         vpxord  ymm12, ymm12, ymm0
1214         vpxord  ymm13, ymm13, ymm1
1215         vpxord  ymm14, ymm14, ymm2
1216         vpxord  ymm15, ymm15, ymm3
1217         vprord  ymm12, ymm12, 16
1218         vprord  ymm13, ymm13, 16
1219         vprord  ymm14, ymm14, 16
1220         vprord  ymm15, ymm15, 16
1221         vpaddd  ymm8, ymm8, ymm12
1222         vpaddd  ymm9, ymm9, ymm13
1223         vpaddd  ymm10, ymm10, ymm14
1224         vpaddd  ymm11, ymm11, ymm15
1225         vpxord  ymm4, ymm4, ymm8
1226         vpxord  ymm5, ymm5, ymm9
1227         vpxord  ymm6, ymm6, ymm10
1228         vpxord  ymm7, ymm7, ymm11
1229         vprord  ymm4, ymm4, 12
1230         vprord  ymm5, ymm5, 12
1231         vprord  ymm6, ymm6, 12
1232         vprord  ymm7, ymm7, 12
1233         vpaddd  ymm0, ymm0, ymm17
1234         vpaddd  ymm1, ymm1, ymm19
1235         vpaddd  ymm2, ymm2, ymm21
1236         vpaddd  ymm3, ymm3, ymm23
1237         vpaddd  ymm0, ymm0, ymm4
1238         vpaddd  ymm1, ymm1, ymm5
1239         vpaddd  ymm2, ymm2, ymm6
1240         vpaddd  ymm3, ymm3, ymm7
1241         vpxord  ymm12, ymm12, ymm0
1242         vpxord  ymm13, ymm13, ymm1
1243         vpxord  ymm14, ymm14, ymm2
1244         vpxord  ymm15, ymm15, ymm3
1245         vprord  ymm12, ymm12, 8
1246         vprord  ymm13, ymm13, 8
1247         vprord  ymm14, ymm14, 8
1248         vprord  ymm15, ymm15, 8
1249         vpaddd  ymm8, ymm8, ymm12
1250         vpaddd  ymm9, ymm9, ymm13
1251         vpaddd  ymm10, ymm10, ymm14
1252         vpaddd  ymm11, ymm11, ymm15
1253         vpxord  ymm4, ymm4, ymm8
1254         vpxord  ymm5, ymm5, ymm9
1255         vpxord  ymm6, ymm6, ymm10
1256         vpxord  ymm7, ymm7, ymm11
1257         vprord  ymm4, ymm4, 7
1258         vprord  ymm5, ymm5, 7
1259         vprord  ymm6, ymm6, 7
1260         vprord  ymm7, ymm7, 7
1261         vpaddd  ymm0, ymm0, ymm24
1262         vpaddd  ymm1, ymm1, ymm26
1263         vpaddd  ymm2, ymm2, ymm28
1264         vpaddd  ymm3, ymm3, ymm30
1265         vpaddd  ymm0, ymm0, ymm5
1266         vpaddd  ymm1, ymm1, ymm6
1267         vpaddd  ymm2, ymm2, ymm7
1268         vpaddd  ymm3, ymm3, ymm4
1269         vpxord  ymm15, ymm15, ymm0
1270         vpxord  ymm12, ymm12, ymm1
1271         vpxord  ymm13, ymm13, ymm2
1272         vpxord  ymm14, ymm14, ymm3
1273         vprord  ymm15, ymm15, 16
1274         vprord  ymm12, ymm12, 16
1275         vprord  ymm13, ymm13, 16
1276         vprord  ymm14, ymm14, 16
1277         vpaddd  ymm10, ymm10, ymm15
1278         vpaddd  ymm11, ymm11, ymm12
1279         vpaddd  ymm8, ymm8, ymm13
1280         vpaddd  ymm9, ymm9, ymm14
1281         vpxord  ymm5, ymm5, ymm10
1282         vpxord  ymm6, ymm6, ymm11
1283         vpxord  ymm7, ymm7, ymm8
1284         vpxord  ymm4, ymm4, ymm9
1285         vprord  ymm5, ymm5, 12
1286         vprord  ymm6, ymm6, 12
1287         vprord  ymm7, ymm7, 12
1288         vprord  ymm4, ymm4, 12
1289         vpaddd  ymm0, ymm0, ymm25
1290         vpaddd  ymm1, ymm1, ymm27
1291         vpaddd  ymm2, ymm2, ymm29
1292         vpaddd  ymm3, ymm3, ymm31
1293         vpaddd  ymm0, ymm0, ymm5
1294         vpaddd  ymm1, ymm1, ymm6
1295         vpaddd  ymm2, ymm2, ymm7
1296         vpaddd  ymm3, ymm3, ymm4
1297         vpxord  ymm15, ymm15, ymm0
1298         vpxord  ymm12, ymm12, ymm1
1299         vpxord  ymm13, ymm13, ymm2
1300         vpxord  ymm14, ymm14, ymm3
1301         vprord  ymm15, ymm15, 8
1302         vprord  ymm12, ymm12, 8
1303         vprord  ymm13, ymm13, 8
1304         vprord  ymm14, ymm14, 8
1305         vpaddd  ymm10, ymm10, ymm15
1306         vpaddd  ymm11, ymm11, ymm12
1307         vpaddd  ymm8, ymm8, ymm13
1308         vpaddd  ymm9, ymm9, ymm14
1309         vpxord  ymm5, ymm5, ymm10
1310         vpxord  ymm6, ymm6, ymm11
1311         vpxord  ymm7, ymm7, ymm8
1312         vpxord  ymm4, ymm4, ymm9
1313         vprord  ymm5, ymm5, 7
1314         vprord  ymm6, ymm6, 7
1315         vprord  ymm7, ymm7, 7
1316         vprord  ymm4, ymm4, 7
1317         vpaddd  ymm0, ymm0, ymm18
1318         vpaddd  ymm1, ymm1, ymm19
1319         vpaddd  ymm2, ymm2, ymm23
1320         vpaddd  ymm3, ymm3, ymm20
1321         vpaddd  ymm0, ymm0, ymm4
1322         vpaddd  ymm1, ymm1, ymm5
1323         vpaddd  ymm2, ymm2, ymm6
1324         vpaddd  ymm3, ymm3, ymm7
1325         vpxord  ymm12, ymm12, ymm0
1326         vpxord  ymm13, ymm13, ymm1
1327         vpxord  ymm14, ymm14, ymm2
1328         vpxord  ymm15, ymm15, ymm3
1329         vprord  ymm12, ymm12, 16
1330         vprord  ymm13, ymm13, 16
1331         vprord  ymm14, ymm14, 16
1332         vprord  ymm15, ymm15, 16
1333         vpaddd  ymm8, ymm8, ymm12
1334         vpaddd  ymm9, ymm9, ymm13
1335         vpaddd  ymm10, ymm10, ymm14
1336         vpaddd  ymm11, ymm11, ymm15
1337         vpxord  ymm4, ymm4, ymm8
1338         vpxord  ymm5, ymm5, ymm9
1339         vpxord  ymm6, ymm6, ymm10
1340         vpxord  ymm7, ymm7, ymm11
1341         vprord  ymm4, ymm4, 12
1342         vprord  ymm5, ymm5, 12
1343         vprord  ymm6, ymm6, 12
1344         vprord  ymm7, ymm7, 12
1345         vpaddd  ymm0, ymm0, ymm22
1346         vpaddd  ymm1, ymm1, ymm26
1347         vpaddd  ymm2, ymm2, ymm16
1348         vpaddd  ymm3, ymm3, ymm29
1349         vpaddd  ymm0, ymm0, ymm4
1350         vpaddd  ymm1, ymm1, ymm5
1351         vpaddd  ymm2, ymm2, ymm6
1352         vpaddd  ymm3, ymm3, ymm7
1353         vpxord  ymm12, ymm12, ymm0
1354         vpxord  ymm13, ymm13, ymm1
1355         vpxord  ymm14, ymm14, ymm2
1356         vpxord  ymm15, ymm15, ymm3
1357         vprord  ymm12, ymm12, 8
1358         vprord  ymm13, ymm13, 8
1359         vprord  ymm14, ymm14, 8
1360         vprord  ymm15, ymm15, 8
1361         vpaddd  ymm8, ymm8, ymm12
1362         vpaddd  ymm9, ymm9, ymm13
1363         vpaddd  ymm10, ymm10, ymm14
1364         vpaddd  ymm11, ymm11, ymm15
1365         vpxord  ymm4, ymm4, ymm8
1366         vpxord  ymm5, ymm5, ymm9
1367         vpxord  ymm6, ymm6, ymm10
1368         vpxord  ymm7, ymm7, ymm11
1369         vprord  ymm4, ymm4, 7
1370         vprord  ymm5, ymm5, 7
1371         vprord  ymm6, ymm6, 7
1372         vprord  ymm7, ymm7, 7
1373         vpaddd  ymm0, ymm0, ymm17
1374         vpaddd  ymm1, ymm1, ymm28
1375         vpaddd  ymm2, ymm2, ymm25
1376         vpaddd  ymm3, ymm3, ymm31
1377         vpaddd  ymm0, ymm0, ymm5
1378         vpaddd  ymm1, ymm1, ymm6
1379         vpaddd  ymm2, ymm2, ymm7
1380         vpaddd  ymm3, ymm3, ymm4
1381         vpxord  ymm15, ymm15, ymm0
1382         vpxord  ymm12, ymm12, ymm1
1383         vpxord  ymm13, ymm13, ymm2
1384         vpxord  ymm14, ymm14, ymm3
1385         vprord  ymm15, ymm15, 16
1386         vprord  ymm12, ymm12, 16
1387         vprord  ymm13, ymm13, 16
1388         vprord  ymm14, ymm14, 16
1389         vpaddd  ymm10, ymm10, ymm15
1390         vpaddd  ymm11, ymm11, ymm12
1391         vpaddd  ymm8, ymm8, ymm13
1392         vpaddd  ymm9, ymm9, ymm14
1393         vpxord  ymm5, ymm5, ymm10
1394         vpxord  ymm6, ymm6, ymm11
1395         vpxord  ymm7, ymm7, ymm8
1396         vpxord  ymm4, ymm4, ymm9
1397         vprord  ymm5, ymm5, 12
1398         vprord  ymm6, ymm6, 12
1399         vprord  ymm7, ymm7, 12
1400         vprord  ymm4, ymm4, 12
1401         vpaddd  ymm0, ymm0, ymm27
1402         vpaddd  ymm1, ymm1, ymm21
1403         vpaddd  ymm2, ymm2, ymm30
1404         vpaddd  ymm3, ymm3, ymm24
1405         vpaddd  ymm0, ymm0, ymm5
1406         vpaddd  ymm1, ymm1, ymm6
1407         vpaddd  ymm2, ymm2, ymm7
1408         vpaddd  ymm3, ymm3, ymm4
1409         vpxord  ymm15, ymm15, ymm0
1410         vpxord  ymm12, ymm12, ymm1
1411         vpxord  ymm13, ymm13, ymm2
1412         vpxord  ymm14, ymm14, ymm3
1413         vprord  ymm15, ymm15, 8
1414         vprord  ymm12, ymm12, 8
1415         vprord  ymm13, ymm13, 8
1416         vprord  ymm14, ymm14, 8
1417         vpaddd  ymm10, ymm10, ymm15
1418         vpaddd  ymm11, ymm11, ymm12
1419         vpaddd  ymm8, ymm8, ymm13
1420         vpaddd  ymm9, ymm9, ymm14
1421         vpxord  ymm5, ymm5, ymm10
1422         vpxord  ymm6, ymm6, ymm11
1423         vpxord  ymm7, ymm7, ymm8
1424         vpxord  ymm4, ymm4, ymm9
1425         vprord  ymm5, ymm5, 7
1426         vprord  ymm6, ymm6, 7
1427         vprord  ymm7, ymm7, 7
1428         vprord  ymm4, ymm4, 7
1429         vpaddd  ymm0, ymm0, ymm19
1430         vpaddd  ymm1, ymm1, ymm26
1431         vpaddd  ymm2, ymm2, ymm29
1432         vpaddd  ymm3, ymm3, ymm23
1433         vpaddd  ymm0, ymm0, ymm4
1434         vpaddd  ymm1, ymm1, ymm5
1435         vpaddd  ymm2, ymm2, ymm6
1436         vpaddd  ymm3, ymm3, ymm7
1437         vpxord  ymm12, ymm12, ymm0
1438         vpxord  ymm13, ymm13, ymm1
1439         vpxord  ymm14, ymm14, ymm2
1440         vpxord  ymm15, ymm15, ymm3
1441         vprord  ymm12, ymm12, 16
1442         vprord  ymm13, ymm13, 16
1443         vprord  ymm14, ymm14, 16
1444         vprord  ymm15, ymm15, 16
1445         vpaddd  ymm8, ymm8, ymm12
1446         vpaddd  ymm9, ymm9, ymm13
1447         vpaddd  ymm10, ymm10, ymm14
1448         vpaddd  ymm11, ymm11, ymm15
1449         vpxord  ymm4, ymm4, ymm8
1450         vpxord  ymm5, ymm5, ymm9
1451         vpxord  ymm6, ymm6, ymm10
1452         vpxord  ymm7, ymm7, ymm11
1453         vprord  ymm4, ymm4, 12
1454         vprord  ymm5, ymm5, 12
1455         vprord  ymm6, ymm6, 12
1456         vprord  ymm7, ymm7, 12
1457         vpaddd  ymm0, ymm0, ymm20
1458         vpaddd  ymm1, ymm1, ymm28
1459         vpaddd  ymm2, ymm2, ymm18
1460         vpaddd  ymm3, ymm3, ymm30
1461         vpaddd  ymm0, ymm0, ymm4
1462         vpaddd  ymm1, ymm1, ymm5
1463         vpaddd  ymm2, ymm2, ymm6
1464         vpaddd  ymm3, ymm3, ymm7
1465         vpxord  ymm12, ymm12, ymm0
1466         vpxord  ymm13, ymm13, ymm1
1467         vpxord  ymm14, ymm14, ymm2
1468         vpxord  ymm15, ymm15, ymm3
1469         vprord  ymm12, ymm12, 8
1470         vprord  ymm13, ymm13, 8
1471         vprord  ymm14, ymm14, 8
1472         vprord  ymm15, ymm15, 8
1473         vpaddd  ymm8, ymm8, ymm12
1474         vpaddd  ymm9, ymm9, ymm13
1475         vpaddd  ymm10, ymm10, ymm14
1476         vpaddd  ymm11, ymm11, ymm15
1477         vpxord  ymm4, ymm4, ymm8
1478         vpxord  ymm5, ymm5, ymm9
1479         vpxord  ymm6, ymm6, ymm10
1480         vpxord  ymm7, ymm7, ymm11
1481         vprord  ymm4, ymm4, 7
1482         vprord  ymm5, ymm5, 7
1483         vprord  ymm6, ymm6, 7
1484         vprord  ymm7, ymm7, 7
1485         vpaddd  ymm0, ymm0, ymm22
1486         vpaddd  ymm1, ymm1, ymm25
1487         vpaddd  ymm2, ymm2, ymm27
1488         vpaddd  ymm3, ymm3, ymm24
1489         vpaddd  ymm0, ymm0, ymm5
1490         vpaddd  ymm1, ymm1, ymm6
1491         vpaddd  ymm2, ymm2, ymm7
1492         vpaddd  ymm3, ymm3, ymm4
1493         vpxord  ymm15, ymm15, ymm0
1494         vpxord  ymm12, ymm12, ymm1
1495         vpxord  ymm13, ymm13, ymm2
1496         vpxord  ymm14, ymm14, ymm3
1497         vprord  ymm15, ymm15, 16
1498         vprord  ymm12, ymm12, 16
1499         vprord  ymm13, ymm13, 16
1500         vprord  ymm14, ymm14, 16
1501         vpaddd  ymm10, ymm10, ymm15
1502         vpaddd  ymm11, ymm11, ymm12
1503         vpaddd  ymm8, ymm8, ymm13
1504         vpaddd  ymm9, ymm9, ymm14
1505         vpxord  ymm5, ymm5, ymm10
1506         vpxord  ymm6, ymm6, ymm11
1507         vpxord  ymm7, ymm7, ymm8
1508         vpxord  ymm4, ymm4, ymm9
1509         vprord  ymm5, ymm5, 12
1510         vprord  ymm6, ymm6, 12
1511         vprord  ymm7, ymm7, 12
1512         vprord  ymm4, ymm4, 12
1513         vpaddd  ymm0, ymm0, ymm21
1514         vpaddd  ymm1, ymm1, ymm16
1515         vpaddd  ymm2, ymm2, ymm31
1516         vpaddd  ymm3, ymm3, ymm17
1517         vpaddd  ymm0, ymm0, ymm5
1518         vpaddd  ymm1, ymm1, ymm6
1519         vpaddd  ymm2, ymm2, ymm7
1520         vpaddd  ymm3, ymm3, ymm4
1521         vpxord  ymm15, ymm15, ymm0
1522         vpxord  ymm12, ymm12, ymm1
1523         vpxord  ymm13, ymm13, ymm2
1524         vpxord  ymm14, ymm14, ymm3
1525         vprord  ymm15, ymm15, 8
1526         vprord  ymm12, ymm12, 8
1527         vprord  ymm13, ymm13, 8
1528         vprord  ymm14, ymm14, 8
1529         vpaddd  ymm10, ymm10, ymm15
1530         vpaddd  ymm11, ymm11, ymm12
1531         vpaddd  ymm8, ymm8, ymm13
1532         vpaddd  ymm9, ymm9, ymm14
1533         vpxord  ymm5, ymm5, ymm10
1534         vpxord  ymm6, ymm6, ymm11
1535         vpxord  ymm7, ymm7, ymm8
1536         vpxord  ymm4, ymm4, ymm9
1537         vprord  ymm5, ymm5, 7
1538         vprord  ymm6, ymm6, 7
1539         vprord  ymm7, ymm7, 7
1540         vprord  ymm4, ymm4, 7
1541         vpaddd  ymm0, ymm0, ymm26
1542         vpaddd  ymm1, ymm1, ymm28
1543         vpaddd  ymm2, ymm2, ymm30
1544         vpaddd  ymm3, ymm3, ymm29
1545         vpaddd  ymm0, ymm0, ymm4
1546         vpaddd  ymm1, ymm1, ymm5
1547         vpaddd  ymm2, ymm2, ymm6
1548         vpaddd  ymm3, ymm3, ymm7
1549         vpxord  ymm12, ymm12, ymm0
1550         vpxord  ymm13, ymm13, ymm1
1551         vpxord  ymm14, ymm14, ymm2
1552         vpxord  ymm15, ymm15, ymm3
1553         vprord  ymm12, ymm12, 16
1554         vprord  ymm13, ymm13, 16
1555         vprord  ymm14, ymm14, 16
1556         vprord  ymm15, ymm15, 16
1557         vpaddd  ymm8, ymm8, ymm12
1558         vpaddd  ymm9, ymm9, ymm13
1559         vpaddd  ymm10, ymm10, ymm14
1560         vpaddd  ymm11, ymm11, ymm15
1561         vpxord  ymm4, ymm4, ymm8
1562         vpxord  ymm5, ymm5, ymm9
1563         vpxord  ymm6, ymm6, ymm10
1564         vpxord  ymm7, ymm7, ymm11
1565         vprord  ymm4, ymm4, 12
1566         vprord  ymm5, ymm5, 12
1567         vprord  ymm6, ymm6, 12
1568         vprord  ymm7, ymm7, 12
1569         vpaddd  ymm0, ymm0, ymm23
1570         vpaddd  ymm1, ymm1, ymm25
1571         vpaddd  ymm2, ymm2, ymm19
1572         vpaddd  ymm3, ymm3, ymm31
1573         vpaddd  ymm0, ymm0, ymm4
1574         vpaddd  ymm1, ymm1, ymm5
1575         vpaddd  ymm2, ymm2, ymm6
1576         vpaddd  ymm3, ymm3, ymm7
1577         vpxord  ymm12, ymm12, ymm0
1578         vpxord  ymm13, ymm13, ymm1
1579         vpxord  ymm14, ymm14, ymm2
1580         vpxord  ymm15, ymm15, ymm3
1581         vprord  ymm12, ymm12, 8
1582         vprord  ymm13, ymm13, 8
1583         vprord  ymm14, ymm14, 8
1584         vprord  ymm15, ymm15, 8
1585         vpaddd  ymm8, ymm8, ymm12
1586         vpaddd  ymm9, ymm9, ymm13
1587         vpaddd  ymm10, ymm10, ymm14
1588         vpaddd  ymm11, ymm11, ymm15
1589         vpxord  ymm4, ymm4, ymm8
1590         vpxord  ymm5, ymm5, ymm9
1591         vpxord  ymm6, ymm6, ymm10
1592         vpxord  ymm7, ymm7, ymm11
1593         vprord  ymm4, ymm4, 7
1594         vprord  ymm5, ymm5, 7
1595         vprord  ymm6, ymm6, 7
1596         vprord  ymm7, ymm7, 7
1597         vpaddd  ymm0, ymm0, ymm20
1598         vpaddd  ymm1, ymm1, ymm27
1599         vpaddd  ymm2, ymm2, ymm21
1600         vpaddd  ymm3, ymm3, ymm17
1601         vpaddd  ymm0, ymm0, ymm5
1602         vpaddd  ymm1, ymm1, ymm6
1603         vpaddd  ymm2, ymm2, ymm7
1604         vpaddd  ymm3, ymm3, ymm4
1605         vpxord  ymm15, ymm15, ymm0
1606         vpxord  ymm12, ymm12, ymm1
1607         vpxord  ymm13, ymm13, ymm2
1608         vpxord  ymm14, ymm14, ymm3
1609         vprord  ymm15, ymm15, 16
1610         vprord  ymm12, ymm12, 16
1611         vprord  ymm13, ymm13, 16
1612         vprord  ymm14, ymm14, 16
1613         vpaddd  ymm10, ymm10, ymm15
1614         vpaddd  ymm11, ymm11, ymm12
1615         vpaddd  ymm8, ymm8, ymm13
1616         vpaddd  ymm9, ymm9, ymm14
1617         vpxord  ymm5, ymm5, ymm10
1618         vpxord  ymm6, ymm6, ymm11
1619         vpxord  ymm7, ymm7, ymm8
1620         vpxord  ymm4, ymm4, ymm9
1621         vprord  ymm5, ymm5, 12
1622         vprord  ymm6, ymm6, 12
1623         vprord  ymm7, ymm7, 12
1624         vprord  ymm4, ymm4, 12
1625         vpaddd  ymm0, ymm0, ymm16
1626         vpaddd  ymm1, ymm1, ymm18
1627         vpaddd  ymm2, ymm2, ymm24
1628         vpaddd  ymm3, ymm3, ymm22
1629         vpaddd  ymm0, ymm0, ymm5
1630         vpaddd  ymm1, ymm1, ymm6
1631         vpaddd  ymm2, ymm2, ymm7
1632         vpaddd  ymm3, ymm3, ymm4
1633         vpxord  ymm15, ymm15, ymm0
1634         vpxord  ymm12, ymm12, ymm1
1635         vpxord  ymm13, ymm13, ymm2
1636         vpxord  ymm14, ymm14, ymm3
1637         vprord  ymm15, ymm15, 8
1638         vprord  ymm12, ymm12, 8
1639         vprord  ymm13, ymm13, 8
1640         vprord  ymm14, ymm14, 8
1641         vpaddd  ymm10, ymm10, ymm15
1642         vpaddd  ymm11, ymm11, ymm12
1643         vpaddd  ymm8, ymm8, ymm13
1644         vpaddd  ymm9, ymm9, ymm14
1645         vpxord  ymm5, ymm5, ymm10
1646         vpxord  ymm6, ymm6, ymm11
1647         vpxord  ymm7, ymm7, ymm8
1648         vpxord  ymm4, ymm4, ymm9
1649         vprord  ymm5, ymm5, 7
1650         vprord  ymm6, ymm6, 7
1651         vprord  ymm7, ymm7, 7
1652         vprord  ymm4, ymm4, 7
1653         vpaddd  ymm0, ymm0, ymm28
1654         vpaddd  ymm1, ymm1, ymm25
1655         vpaddd  ymm2, ymm2, ymm31
1656         vpaddd  ymm3, ymm3, ymm30
1657         vpaddd  ymm0, ymm0, ymm4
1658         vpaddd  ymm1, ymm1, ymm5
1659         vpaddd  ymm2, ymm2, ymm6
1660         vpaddd  ymm3, ymm3, ymm7
1661         vpxord  ymm12, ymm12, ymm0
1662         vpxord  ymm13, ymm13, ymm1
1663         vpxord  ymm14, ymm14, ymm2
1664         vpxord  ymm15, ymm15, ymm3
1665         vprord  ymm12, ymm12, 16
1666         vprord  ymm13, ymm13, 16
1667         vprord  ymm14, ymm14, 16
1668         vprord  ymm15, ymm15, 16
1669         vpaddd  ymm8, ymm8, ymm12
1670         vpaddd  ymm9, ymm9, ymm13
1671         vpaddd  ymm10, ymm10, ymm14
1672         vpaddd  ymm11, ymm11, ymm15
1673         vpxord  ymm4, ymm4, ymm8
1674         vpxord  ymm5, ymm5, ymm9
1675         vpxord  ymm6, ymm6, ymm10
1676         vpxord  ymm7, ymm7, ymm11
1677         vprord  ymm4, ymm4, 12
1678         vprord  ymm5, ymm5, 12
1679         vprord  ymm6, ymm6, 12
1680         vprord  ymm7, ymm7, 12
1681         vpaddd  ymm0, ymm0, ymm29
1682         vpaddd  ymm1, ymm1, ymm27
1683         vpaddd  ymm2, ymm2, ymm26
1684         vpaddd  ymm3, ymm3, ymm24
1685         vpaddd  ymm0, ymm0, ymm4
1686         vpaddd  ymm1, ymm1, ymm5
1687         vpaddd  ymm2, ymm2, ymm6
1688         vpaddd  ymm3, ymm3, ymm7
1689         vpxord  ymm12, ymm12, ymm0
1690         vpxord  ymm13, ymm13, ymm1
1691         vpxord  ymm14, ymm14, ymm2
1692         vpxord  ymm15, ymm15, ymm3
1693         vprord  ymm12, ymm12, 8
1694         vprord  ymm13, ymm13, 8
1695         vprord  ymm14, ymm14, 8
1696         vprord  ymm15, ymm15, 8
1697         vpaddd  ymm8, ymm8, ymm12
1698         vpaddd  ymm9, ymm9, ymm13
1699         vpaddd  ymm10, ymm10, ymm14
1700         vpaddd  ymm11, ymm11, ymm15
1701         vpxord  ymm4, ymm4, ymm8
1702         vpxord  ymm5, ymm5, ymm9
1703         vpxord  ymm6, ymm6, ymm10
1704         vpxord  ymm7, ymm7, ymm11
1705         vprord  ymm4, ymm4, 7
1706         vprord  ymm5, ymm5, 7
1707         vprord  ymm6, ymm6, 7
1708         vprord  ymm7, ymm7, 7
1709         vpaddd  ymm0, ymm0, ymm23
1710         vpaddd  ymm1, ymm1, ymm21
1711         vpaddd  ymm2, ymm2, ymm16
1712         vpaddd  ymm3, ymm3, ymm22
1713         vpaddd  ymm0, ymm0, ymm5
1714         vpaddd  ymm1, ymm1, ymm6
1715         vpaddd  ymm2, ymm2, ymm7
1716         vpaddd  ymm3, ymm3, ymm4
1717         vpxord  ymm15, ymm15, ymm0
1718         vpxord  ymm12, ymm12, ymm1
1719         vpxord  ymm13, ymm13, ymm2
1720         vpxord  ymm14, ymm14, ymm3
1721         vprord  ymm15, ymm15, 16
1722         vprord  ymm12, ymm12, 16
1723         vprord  ymm13, ymm13, 16
1724         vprord  ymm14, ymm14, 16
1725         vpaddd  ymm10, ymm10, ymm15
1726         vpaddd  ymm11, ymm11, ymm12
1727         vpaddd  ymm8, ymm8, ymm13
1728         vpaddd  ymm9, ymm9, ymm14
1729         vpxord  ymm5, ymm5, ymm10
1730         vpxord  ymm6, ymm6, ymm11
1731         vpxord  ymm7, ymm7, ymm8
1732         vpxord  ymm4, ymm4, ymm9
1733         vprord  ymm5, ymm5, 12
1734         vprord  ymm6, ymm6, 12
1735         vprord  ymm7, ymm7, 12
1736         vprord  ymm4, ymm4, 12
1737         vpaddd  ymm0, ymm0, ymm18
1738         vpaddd  ymm1, ymm1, ymm19
1739         vpaddd  ymm2, ymm2, ymm17
1740         vpaddd  ymm3, ymm3, ymm20
1741         vpaddd  ymm0, ymm0, ymm5
1742         vpaddd  ymm1, ymm1, ymm6
1743         vpaddd  ymm2, ymm2, ymm7
1744         vpaddd  ymm3, ymm3, ymm4
1745         vpxord  ymm15, ymm15, ymm0
1746         vpxord  ymm12, ymm12, ymm1
1747         vpxord  ymm13, ymm13, ymm2
1748         vpxord  ymm14, ymm14, ymm3
1749         vprord  ymm15, ymm15, 8
1750         vprord  ymm12, ymm12, 8
1751         vprord  ymm13, ymm13, 8
1752         vprord  ymm14, ymm14, 8
1753         vpaddd  ymm10, ymm10, ymm15
1754         vpaddd  ymm11, ymm11, ymm12
1755         vpaddd  ymm8, ymm8, ymm13
1756         vpaddd  ymm9, ymm9, ymm14
1757         vpxord  ymm5, ymm5, ymm10
1758         vpxord  ymm6, ymm6, ymm11
1759         vpxord  ymm7, ymm7, ymm8
1760         vpxord  ymm4, ymm4, ymm9
1761         vprord  ymm5, ymm5, 7
1762         vprord  ymm6, ymm6, 7
1763         vprord  ymm7, ymm7, 7
1764         vprord  ymm4, ymm4, 7
1765         vpaddd  ymm0, ymm0, ymm25
1766         vpaddd  ymm1, ymm1, ymm27
1767         vpaddd  ymm2, ymm2, ymm24
1768         vpaddd  ymm3, ymm3, ymm31
1769         vpaddd  ymm0, ymm0, ymm4
1770         vpaddd  ymm1, ymm1, ymm5
1771         vpaddd  ymm2, ymm2, ymm6
1772         vpaddd  ymm3, ymm3, ymm7
1773         vpxord  ymm12, ymm12, ymm0
1774         vpxord  ymm13, ymm13, ymm1
1775         vpxord  ymm14, ymm14, ymm2
1776         vpxord  ymm15, ymm15, ymm3
1777         vprord  ymm12, ymm12, 16
1778         vprord  ymm13, ymm13, 16
1779         vprord  ymm14, ymm14, 16
1780         vprord  ymm15, ymm15, 16
1781         vpaddd  ymm8, ymm8, ymm12
1782         vpaddd  ymm9, ymm9, ymm13
1783         vpaddd  ymm10, ymm10, ymm14
1784         vpaddd  ymm11, ymm11, ymm15
1785         vpxord  ymm4, ymm4, ymm8
1786         vpxord  ymm5, ymm5, ymm9
1787         vpxord  ymm6, ymm6, ymm10
1788         vpxord  ymm7, ymm7, ymm11
1789         vprord  ymm4, ymm4, 12
1790         vprord  ymm5, ymm5, 12
1791         vprord  ymm6, ymm6, 12
1792         vprord  ymm7, ymm7, 12
1793         vpaddd  ymm0, ymm0, ymm30
1794         vpaddd  ymm1, ymm1, ymm21
1795         vpaddd  ymm2, ymm2, ymm28
1796         vpaddd  ymm3, ymm3, ymm17
1797         vpaddd  ymm0, ymm0, ymm4
1798         vpaddd  ymm1, ymm1, ymm5
1799         vpaddd  ymm2, ymm2, ymm6
1800         vpaddd  ymm3, ymm3, ymm7
1801         vpxord  ymm12, ymm12, ymm0
1802         vpxord  ymm13, ymm13, ymm1
1803         vpxord  ymm14, ymm14, ymm2
1804         vpxord  ymm15, ymm15, ymm3
1805         vprord  ymm12, ymm12, 8
1806         vprord  ymm13, ymm13, 8
1807         vprord  ymm14, ymm14, 8
1808         vprord  ymm15, ymm15, 8
1809         vpaddd  ymm8, ymm8, ymm12
1810         vpaddd  ymm9, ymm9, ymm13
1811         vpaddd  ymm10, ymm10, ymm14
1812         vpaddd  ymm11, ymm11, ymm15
1813         vpxord  ymm4, ymm4, ymm8
1814         vpxord  ymm5, ymm5, ymm9
1815         vpxord  ymm6, ymm6, ymm10
1816         vpxord  ymm7, ymm7, ymm11
1817         vprord  ymm4, ymm4, 7
1818         vprord  ymm5, ymm5, 7
1819         vprord  ymm6, ymm6, 7
1820         vprord  ymm7, ymm7, 7
1821         vpaddd  ymm0, ymm0, ymm29
1822         vpaddd  ymm1, ymm1, ymm16
1823         vpaddd  ymm2, ymm2, ymm18
1824         vpaddd  ymm3, ymm3, ymm20
1825         vpaddd  ymm0, ymm0, ymm5
1826         vpaddd  ymm1, ymm1, ymm6
1827         vpaddd  ymm2, ymm2, ymm7
1828         vpaddd  ymm3, ymm3, ymm4
1829         vpxord  ymm15, ymm15, ymm0
1830         vpxord  ymm12, ymm12, ymm1
1831         vpxord  ymm13, ymm13, ymm2
1832         vpxord  ymm14, ymm14, ymm3
1833         vprord  ymm15, ymm15, 16
1834         vprord  ymm12, ymm12, 16
1835         vprord  ymm13, ymm13, 16
1836         vprord  ymm14, ymm14, 16
1837         vpaddd  ymm10, ymm10, ymm15
1838         vpaddd  ymm11, ymm11, ymm12
1839         vpaddd  ymm8, ymm8, ymm13
1840         vpaddd  ymm9, ymm9, ymm14
1841         vpxord  ymm5, ymm5, ymm10
1842         vpxord  ymm6, ymm6, ymm11
1843         vpxord  ymm7, ymm7, ymm8
1844         vpxord  ymm4, ymm4, ymm9
1845         vprord  ymm5, ymm5, 12
1846         vprord  ymm6, ymm6, 12
1847         vprord  ymm7, ymm7, 12
1848         vprord  ymm4, ymm4, 12
1849         vpaddd  ymm0, ymm0, ymm19
1850         vpaddd  ymm1, ymm1, ymm26
1851         vpaddd  ymm2, ymm2, ymm22
1852         vpaddd  ymm3, ymm3, ymm23
1853         vpaddd  ymm0, ymm0, ymm5
1854         vpaddd  ymm1, ymm1, ymm6
1855         vpaddd  ymm2, ymm2, ymm7
1856         vpaddd  ymm3, ymm3, ymm4
1857         vpxord  ymm15, ymm15, ymm0
1858         vpxord  ymm12, ymm12, ymm1
1859         vpxord  ymm13, ymm13, ymm2
1860         vpxord  ymm14, ymm14, ymm3
1861         vprord  ymm15, ymm15, 8
1862         vprord  ymm12, ymm12, 8
1863         vprord  ymm13, ymm13, 8
1864         vprord  ymm14, ymm14, 8
1865         vpaddd  ymm10, ymm10, ymm15
1866         vpaddd  ymm11, ymm11, ymm12
1867         vpaddd  ymm8, ymm8, ymm13
1868         vpaddd  ymm9, ymm9, ymm14
1869         vpxord  ymm5, ymm5, ymm10
1870         vpxord  ymm6, ymm6, ymm11
1871         vpxord  ymm7, ymm7, ymm8
1872         vpxord  ymm4, ymm4, ymm9
1873         vprord  ymm5, ymm5, 7
1874         vprord  ymm6, ymm6, 7
1875         vprord  ymm7, ymm7, 7
1876         vprord  ymm4, ymm4, 7
1877         vpaddd  ymm0, ymm0, ymm27
1878         vpaddd  ymm1, ymm1, ymm21
1879         vpaddd  ymm2, ymm2, ymm17
1880         vpaddd  ymm3, ymm3, ymm24
1881         vpaddd  ymm0, ymm0, ymm4
1882         vpaddd  ymm1, ymm1, ymm5
1883         vpaddd  ymm2, ymm2, ymm6
1884         vpaddd  ymm3, ymm3, ymm7
1885         vpxord  ymm12, ymm12, ymm0
1886         vpxord  ymm13, ymm13, ymm1
1887         vpxord  ymm14, ymm14, ymm2
1888         vpxord  ymm15, ymm15, ymm3
1889         vprord  ymm12, ymm12, 16
1890         vprord  ymm13, ymm13, 16
1891         vprord  ymm14, ymm14, 16
1892         vprord  ymm15, ymm15, 16
1893         vpaddd  ymm8, ymm8, ymm12
1894         vpaddd  ymm9, ymm9, ymm13
1895         vpaddd  ymm10, ymm10, ymm14
1896         vpaddd  ymm11, ymm11, ymm15
1897         vpxord  ymm4, ymm4, ymm8
1898         vpxord  ymm5, ymm5, ymm9
1899         vpxord  ymm6, ymm6, ymm10
1900         vpxord  ymm7, ymm7, ymm11
1901         vprord  ymm4, ymm4, 12
1902         vprord  ymm5, ymm5, 12
1903         vprord  ymm6, ymm6, 12
1904         vprord  ymm7, ymm7, 12
1905         vpaddd  ymm0, ymm0, ymm31
1906         vpaddd  ymm1, ymm1, ymm16
1907         vpaddd  ymm2, ymm2, ymm25
1908         vpaddd  ymm3, ymm3, ymm22
1909         vpaddd  ymm0, ymm0, ymm4
1910         vpaddd  ymm1, ymm1, ymm5
1911         vpaddd  ymm2, ymm2, ymm6
1912         vpaddd  ymm3, ymm3, ymm7
1913         vpxord  ymm12, ymm12, ymm0
1914         vpxord  ymm13, ymm13, ymm1
1915         vpxord  ymm14, ymm14, ymm2
1916         vpxord  ymm15, ymm15, ymm3
1917         vprord  ymm12, ymm12, 8
1918         vprord  ymm13, ymm13, 8
1919         vprord  ymm14, ymm14, 8
1920         vprord  ymm15, ymm15, 8
1921         vpaddd  ymm8, ymm8, ymm12
1922         vpaddd  ymm9, ymm9, ymm13
1923         vpaddd  ymm10, ymm10, ymm14
1924         vpaddd  ymm11, ymm11, ymm15
1925         vpxord  ymm4, ymm4, ymm8
1926         vpxord  ymm5, ymm5, ymm9
1927         vpxord  ymm6, ymm6, ymm10
1928         vpxord  ymm7, ymm7, ymm11
1929         vprord  ymm4, ymm4, 7
1930         vprord  ymm5, ymm5, 7
1931         vprord  ymm6, ymm6, 7
1932         vprord  ymm7, ymm7, 7
1933         vpaddd  ymm0, ymm0, ymm30
1934         vpaddd  ymm1, ymm1, ymm18
1935         vpaddd  ymm2, ymm2, ymm19
1936         vpaddd  ymm3, ymm3, ymm23
1937         vpaddd  ymm0, ymm0, ymm5
1938         vpaddd  ymm1, ymm1, ymm6
1939         vpaddd  ymm2, ymm2, ymm7
1940         vpaddd  ymm3, ymm3, ymm4
1941         vpxord  ymm15, ymm15, ymm0
1942         vpxord  ymm12, ymm12, ymm1
1943         vpxord  ymm13, ymm13, ymm2
1944         vpxord  ymm14, ymm14, ymm3
1945         vprord  ymm15, ymm15, 16
1946         vprord  ymm12, ymm12, 16
1947         vprord  ymm13, ymm13, 16
1948         vprord  ymm14, ymm14, 16
1949         vpaddd  ymm10, ymm10, ymm15
1950         vpaddd  ymm11, ymm11, ymm12
1951         vpaddd  ymm8, ymm8, ymm13
1952         vpaddd  ymm9, ymm9, ymm14
1953         vpxord  ymm5, ymm5, ymm10
1954         vpxord  ymm6, ymm6, ymm11
1955         vpxord  ymm7, ymm7, ymm8
1956         vpxord  ymm4, ymm4, ymm9
1957         vprord  ymm5, ymm5, 12
1958         vprord  ymm6, ymm6, 12
1959         vprord  ymm7, ymm7, 12
1960         vprord  ymm4, ymm4, 12
1961         vpaddd  ymm0, ymm0, ymm26
1962         vpaddd  ymm1, ymm1, ymm28
1963         vpaddd  ymm2, ymm2, ymm20
1964         vpaddd  ymm3, ymm3, ymm29
1965         vpaddd  ymm0, ymm0, ymm5
1966         vpaddd  ymm1, ymm1, ymm6
1967         vpaddd  ymm2, ymm2, ymm7
1968         vpaddd  ymm3, ymm3, ymm4
1969         vpxord  ymm15, ymm15, ymm0
1970         vpxord  ymm12, ymm12, ymm1
1971         vpxord  ymm13, ymm13, ymm2
1972         vpxord  ymm14, ymm14, ymm3
1973         vprord  ymm15, ymm15, 8
1974         vprord  ymm12, ymm12, 8
1975         vprord  ymm13, ymm13, 8
1976         vprord  ymm14, ymm14, 8
1977         vpaddd  ymm10, ymm10, ymm15
1978         vpaddd  ymm11, ymm11, ymm12
1979         vpaddd  ymm8, ymm8, ymm13
1980         vpaddd  ymm9, ymm9, ymm14
1981         vpxord  ymm5, ymm5, ymm10
1982         vpxord  ymm6, ymm6, ymm11
1983         vpxord  ymm7, ymm7, ymm8
1984         vpxord  ymm4, ymm4, ymm9
1985         vprord  ymm5, ymm5, 7
1986         vprord  ymm6, ymm6, 7
1987         vprord  ymm7, ymm7, 7
1988         vprord  ymm4, ymm4, 7
1989         vpxor   ymm0, ymm0, ymm8
1990         vpxor   ymm1, ymm1, ymm9
1991         vpxor   ymm2, ymm2, ymm10
1992         vpxor   ymm3, ymm3, ymm11
1993         vpxor   ymm4, ymm4, ymm12
1994         vpxor   ymm5, ymm5, ymm13
1995         vpxor   ymm6, ymm6, ymm14
1996         vpxor   ymm7, ymm7, ymm15
1997         movzx   eax, byte ptr [rbp+0x38]
1998         jne     2b
1999         mov     rbx, qword ptr [rbp+0x50]
2000         vunpcklps ymm8, ymm0, ymm1
2001         vunpcklps ymm9, ymm2, ymm3
2002         vunpckhps ymm10, ymm0, ymm1
2003         vunpcklps ymm11, ymm4, ymm5
2004         vunpcklps ymm0, ymm6, ymm7
2005         vshufps ymm12, ymm8, ymm9, 78
2006         vblendps ymm1, ymm8, ymm12, 0xCC
2007         vshufps ymm8, ymm11, ymm0, 78
2008         vunpckhps ymm13, ymm2, ymm3
2009         vblendps ymm2, ymm11, ymm8, 0xCC
2010         vblendps ymm3, ymm12, ymm9, 0xCC
2011         vperm2f128 ymm12, ymm1, ymm2, 0x20
2012         vmovups ymmword ptr [rbx], ymm12
2013         vunpckhps ymm14, ymm4, ymm5
2014         vblendps ymm4, ymm8, ymm0, 0xCC
2015         vunpckhps ymm15, ymm6, ymm7
2016         vperm2f128 ymm7, ymm3, ymm4, 0x20
2017         vmovups ymmword ptr [rbx+0x20], ymm7
2018         vshufps ymm5, ymm10, ymm13, 78
2019         vblendps ymm6, ymm5, ymm13, 0xCC
2020         vshufps ymm13, ymm14, ymm15, 78
2021         vblendps ymm10, ymm10, ymm5, 0xCC
2022         vblendps ymm14, ymm14, ymm13, 0xCC
2023         vperm2f128 ymm8, ymm10, ymm14, 0x20
2024         vmovups ymmword ptr [rbx+0x40], ymm8
2025         vblendps ymm15, ymm13, ymm15, 0xCC
2026         vperm2f128 ymm13, ymm6, ymm15, 0x20
2027         vmovups ymmword ptr [rbx+0x60], ymm13
2028         vperm2f128 ymm9, ymm1, ymm2, 0x31
2029         vperm2f128 ymm11, ymm3, ymm4, 0x31
2030         vmovups ymmword ptr [rbx+0x80], ymm9
2031         vperm2f128 ymm14, ymm10, ymm14, 0x31
2032         vperm2f128 ymm15, ymm6, ymm15, 0x31
2033         vmovups ymmword ptr [rbx+0xA0], ymm11
2034         vmovups ymmword ptr [rbx+0xC0], ymm14
2035         vmovups ymmword ptr [rbx+0xE0], ymm15
2036         vmovdqa ymm0, ymmword ptr [rsp]
2037         vmovdqa ymm2, ymmword ptr [rsp+0x2*0x20]
2038         vmovdqa32 ymm0 {k1}, ymmword ptr [rsp+0x1*0x20]
2039         vmovdqa32 ymm2 {k1}, ymmword ptr [rsp+0x3*0x20]
2040         vmovdqa ymmword ptr [rsp], ymm0
2041         vmovdqa ymmword ptr [rsp+0x2*0x20], ymm2
2042         add     rbx, 256
2043         mov     qword ptr [rbp+0x50], rbx
2044         add     rdi, 64
2045         sub     rsi, 8
2047         mov     rbx, qword ptr [rbp+0x50]
2048         mov     r15, qword ptr [rsp+0x80]
2049         movzx   r13, byte ptr [rbp+0x38]
2050         movzx   r12, byte ptr [rbp+0x48]
2051         test    esi, 0x4
2052         je      3f
2053         vbroadcasti32x4 zmm0, xmmword ptr [rcx]
2054         vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x1*0x10]
2055         vmovdqa xmm12, xmmword ptr [rsp]
2056         vmovdqa xmm13, xmmword ptr [rsp+0x4*0x10]
2057         vpunpckldq xmm14, xmm12, xmm13
2058         vpunpckhdq xmm15, xmm12, xmm13
2059         vpermq  ymm14, ymm14, 0xDC
2060         vpermq  ymm15, ymm15, 0xDC
2061         vpbroadcastd zmm12, dword ptr [BLAKE3_BLOCK_LEN+rip]
2062         vinserti32x8 zmm13, zmm14, ymm15, 0x01
2063         mov     eax, 17476
2064         kmovw   k2, eax
2065         vpblendmd zmm13 {k2}, zmm13, zmm12
2066         vbroadcasti32x4 zmm15, xmmword ptr [BLAKE3_IV+rip]
2067         mov     r8, qword ptr [rdi]
2068         mov     r9, qword ptr [rdi+0x8]
2069         mov     r10, qword ptr [rdi+0x10]
2070         mov     r11, qword ptr [rdi+0x18]
2071         mov     eax, 43690
2072         kmovw   k3, eax
2073         mov     eax, 34952
2074         kmovw   k4, eax
2075         movzx   eax, byte ptr [rbp+0x40]
2076         or      eax, r13d
2077         xor     edx, edx
2078 .p2align 5
2080         mov     r14d, eax
2081         or      eax, r12d
2082         add     rdx, 64
2083         cmp     rdx, r15
2084         cmovne  eax, r14d
2085         mov     dword ptr [rsp+0x88], eax
2086         vmovdqa32 zmm2, zmm15
2087         vpbroadcastd zmm8, dword ptr [rsp+0x22*0x4]
2088         vpblendmd zmm3 {k4}, zmm13, zmm8
2089         vmovups zmm8, zmmword ptr [r8+rdx-0x1*0x40]
2090         vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x4*0x10], 0x01
2091         vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x4*0x10], 0x02
2092         vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x4*0x10], 0x03
2093         vmovups zmm9, zmmword ptr [r8+rdx-0x30]
2094         vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x3*0x10], 0x01
2095         vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x3*0x10], 0x02
2096         vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x3*0x10], 0x03
2097         vshufps zmm4, zmm8, zmm9, 136
2098         vshufps zmm5, zmm8, zmm9, 221
2099         vmovups zmm8, zmmword ptr [r8+rdx-0x20]
2100         vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x2*0x10], 0x01
2101         vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x2*0x10], 0x02
2102         vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x2*0x10], 0x03
2103         vmovups zmm9, zmmword ptr [r8+rdx-0x10]
2104         vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x1*0x10], 0x01
2105         vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x1*0x10], 0x02
2106         vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x1*0x10], 0x03
2107         vshufps zmm6, zmm8, zmm9, 136
2108         vshufps zmm7, zmm8, zmm9, 221
2109         vpshufd zmm6, zmm6, 0x93
2110         vpshufd zmm7, zmm7, 0x93
2111         mov     al, 7
2113         vpaddd  zmm0, zmm0, zmm4
2114         vpaddd  zmm0, zmm0, zmm1
2115         vpxord  zmm3, zmm3, zmm0
2116         vprord  zmm3, zmm3, 16
2117         vpaddd  zmm2, zmm2, zmm3
2118         vpxord  zmm1, zmm1, zmm2
2119         vprord  zmm1, zmm1, 12
2120         vpaddd  zmm0, zmm0, zmm5
2121         vpaddd  zmm0, zmm0, zmm1
2122         vpxord  zmm3, zmm3, zmm0
2123         vprord  zmm3, zmm3, 8
2124         vpaddd  zmm2, zmm2, zmm3
2125         vpxord  zmm1, zmm1, zmm2
2126         vprord  zmm1, zmm1, 7
2127         vpshufd zmm0, zmm0, 0x93
2128         vpshufd zmm3, zmm3, 0x4E
2129         vpshufd zmm2, zmm2, 0x39
2130         vpaddd  zmm0, zmm0, zmm6
2131         vpaddd  zmm0, zmm0, zmm1
2132         vpxord  zmm3, zmm3, zmm0
2133         vprord  zmm3, zmm3, 16
2134         vpaddd  zmm2, zmm2, zmm3
2135         vpxord  zmm1, zmm1, zmm2
2136         vprord  zmm1, zmm1, 12
2137         vpaddd  zmm0, zmm0, zmm7
2138         vpaddd  zmm0, zmm0, zmm1
2139         vpxord  zmm3, zmm3, zmm0
2140         vprord  zmm3, zmm3, 8
2141         vpaddd  zmm2, zmm2, zmm3
2142         vpxord  zmm1, zmm1, zmm2
2143         vprord  zmm1, zmm1, 7
2144         vpshufd zmm0, zmm0, 0x39
2145         vpshufd zmm3, zmm3, 0x4E
2146         vpshufd zmm2, zmm2, 0x93
2147         dec     al
2148         jz      9f
2149         vshufps zmm8, zmm4, zmm5, 214
2150         vpshufd zmm9, zmm4, 0x0F
2151         vpshufd zmm4, zmm8, 0x39
2152         vshufps zmm8, zmm6, zmm7, 250
2153         vpblendmd zmm9 {k3}, zmm9, zmm8
2154         vpunpcklqdq zmm8, zmm7, zmm5
2155         vpblendmd zmm8 {k4}, zmm8, zmm6
2156         vpshufd zmm8, zmm8, 0x78
2157         vpunpckhdq zmm5, zmm5, zmm7
2158         vpunpckldq zmm6, zmm6, zmm5
2159         vpshufd zmm7, zmm6, 0x1E
2160         vmovdqa32 zmm5, zmm9
2161         vmovdqa32 zmm6, zmm8
2162         jmp     9b
2164         vpxord  zmm0, zmm0, zmm2
2165         vpxord  zmm1, zmm1, zmm3
2166         mov     eax, r13d
2167         cmp     rdx, r15
2168         jne     2b
2169         vmovdqu xmmword ptr [rbx], xmm0
2170         vmovdqu xmmword ptr [rbx+0x10], xmm1
2171         vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2172         vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2173         vextracti32x4 xmmword ptr [rbx+0x4*0x10], zmm0, 0x02
2174         vextracti32x4 xmmword ptr [rbx+0x5*0x10], zmm1, 0x02
2175         vextracti32x4 xmmword ptr [rbx+0x6*0x10], zmm0, 0x03
2176         vextracti32x4 xmmword ptr [rbx+0x7*0x10], zmm1, 0x03
2177         vmovdqa xmm0, xmmword ptr [rsp]
2178         vmovdqa xmm2, xmmword ptr [rsp+0x40]
2179         vmovdqa32 xmm0 {k1}, xmmword ptr [rsp+0x1*0x10]
2180         vmovdqa32 xmm2 {k1}, xmmword ptr [rsp+0x5*0x10]
2181         vmovdqa xmmword ptr [rsp], xmm0
2182         vmovdqa xmmword ptr [rsp+0x40], xmm2
2183         add     rbx, 128
2184         add     rdi, 32
2185         sub     rsi, 4
2187         test    esi, 0x2
2188         je      3f
2189         vbroadcasti128 ymm0, xmmword ptr [rcx]
2190         vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
2191         vmovd   xmm13, dword ptr [rsp]
2192         vpinsrd xmm13, xmm13, dword ptr [rsp+0x40], 1
2193         vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2194         vmovd   xmm14, dword ptr [rsp+0x4]
2195         vpinsrd xmm14, xmm14, dword ptr [rsp+0x44], 1
2196         vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2197         vinserti128 ymm13, ymm13, xmm14, 0x01
2198         mov     r8, qword ptr [rdi]
2199         mov     r9, qword ptr [rdi+0x8]
2200         movzx   eax, byte ptr [rbp+0x40]
2201         or      eax, r13d
2202         xor     edx, edx
2203 .p2align 5
2205         mov     r14d, eax
2206         or      eax, r12d
2207         add     rdx, 64
2208         cmp     rdx, r15
2209         cmovne  eax, r14d
2210         mov     dword ptr [rsp+0x88], eax
2211         vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
2212         vpbroadcastd ymm8, dword ptr [rsp+0x88]
2213         vpblendd ymm3, ymm13, ymm8, 0x88
2214         vmovups ymm8, ymmword ptr [r8+rdx-0x40]
2215         vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x40], 0x01
2216         vmovups ymm9, ymmword ptr [r8+rdx-0x30]
2217         vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x30], 0x01
2218         vshufps ymm4, ymm8, ymm9, 136
2219         vshufps ymm5, ymm8, ymm9, 221
2220         vmovups ymm8, ymmword ptr [r8+rdx-0x20]
2221         vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x20], 0x01
2222         vmovups ymm9, ymmword ptr [r8+rdx-0x10]
2223         vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x10], 0x01
2224         vshufps ymm6, ymm8, ymm9, 136
2225         vshufps ymm7, ymm8, ymm9, 221
2226         vpshufd ymm6, ymm6, 0x93
2227         vpshufd ymm7, ymm7, 0x93
2228         mov     al, 7
2230         vpaddd  ymm0, ymm0, ymm4
2231         vpaddd  ymm0, ymm0, ymm1
2232         vpxord  ymm3, ymm3, ymm0
2233         vprord  ymm3, ymm3, 16
2234         vpaddd  ymm2, ymm2, ymm3
2235         vpxord  ymm1, ymm1, ymm2
2236         vprord  ymm1, ymm1, 12
2237         vpaddd  ymm0, ymm0, ymm5
2238         vpaddd  ymm0, ymm0, ymm1
2239         vpxord  ymm3, ymm3, ymm0
2240         vprord  ymm3, ymm3, 8
2241         vpaddd  ymm2, ymm2, ymm3
2242         vpxord  ymm1, ymm1, ymm2
2243         vprord  ymm1, ymm1, 7
2244         vpshufd ymm0, ymm0, 0x93
2245         vpshufd ymm3, ymm3, 0x4E
2246         vpshufd ymm2, ymm2, 0x39
2247         vpaddd  ymm0, ymm0, ymm6
2248         vpaddd  ymm0, ymm0, ymm1
2249         vpxord  ymm3, ymm3, ymm0
2250         vprord  ymm3, ymm3, 16
2251         vpaddd  ymm2, ymm2, ymm3
2252         vpxord  ymm1, ymm1, ymm2
2253         vprord  ymm1, ymm1, 12
2254         vpaddd  ymm0, ymm0, ymm7
2255         vpaddd  ymm0, ymm0, ymm1
2256         vpxord  ymm3, ymm3, ymm0
2257         vprord  ymm3, ymm3, 8
2258         vpaddd  ymm2, ymm2, ymm3
2259         vpxord  ymm1, ymm1, ymm2
2260         vprord  ymm1, ymm1, 7
2261         vpshufd ymm0, ymm0, 0x39
2262         vpshufd ymm3, ymm3, 0x4E
2263         vpshufd ymm2, ymm2, 0x93
2264         dec     al
2265         jz      9f
2266         vshufps ymm8, ymm4, ymm5, 214
2267         vpshufd ymm9, ymm4, 0x0F
2268         vpshufd ymm4, ymm8, 0x39
2269         vshufps ymm8, ymm6, ymm7, 250
2270         vpblendd ymm9, ymm9, ymm8, 0xAA
2271         vpunpcklqdq ymm8, ymm7, ymm5
2272         vpblendd ymm8, ymm8, ymm6, 0x88
2273         vpshufd ymm8, ymm8, 0x78
2274         vpunpckhdq ymm5, ymm5, ymm7
2275         vpunpckldq ymm6, ymm6, ymm5
2276         vpshufd ymm7, ymm6, 0x1E
2277         vmovdqa ymm5, ymm9
2278         vmovdqa ymm6, ymm8
2279         jmp     9b
2281         vpxor   ymm0, ymm0, ymm2
2282         vpxor   ymm1, ymm1, ymm3
2283         mov     eax, r13d
2284         cmp     rdx, r15
2285         jne     2b
2286         vmovdqu xmmword ptr [rbx], xmm0
2287         vmovdqu xmmword ptr [rbx+0x10], xmm1
2288         vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2289         vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2290         vmovdqa xmm0, xmmword ptr [rsp]
2291         vmovdqa xmm2, xmmword ptr [rsp+0x4*0x10]
2292         vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+0x8]
2293         vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+0x48]
2294         vmovdqa xmmword ptr [rsp], xmm0
2295         vmovdqa xmmword ptr [rsp+0x4*0x10], xmm2
2296         add     rbx, 64
2297         add     rdi, 16
2298         sub     rsi, 2
2300         test    esi, 0x1
2301         je      4b
2302         vmovdqu xmm0, xmmword ptr [rcx]
2303         vmovdqu xmm1, xmmword ptr [rcx+0x10]
2304         vmovd   xmm14, dword ptr [rsp]
2305         vpinsrd xmm14, xmm14, dword ptr [rsp+0x40], 1
2306         vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2307         vmovdqa xmm15, xmmword ptr [BLAKE3_IV+rip]
2308         mov     r8, qword ptr [rdi]
2309         movzx   eax, byte ptr [rbp+0x40]
2310         or      eax, r13d
2311         xor     edx, edx
2312 .p2align 5
2314         mov     r14d, eax
2315         or      eax, r12d
2316         add     rdx, 64
2317         cmp     rdx, r15
2318         cmovne  eax, r14d
2319         vpinsrd xmm3, xmm14, eax, 3
2320         vmovdqa xmm2, xmm15
2321         vmovups xmm8, xmmword ptr [r8+rdx-0x40]
2322         vmovups xmm9, xmmword ptr [r8+rdx-0x30]
2323         vshufps xmm4, xmm8, xmm9, 136
2324         vshufps xmm5, xmm8, xmm9, 221
2325         vmovups xmm8, xmmword ptr [r8+rdx-0x20]
2326         vmovups xmm9, xmmword ptr [r8+rdx-0x10]
2327         vshufps xmm6, xmm8, xmm9, 136
2328         vshufps xmm7, xmm8, xmm9, 221
2329         vpshufd xmm6, xmm6, 0x93
2330         vpshufd xmm7, xmm7, 0x93
2331         mov     al, 7
2333         vpaddd  xmm0, xmm0, xmm4
2334         vpaddd  xmm0, xmm0, xmm1
2335         vpxord  xmm3, xmm3, xmm0
2336         vprord  xmm3, xmm3, 16
2337         vpaddd  xmm2, xmm2, xmm3
2338         vpxord  xmm1, xmm1, xmm2
2339         vprord  xmm1, xmm1, 12
2340         vpaddd  xmm0, xmm0, xmm5
2341         vpaddd  xmm0, xmm0, xmm1
2342         vpxord  xmm3, xmm3, xmm0
2343         vprord  xmm3, xmm3, 8
2344         vpaddd  xmm2, xmm2, xmm3
2345         vpxord  xmm1, xmm1, xmm2
2346         vprord  xmm1, xmm1, 7
2347         vpshufd xmm0, xmm0, 0x93
2348         vpshufd xmm3, xmm3, 0x4E
2349         vpshufd xmm2, xmm2, 0x39
2350         vpaddd  xmm0, xmm0, xmm6
2351         vpaddd  xmm0, xmm0, xmm1
2352         vpxord  xmm3, xmm3, xmm0
2353         vprord  xmm3, xmm3, 16
2354         vpaddd  xmm2, xmm2, xmm3
2355         vpxord  xmm1, xmm1, xmm2
2356         vprord  xmm1, xmm1, 12
2357         vpaddd  xmm0, xmm0, xmm7
2358         vpaddd  xmm0, xmm0, xmm1
2359         vpxord  xmm3, xmm3, xmm0
2360         vprord  xmm3, xmm3, 8
2361         vpaddd  xmm2, xmm2, xmm3
2362         vpxord  xmm1, xmm1, xmm2
2363         vprord  xmm1, xmm1, 7
2364         vpshufd xmm0, xmm0, 0x39
2365         vpshufd xmm3, xmm3, 0x4E
2366         vpshufd xmm2, xmm2, 0x93
2367         dec     al
2368         jz      9f
2369         vshufps xmm8, xmm4, xmm5, 214
2370         vpshufd xmm9, xmm4, 0x0F
2371         vpshufd xmm4, xmm8, 0x39
2372         vshufps xmm8, xmm6, xmm7, 250
2373         vpblendd xmm9, xmm9, xmm8, 0xAA
2374         vpunpcklqdq xmm8, xmm7, xmm5
2375         vpblendd xmm8, xmm8, xmm6, 0x88
2376         vpshufd xmm8, xmm8, 0x78
2377         vpunpckhdq xmm5, xmm5, xmm7
2378         vpunpckldq xmm6, xmm6, xmm5
2379         vpshufd xmm7, xmm6, 0x1E
2380         vmovdqa xmm5, xmm9
2381         vmovdqa xmm6, xmm8
2382         jmp     9b
2384         vpxor   xmm0, xmm0, xmm2
2385         vpxor   xmm1, xmm1, xmm3
2386         mov     eax, r13d
2387         cmp     rdx, r15
2388         jne     2b
2389         vmovdqu xmmword ptr [rbx], xmm0
2390         vmovdqu xmmword ptr [rbx+0x10], xmm1
2391         jmp     4b
2392 SET_SIZE(zfs_blake3_hash_many_avx512)
2394 ENTRY_ALIGN(zfs_blake3_compress_in_place_avx512, 64)
2395         ENDBR
2396         vmovdqu xmm0, xmmword ptr [rdi]
2397         vmovdqu xmm1, xmmword ptr [rdi+0x10]
2398         movzx   eax, r8b
2399         movzx   edx, dl
2400         shl     rax, 32
2401         add     rdx, rax
2402         vmovq   xmm3, rcx
2403         vmovq   xmm4, rdx
2404         vpunpcklqdq xmm3, xmm3, xmm4
2405         vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2406         vmovups xmm8, xmmword ptr [rsi]
2407         vmovups xmm9, xmmword ptr [rsi+0x10]
2408         vshufps xmm4, xmm8, xmm9, 136
2409         vshufps xmm5, xmm8, xmm9, 221
2410         vmovups xmm8, xmmword ptr [rsi+0x20]
2411         vmovups xmm9, xmmword ptr [rsi+0x30]
2412         vshufps xmm6, xmm8, xmm9, 136
2413         vshufps xmm7, xmm8, xmm9, 221
2414         vpshufd xmm6, xmm6, 0x93
2415         vpshufd xmm7, xmm7, 0x93
2416         mov     al, 7
2418         vpaddd  xmm0, xmm0, xmm4
2419         vpaddd  xmm0, xmm0, xmm1
2420         vpxord  xmm3, xmm3, xmm0
2421         vprord  xmm3, xmm3, 16
2422         vpaddd  xmm2, xmm2, xmm3
2423         vpxord  xmm1, xmm1, xmm2
2424         vprord  xmm1, xmm1, 12
2425         vpaddd  xmm0, xmm0, xmm5
2426         vpaddd  xmm0, xmm0, xmm1
2427         vpxord  xmm3, xmm3, xmm0
2428         vprord  xmm3, xmm3, 8
2429         vpaddd  xmm2, xmm2, xmm3
2430         vpxord  xmm1, xmm1, xmm2
2431         vprord  xmm1, xmm1, 7
2432         vpshufd xmm0, xmm0, 0x93
2433         vpshufd xmm3, xmm3, 0x4E
2434         vpshufd xmm2, xmm2, 0x39
2435         vpaddd  xmm0, xmm0, xmm6
2436         vpaddd  xmm0, xmm0, xmm1
2437         vpxord  xmm3, xmm3, xmm0
2438         vprord  xmm3, xmm3, 16
2439         vpaddd  xmm2, xmm2, xmm3
2440         vpxord  xmm1, xmm1, xmm2
2441         vprord  xmm1, xmm1, 12
2442         vpaddd  xmm0, xmm0, xmm7
2443         vpaddd  xmm0, xmm0, xmm1
2444         vpxord  xmm3, xmm3, xmm0
2445         vprord  xmm3, xmm3, 8
2446         vpaddd  xmm2, xmm2, xmm3
2447         vpxord  xmm1, xmm1, xmm2
2448         vprord  xmm1, xmm1, 7
2449         vpshufd xmm0, xmm0, 0x39
2450         vpshufd xmm3, xmm3, 0x4E
2451         vpshufd xmm2, xmm2, 0x93
2452         dec     al
2453         jz      9f
2454         vshufps xmm8, xmm4, xmm5, 214
2455         vpshufd xmm9, xmm4, 0x0F
2456         vpshufd xmm4, xmm8, 0x39
2457         vshufps xmm8, xmm6, xmm7, 250
2458         vpblendd xmm9, xmm9, xmm8, 0xAA
2459         vpunpcklqdq xmm8, xmm7, xmm5
2460         vpblendd xmm8, xmm8, xmm6, 0x88
2461         vpshufd xmm8, xmm8, 0x78
2462         vpunpckhdq xmm5, xmm5, xmm7
2463         vpunpckldq xmm6, xmm6, xmm5
2464         vpshufd xmm7, xmm6, 0x1E
2465         vmovdqa xmm5, xmm9
2466         vmovdqa xmm6, xmm8
2467         jmp     9b
2469         vpxor   xmm0, xmm0, xmm2
2470         vpxor   xmm1, xmm1, xmm3
2471         vmovdqu xmmword ptr [rdi], xmm0
2472         vmovdqu xmmword ptr [rdi+0x10], xmm1
2473         RET
2474 SET_SIZE(zfs_blake3_compress_in_place_avx512)
2476 ENTRY_ALIGN(zfs_blake3_compress_xof_avx512, 64)
2477         ENDBR
2478         vmovdqu xmm0, xmmword ptr [rdi]
2479         vmovdqu xmm1, xmmword ptr [rdi+0x10]
2480         movzx   eax, r8b
2481         movzx   edx, dl
2482         shl     rax, 32
2483         add     rdx, rax
2484         vmovq   xmm3, rcx
2485         vmovq   xmm4, rdx
2486         vpunpcklqdq xmm3, xmm3, xmm4
2487         vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2488         vmovups xmm8, xmmword ptr [rsi]
2489         vmovups xmm9, xmmword ptr [rsi+0x10]
2490         vshufps xmm4, xmm8, xmm9, 136
2491         vshufps xmm5, xmm8, xmm9, 221
2492         vmovups xmm8, xmmword ptr [rsi+0x20]
2493         vmovups xmm9, xmmword ptr [rsi+0x30]
2494         vshufps xmm6, xmm8, xmm9, 136
2495         vshufps xmm7, xmm8, xmm9, 221
2496         vpshufd xmm6, xmm6, 0x93
2497         vpshufd xmm7, xmm7, 0x93
2498         mov     al, 7
2500         vpaddd  xmm0, xmm0, xmm4
2501         vpaddd  xmm0, xmm0, xmm1
2502         vpxord  xmm3, xmm3, xmm0
2503         vprord  xmm3, xmm3, 16
2504         vpaddd  xmm2, xmm2, xmm3
2505         vpxord  xmm1, xmm1, xmm2
2506         vprord  xmm1, xmm1, 12
2507         vpaddd  xmm0, xmm0, xmm5
2508         vpaddd  xmm0, xmm0, xmm1
2509         vpxord  xmm3, xmm3, xmm0
2510         vprord  xmm3, xmm3, 8
2511         vpaddd  xmm2, xmm2, xmm3
2512         vpxord  xmm1, xmm1, xmm2
2513         vprord  xmm1, xmm1, 7
2514         vpshufd xmm0, xmm0, 0x93
2515         vpshufd xmm3, xmm3, 0x4E
2516         vpshufd xmm2, xmm2, 0x39
2517         vpaddd  xmm0, xmm0, xmm6
2518         vpaddd  xmm0, xmm0, xmm1
2519         vpxord  xmm3, xmm3, xmm0
2520         vprord  xmm3, xmm3, 16
2521         vpaddd  xmm2, xmm2, xmm3
2522         vpxord  xmm1, xmm1, xmm2
2523         vprord  xmm1, xmm1, 12
2524         vpaddd  xmm0, xmm0, xmm7
2525         vpaddd  xmm0, xmm0, xmm1
2526         vpxord  xmm3, xmm3, xmm0
2527         vprord  xmm3, xmm3, 8
2528         vpaddd  xmm2, xmm2, xmm3
2529         vpxord  xmm1, xmm1, xmm2
2530         vprord  xmm1, xmm1, 7
2531         vpshufd xmm0, xmm0, 0x39
2532         vpshufd xmm3, xmm3, 0x4E
2533         vpshufd xmm2, xmm2, 0x93
2534         dec     al
2535         jz      9f
2536         vshufps xmm8, xmm4, xmm5, 214
2537         vpshufd xmm9, xmm4, 0x0F
2538         vpshufd xmm4, xmm8, 0x39
2539         vshufps xmm8, xmm6, xmm7, 250
2540         vpblendd xmm9, xmm9, xmm8, 0xAA
2541         vpunpcklqdq xmm8, xmm7, xmm5
2542         vpblendd xmm8, xmm8, xmm6, 0x88
2543         vpshufd xmm8, xmm8, 0x78
2544         vpunpckhdq xmm5, xmm5, xmm7
2545         vpunpckldq xmm6, xmm6, xmm5
2546         vpshufd xmm7, xmm6, 0x1E
2547         vmovdqa xmm5, xmm9
2548         vmovdqa xmm6, xmm8
2549         jmp     9b
2551         vpxor   xmm0, xmm0, xmm2
2552         vpxor   xmm1, xmm1, xmm3
2553         vpxor   xmm2, xmm2, [rdi]
2554         vpxor   xmm3, xmm3, [rdi+0x10]
2555         vmovdqu xmmword ptr [r9], xmm0
2556         vmovdqu xmmword ptr [r9+0x10], xmm1
2557         vmovdqu xmmword ptr [r9+0x20], xmm2
2558         vmovdqu xmmword ptr [r9+0x30], xmm3
2559         RET
2560 SET_SIZE(zfs_blake3_compress_xof_avx512)
2562 SECTION_STATIC
2564 .p2align  6
2565 INDEX0:
2566         .long    0,  1,  2,  3, 16, 17, 18, 19
2567         .long    8,  9, 10, 11, 24, 25, 26, 27
2568 INDEX1:
2569         .long    4,  5,  6,  7, 20, 21, 22, 23
2570         .long   12, 13, 14, 15, 28, 29, 30, 31
2571 ADD0:
2572         .long    0,  1,  2,  3,  4,  5,  6,  7
2573         .long    8,  9, 10, 11, 12, 13, 14, 15
2574 ADD1:   .long    1
2576 ADD16:  .long   16
2577 BLAKE3_BLOCK_LEN:
2578         .long   64
2579 .p2align 6
2580 BLAKE3_IV:
2581 BLAKE3_IV_0:
2582         .long   0x6A09E667
2583 BLAKE3_IV_1:
2584         .long   0xBB67AE85
2585 BLAKE3_IV_2:
2586         .long   0x3C6EF372
2587 BLAKE3_IV_3:
2588         .long   0xA54FF53A
2590 #endif  /* HAVE_AVX512 */
2592 #ifdef __ELF__
2593 .section .note.GNU-stack,"",%progbits
2594 #endif