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