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