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