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