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