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