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