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