1public _blake3_hash_many_avx2
2public blake3_hash_many_avx2
3
4_TEXT   SEGMENT ALIGN(16) 'CODE'
5
6ALIGN   16
7blake3_hash_many_avx2 PROC
8_blake3_hash_many_avx2 PROC
9        push    r15
10        push    r14
11        push    r13
12        push    r12
13        push    rsi
14        push    rdi
15        push    rbx
16        push    rbp
17        mov     rbp, rsp
18        sub     rsp, 880
19        and     rsp, 0FFFFFFFFFFFFFFC0H
20        vmovdqa xmmword ptr [rsp+2D0H], xmm6
21        vmovdqa xmmword ptr [rsp+2E0H], xmm7
22        vmovdqa xmmword ptr [rsp+2F0H], xmm8
23        vmovdqa xmmword ptr [rsp+300H], xmm9
24        vmovdqa xmmword ptr [rsp+310H], xmm10
25        vmovdqa xmmword ptr [rsp+320H], xmm11
26        vmovdqa xmmword ptr [rsp+330H], xmm12
27        vmovdqa xmmword ptr [rsp+340H], xmm13
28        vmovdqa xmmword ptr [rsp+350H], xmm14
29        vmovdqa xmmword ptr [rsp+360H], xmm15
30        mov     rdi, rcx
31        mov     rsi, rdx
32        mov     rdx, r8
33        mov     rcx, r9
34        mov     r8, qword ptr [rbp+68H]
35        movzx   r9, byte ptr [rbp+70H]
36        neg     r9d
37        vmovd   xmm0, r9d
38        vpbroadcastd ymm0, xmm0
39        vmovdqa ymmword ptr [rsp+260H], ymm0
40        vpand   ymm1, ymm0, ymmword ptr [ADD0]
41        vpand   ymm2, ymm0, ymmword ptr [ADD1]
42        vmovdqa ymmword ptr [rsp+2A0H], ymm2
43        vmovd   xmm2, r8d
44        vpbroadcastd ymm2, xmm2
45        vpaddd  ymm2, ymm2, ymm1
46        vmovdqa ymmword ptr [rsp+220H], ymm2
47        vpxor   ymm1, ymm1, ymmword ptr [CMP_MSB_MASK]
48        vpxor   ymm2, ymm2, ymmword ptr [CMP_MSB_MASK]
49        vpcmpgtd ymm2, ymm1, ymm2
50        shr     r8, 32
51        vmovd   xmm3, r8d
52        vpbroadcastd ymm3, xmm3
53        vpsubd  ymm3, ymm3, ymm2
54        vmovdqa ymmword ptr [rsp+240H], ymm3
55        shl     rdx, 6
56        mov     qword ptr [rsp+2C0H], rdx
57        cmp     rsi, 8
58        jc      final7blocks
59outerloop8:
60        vpbroadcastd ymm0, dword ptr [rcx]
61        vpbroadcastd ymm1, dword ptr [rcx+4H]
62        vpbroadcastd ymm2, dword ptr [rcx+8H]
63        vpbroadcastd ymm3, dword ptr [rcx+0CH]
64        vpbroadcastd ymm4, dword ptr [rcx+10H]
65        vpbroadcastd ymm5, dword ptr [rcx+14H]
66        vpbroadcastd ymm6, dword ptr [rcx+18H]
67        vpbroadcastd ymm7, dword ptr [rcx+1CH]
68        mov     r8, qword ptr [rdi]
69        mov     r9, qword ptr [rdi+8H]
70        mov     r10, qword ptr [rdi+10H]
71        mov     r11, qword ptr [rdi+18H]
72        mov     r12, qword ptr [rdi+20H]
73        mov     r13, qword ptr [rdi+28H]
74        mov     r14, qword ptr [rdi+30H]
75        mov     r15, qword ptr [rdi+38H]
76        movzx   eax, byte ptr [rbp+78H]
77        movzx   ebx, byte ptr [rbp+80H]
78        or      eax, ebx
79        xor     edx, edx
80ALIGN   16
81innerloop8:
82        movzx   ebx, byte ptr [rbp+88H]
83        or      ebx, eax
84        add     rdx, 64
85        cmp     rdx, qword ptr [rsp+2C0H]
86        cmove   eax, ebx
87        mov     dword ptr [rsp+200H], eax
88        vmovups xmm8, xmmword ptr [r8+rdx-40H]
89        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-40H], 01H
90        vmovups xmm9, xmmword ptr [r9+rdx-40H]
91        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-40H], 01H
92        vunpcklpd ymm12, ymm8, ymm9
93        vunpckhpd ymm13, ymm8, ymm9
94        vmovups xmm10, xmmword ptr [r10+rdx-40H]
95        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-40H], 01H
96        vmovups xmm11, xmmword ptr [r11+rdx-40H]
97        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-40H], 01H
98        vunpcklpd ymm14, ymm10, ymm11
99        vunpckhpd ymm15, ymm10, ymm11
100        vshufps ymm8, ymm12, ymm14, 136
101        vmovaps ymmword ptr [rsp], ymm8
102        vshufps ymm9, ymm12, ymm14, 221
103        vmovaps ymmword ptr [rsp+20H], ymm9
104        vshufps ymm10, ymm13, ymm15, 136
105        vmovaps ymmword ptr [rsp+40H], ymm10
106        vshufps ymm11, ymm13, ymm15, 221
107        vmovaps ymmword ptr [rsp+60H], ymm11
108        vmovups xmm8, xmmword ptr [r8+rdx-30H]
109        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-30H], 01H
110        vmovups xmm9, xmmword ptr [r9+rdx-30H]
111        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-30H], 01H
112        vunpcklpd ymm12, ymm8, ymm9
113        vunpckhpd ymm13, ymm8, ymm9
114        vmovups xmm10, xmmword ptr [r10+rdx-30H]
115        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-30H], 01H
116        vmovups xmm11, xmmword ptr [r11+rdx-30H]
117        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-30H], 01H
118        vunpcklpd ymm14, ymm10, ymm11
119        vunpckhpd ymm15, ymm10, ymm11
120        vshufps ymm8, ymm12, ymm14, 136
121        vmovaps ymmword ptr [rsp+80H], ymm8
122        vshufps ymm9, ymm12, ymm14, 221
123        vmovaps ymmword ptr [rsp+0A0H], ymm9
124        vshufps ymm10, ymm13, ymm15, 136
125        vmovaps ymmword ptr [rsp+0C0H], ymm10
126        vshufps ymm11, ymm13, ymm15, 221
127        vmovaps ymmword ptr [rsp+0E0H], ymm11
128        vmovups xmm8, xmmword ptr [r8+rdx-20H]
129        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-20H], 01H
130        vmovups xmm9, xmmword ptr [r9+rdx-20H]
131        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-20H], 01H
132        vunpcklpd ymm12, ymm8, ymm9
133        vunpckhpd ymm13, ymm8, ymm9
134        vmovups xmm10, xmmword ptr [r10+rdx-20H]
135        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-20H], 01H
136        vmovups xmm11, xmmword ptr [r11+rdx-20H]
137        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-20H], 01H
138        vunpcklpd ymm14, ymm10, ymm11
139        vunpckhpd ymm15, ymm10, ymm11
140        vshufps ymm8, ymm12, ymm14, 136
141        vmovaps ymmword ptr [rsp+100H], ymm8
142        vshufps ymm9, ymm12, ymm14, 221
143        vmovaps ymmword ptr [rsp+120H], ymm9
144        vshufps ymm10, ymm13, ymm15, 136
145        vmovaps ymmword ptr [rsp+140H], ymm10
146        vshufps ymm11, ymm13, ymm15, 221
147        vmovaps ymmword ptr [rsp+160H], ymm11
148        vmovups xmm8, xmmword ptr [r8+rdx-10H]
149        vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-10H], 01H
150        vmovups xmm9, xmmword ptr [r9+rdx-10H]
151        vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-10H], 01H
152        vunpcklpd ymm12, ymm8, ymm9
153        vunpckhpd ymm13, ymm8, ymm9
154        vmovups xmm10, xmmword ptr [r10+rdx-10H]
155        vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-10H], 01H
156        vmovups xmm11, xmmword ptr [r11+rdx-10H]
157        vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-10H], 01H
158        vunpcklpd ymm14, ymm10, ymm11
159        vunpckhpd ymm15, ymm10, ymm11
160        vshufps ymm8, ymm12, ymm14, 136
161        vmovaps ymmword ptr [rsp+180H], ymm8
162        vshufps ymm9, ymm12, ymm14, 221
163        vmovaps ymmword ptr [rsp+1A0H], ymm9
164        vshufps ymm10, ymm13, ymm15, 136
165        vmovaps ymmword ptr [rsp+1C0H], ymm10
166        vshufps ymm11, ymm13, ymm15, 221
167        vmovaps ymmword ptr [rsp+1E0H], ymm11
168        vpbroadcastd ymm15, dword ptr [rsp+200H]
169        prefetcht0 byte ptr [r8+rdx+80H]
170        prefetcht0 byte ptr [r12+rdx+80H]
171        prefetcht0 byte ptr [r9+rdx+80H]
172        prefetcht0 byte ptr [r13+rdx+80H]
173        prefetcht0 byte ptr [r10+rdx+80H]
174        prefetcht0 byte ptr [r14+rdx+80H]
175        prefetcht0 byte ptr [r11+rdx+80H]
176        prefetcht0 byte ptr [r15+rdx+80H]
177        vpaddd  ymm0, ymm0, ymmword ptr [rsp]
178        vpaddd  ymm1, ymm1, ymmword ptr [rsp+40H]
179        vpaddd  ymm2, ymm2, ymmword ptr [rsp+80H]
180        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0C0H]
181        vpaddd  ymm0, ymm0, ymm4
182        vpaddd  ymm1, ymm1, ymm5
183        vpaddd  ymm2, ymm2, ymm6
184        vpaddd  ymm3, ymm3, ymm7
185        vpxor   ymm12, ymm0, ymmword ptr [rsp+220H]
186        vpxor   ymm13, ymm1, ymmword ptr [rsp+240H]
187        vpxor   ymm14, ymm2, ymmword ptr [BLAKE3_BLOCK_LEN]
188        vpxor   ymm15, ymm3, ymm15
189        vbroadcasti128 ymm8, xmmword ptr [ROT16]
190        vpshufb ymm12, ymm12, ymm8
191        vpshufb ymm13, ymm13, ymm8
192        vpshufb ymm14, ymm14, ymm8
193        vpshufb ymm15, ymm15, ymm8
194        vpaddd  ymm8, ymm12, ymmword ptr [BLAKE3_IV_0]
195        vpaddd  ymm9, ymm13, ymmword ptr [BLAKE3_IV_1]
196        vpaddd  ymm10, ymm14, ymmword ptr [BLAKE3_IV_2]
197        vpaddd  ymm11, ymm15, ymmword ptr [BLAKE3_IV_3]
198        vpxor   ymm4, ymm4, ymm8
199        vpxor   ymm5, ymm5, ymm9
200        vpxor   ymm6, ymm6, ymm10
201        vpxor   ymm7, ymm7, ymm11
202        vmovdqa ymmword ptr [rsp+200H], ymm8
203        vpsrld  ymm8, ymm4, 12
204        vpslld  ymm4, ymm4, 20
205        vpor    ymm4, ymm4, ymm8
206        vpsrld  ymm8, ymm5, 12
207        vpslld  ymm5, ymm5, 20
208        vpor    ymm5, ymm5, ymm8
209        vpsrld  ymm8, ymm6, 12
210        vpslld  ymm6, ymm6, 20
211        vpor    ymm6, ymm6, ymm8
212        vpsrld  ymm8, ymm7, 12
213        vpslld  ymm7, ymm7, 20
214        vpor    ymm7, ymm7, ymm8
215        vpaddd  ymm0, ymm0, ymmword ptr [rsp+20H]
216        vpaddd  ymm1, ymm1, ymmword ptr [rsp+60H]
217        vpaddd  ymm2, ymm2, ymmword ptr [rsp+0A0H]
218        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0E0H]
219        vpaddd  ymm0, ymm0, ymm4
220        vpaddd  ymm1, ymm1, ymm5
221        vpaddd  ymm2, ymm2, ymm6
222        vpaddd  ymm3, ymm3, ymm7
223        vpxor   ymm12, ymm12, ymm0
224        vpxor   ymm13, ymm13, ymm1
225        vpxor   ymm14, ymm14, ymm2
226        vpxor   ymm15, ymm15, ymm3
227        vbroadcasti128 ymm8, xmmword ptr [ROT8]
228        vpshufb ymm12, ymm12, ymm8
229        vpshufb ymm13, ymm13, ymm8
230        vpshufb ymm14, ymm14, ymm8
231        vpshufb ymm15, ymm15, ymm8
232        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
233        vpaddd  ymm9, ymm9, ymm13
234        vpaddd  ymm10, ymm10, ymm14
235        vpaddd  ymm11, ymm11, ymm15
236        vpxor   ymm4, ymm4, ymm8
237        vpxor   ymm5, ymm5, ymm9
238        vpxor   ymm6, ymm6, ymm10
239        vpxor   ymm7, ymm7, ymm11
240        vmovdqa ymmword ptr [rsp+200H], ymm8
241        vpsrld  ymm8, ymm4, 7
242        vpslld  ymm4, ymm4, 25
243        vpor    ymm4, ymm4, ymm8
244        vpsrld  ymm8, ymm5, 7
245        vpslld  ymm5, ymm5, 25
246        vpor    ymm5, ymm5, ymm8
247        vpsrld  ymm8, ymm6, 7
248        vpslld  ymm6, ymm6, 25
249        vpor    ymm6, ymm6, ymm8
250        vpsrld  ymm8, ymm7, 7
251        vpslld  ymm7, ymm7, 25
252        vpor    ymm7, ymm7, ymm8
253        vpaddd  ymm0, ymm0, ymmword ptr [rsp+100H]
254        vpaddd  ymm1, ymm1, ymmword ptr [rsp+140H]
255        vpaddd  ymm2, ymm2, ymmword ptr [rsp+180H]
256        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1C0H]
257        vpaddd  ymm0, ymm0, ymm5
258        vpaddd  ymm1, ymm1, ymm6
259        vpaddd  ymm2, ymm2, ymm7
260        vpaddd  ymm3, ymm3, ymm4
261        vpxor   ymm15, ymm15, ymm0
262        vpxor   ymm12, ymm12, ymm1
263        vpxor   ymm13, ymm13, ymm2
264        vpxor   ymm14, ymm14, ymm3
265        vbroadcasti128 ymm8, xmmword ptr [ROT16]
266        vpshufb ymm15, ymm15, ymm8
267        vpshufb ymm12, ymm12, ymm8
268        vpshufb ymm13, ymm13, ymm8
269        vpshufb ymm14, ymm14, ymm8
270        vpaddd  ymm10, ymm10, ymm15
271        vpaddd  ymm11, ymm11, ymm12
272        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
273        vpaddd  ymm9, ymm9, ymm14
274        vpxor   ymm5, ymm5, ymm10
275        vpxor   ymm6, ymm6, ymm11
276        vpxor   ymm7, ymm7, ymm8
277        vpxor   ymm4, ymm4, ymm9
278        vmovdqa ymmword ptr [rsp+200H], ymm8
279        vpsrld  ymm8, ymm5, 12
280        vpslld  ymm5, ymm5, 20
281        vpor    ymm5, ymm5, ymm8
282        vpsrld  ymm8, ymm6, 12
283        vpslld  ymm6, ymm6, 20
284        vpor    ymm6, ymm6, ymm8
285        vpsrld  ymm8, ymm7, 12
286        vpslld  ymm7, ymm7, 20
287        vpor    ymm7, ymm7, ymm8
288        vpsrld  ymm8, ymm4, 12
289        vpslld  ymm4, ymm4, 20
290        vpor    ymm4, ymm4, ymm8
291        vpaddd  ymm0, ymm0, ymmword ptr [rsp+120H]
292        vpaddd  ymm1, ymm1, ymmword ptr [rsp+160H]
293        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1A0H]
294        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1E0H]
295        vpaddd  ymm0, ymm0, ymm5
296        vpaddd  ymm1, ymm1, ymm6
297        vpaddd  ymm2, ymm2, ymm7
298        vpaddd  ymm3, ymm3, ymm4
299        vpxor   ymm15, ymm15, ymm0
300        vpxor   ymm12, ymm12, ymm1
301        vpxor   ymm13, ymm13, ymm2
302        vpxor   ymm14, ymm14, ymm3
303        vbroadcasti128 ymm8, xmmword ptr [ROT8]
304        vpshufb ymm15, ymm15, ymm8
305        vpshufb ymm12, ymm12, ymm8
306        vpshufb ymm13, ymm13, ymm8
307        vpshufb ymm14, ymm14, ymm8
308        vpaddd  ymm10, ymm10, ymm15
309        vpaddd  ymm11, ymm11, ymm12
310        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
311        vpaddd  ymm9, ymm9, ymm14
312        vpxor   ymm5, ymm5, ymm10
313        vpxor   ymm6, ymm6, ymm11
314        vpxor   ymm7, ymm7, ymm8
315        vpxor   ymm4, ymm4, ymm9
316        vmovdqa ymmword ptr [rsp+200H], ymm8
317        vpsrld  ymm8, ymm5, 7
318        vpslld  ymm5, ymm5, 25
319        vpor    ymm5, ymm5, ymm8
320        vpsrld  ymm8, ymm6, 7
321        vpslld  ymm6, ymm6, 25
322        vpor    ymm6, ymm6, ymm8
323        vpsrld  ymm8, ymm7, 7
324        vpslld  ymm7, ymm7, 25
325        vpor    ymm7, ymm7, ymm8
326        vpsrld  ymm8, ymm4, 7
327        vpslld  ymm4, ymm4, 25
328        vpor    ymm4, ymm4, ymm8
329        vpaddd  ymm0, ymm0, ymmword ptr [rsp+40H]
330        vpaddd  ymm1, ymm1, ymmword ptr [rsp+60H]
331        vpaddd  ymm2, ymm2, ymmword ptr [rsp+0E0H]
332        vpaddd  ymm3, ymm3, ymmword ptr [rsp+80H]
333        vpaddd  ymm0, ymm0, ymm4
334        vpaddd  ymm1, ymm1, ymm5
335        vpaddd  ymm2, ymm2, ymm6
336        vpaddd  ymm3, ymm3, ymm7
337        vpxor   ymm12, ymm12, ymm0
338        vpxor   ymm13, ymm13, ymm1
339        vpxor   ymm14, ymm14, ymm2
340        vpxor   ymm15, ymm15, ymm3
341        vbroadcasti128 ymm8, xmmword ptr [ROT16]
342        vpshufb ymm12, ymm12, ymm8
343        vpshufb ymm13, ymm13, ymm8
344        vpshufb ymm14, ymm14, ymm8
345        vpshufb ymm15, ymm15, ymm8
346        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
347        vpaddd  ymm9, ymm9, ymm13
348        vpaddd  ymm10, ymm10, ymm14
349        vpaddd  ymm11, ymm11, ymm15
350        vpxor   ymm4, ymm4, ymm8
351        vpxor   ymm5, ymm5, ymm9
352        vpxor   ymm6, ymm6, ymm10
353        vpxor   ymm7, ymm7, ymm11
354        vmovdqa ymmword ptr [rsp+200H], ymm8
355        vpsrld  ymm8, ymm4, 12
356        vpslld  ymm4, ymm4, 20
357        vpor    ymm4, ymm4, ymm8
358        vpsrld  ymm8, ymm5, 12
359        vpslld  ymm5, ymm5, 20
360        vpor    ymm5, ymm5, ymm8
361        vpsrld  ymm8, ymm6, 12
362        vpslld  ymm6, ymm6, 20
363        vpor    ymm6, ymm6, ymm8
364        vpsrld  ymm8, ymm7, 12
365        vpslld  ymm7, ymm7, 20
366        vpor    ymm7, ymm7, ymm8
367        vpaddd  ymm0, ymm0, ymmword ptr [rsp+0C0H]
368        vpaddd  ymm1, ymm1, ymmword ptr [rsp+140H]
369        vpaddd  ymm2, ymm2, ymmword ptr [rsp]
370        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1A0H]
371        vpaddd  ymm0, ymm0, ymm4
372        vpaddd  ymm1, ymm1, ymm5
373        vpaddd  ymm2, ymm2, ymm6
374        vpaddd  ymm3, ymm3, ymm7
375        vpxor   ymm12, ymm12, ymm0
376        vpxor   ymm13, ymm13, ymm1
377        vpxor   ymm14, ymm14, ymm2
378        vpxor   ymm15, ymm15, ymm3
379        vbroadcasti128 ymm8, xmmword ptr [ROT8]
380        vpshufb ymm12, ymm12, ymm8
381        vpshufb ymm13, ymm13, ymm8
382        vpshufb ymm14, ymm14, ymm8
383        vpshufb ymm15, ymm15, ymm8
384        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
385        vpaddd  ymm9, ymm9, ymm13
386        vpaddd  ymm10, ymm10, ymm14
387        vpaddd  ymm11, ymm11, ymm15
388        vpxor   ymm4, ymm4, ymm8
389        vpxor   ymm5, ymm5, ymm9
390        vpxor   ymm6, ymm6, ymm10
391        vpxor   ymm7, ymm7, ymm11
392        vmovdqa ymmword ptr [rsp+200H], ymm8
393        vpsrld  ymm8, ymm4, 7
394        vpslld  ymm4, ymm4, 25
395        vpor    ymm4, ymm4, ymm8
396        vpsrld  ymm8, ymm5, 7
397        vpslld  ymm5, ymm5, 25
398        vpor    ymm5, ymm5, ymm8
399        vpsrld  ymm8, ymm6, 7
400        vpslld  ymm6, ymm6, 25
401        vpor    ymm6, ymm6, ymm8
402        vpsrld  ymm8, ymm7, 7
403        vpslld  ymm7, ymm7, 25
404        vpor    ymm7, ymm7, ymm8
405        vpaddd  ymm0, ymm0, ymmword ptr [rsp+20H]
406        vpaddd  ymm1, ymm1, ymmword ptr [rsp+180H]
407        vpaddd  ymm2, ymm2, ymmword ptr [rsp+120H]
408        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1E0H]
409        vpaddd  ymm0, ymm0, ymm5
410        vpaddd  ymm1, ymm1, ymm6
411        vpaddd  ymm2, ymm2, ymm7
412        vpaddd  ymm3, ymm3, ymm4
413        vpxor   ymm15, ymm15, ymm0
414        vpxor   ymm12, ymm12, ymm1
415        vpxor   ymm13, ymm13, ymm2
416        vpxor   ymm14, ymm14, ymm3
417        vbroadcasti128 ymm8, xmmword ptr [ROT16]
418        vpshufb ymm15, ymm15, ymm8
419        vpshufb ymm12, ymm12, ymm8
420        vpshufb ymm13, ymm13, ymm8
421        vpshufb ymm14, ymm14, ymm8
422        vpaddd  ymm10, ymm10, ymm15
423        vpaddd  ymm11, ymm11, ymm12
424        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
425        vpaddd  ymm9, ymm9, ymm14
426        vpxor   ymm5, ymm5, ymm10
427        vpxor   ymm6, ymm6, ymm11
428        vpxor   ymm7, ymm7, ymm8
429        vpxor   ymm4, ymm4, ymm9
430        vmovdqa ymmword ptr [rsp+200H], ymm8
431        vpsrld  ymm8, ymm5, 12
432        vpslld  ymm5, ymm5, 20
433        vpor    ymm5, ymm5, ymm8
434        vpsrld  ymm8, ymm6, 12
435        vpslld  ymm6, ymm6, 20
436        vpor    ymm6, ymm6, ymm8
437        vpsrld  ymm8, ymm7, 12
438        vpslld  ymm7, ymm7, 20
439        vpor    ymm7, ymm7, ymm8
440        vpsrld  ymm8, ymm4, 12
441        vpslld  ymm4, ymm4, 20
442        vpor    ymm4, ymm4, ymm8
443        vpaddd  ymm0, ymm0, ymmword ptr [rsp+160H]
444        vpaddd  ymm1, ymm1, ymmword ptr [rsp+0A0H]
445        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1C0H]
446        vpaddd  ymm3, ymm3, ymmword ptr [rsp+100H]
447        vpaddd  ymm0, ymm0, ymm5
448        vpaddd  ymm1, ymm1, ymm6
449        vpaddd  ymm2, ymm2, ymm7
450        vpaddd  ymm3, ymm3, ymm4
451        vpxor   ymm15, ymm15, ymm0
452        vpxor   ymm12, ymm12, ymm1
453        vpxor   ymm13, ymm13, ymm2
454        vpxor   ymm14, ymm14, ymm3
455        vbroadcasti128 ymm8, xmmword ptr [ROT8]
456        vpshufb ymm15, ymm15, ymm8
457        vpshufb ymm12, ymm12, ymm8
458        vpshufb ymm13, ymm13, ymm8
459        vpshufb ymm14, ymm14, ymm8
460        vpaddd  ymm10, ymm10, ymm15
461        vpaddd  ymm11, ymm11, ymm12
462        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
463        vpaddd  ymm9, ymm9, ymm14
464        vpxor   ymm5, ymm5, ymm10
465        vpxor   ymm6, ymm6, ymm11
466        vpxor   ymm7, ymm7, ymm8
467        vpxor   ymm4, ymm4, ymm9
468        vmovdqa ymmword ptr [rsp+200H], ymm8
469        vpsrld  ymm8, ymm5, 7
470        vpslld  ymm5, ymm5, 25
471        vpor    ymm5, ymm5, ymm8
472        vpsrld  ymm8, ymm6, 7
473        vpslld  ymm6, ymm6, 25
474        vpor    ymm6, ymm6, ymm8
475        vpsrld  ymm8, ymm7, 7
476        vpslld  ymm7, ymm7, 25
477        vpor    ymm7, ymm7, ymm8
478        vpsrld  ymm8, ymm4, 7
479        vpslld  ymm4, ymm4, 25
480        vpor    ymm4, ymm4, ymm8
481        vpaddd  ymm0, ymm0, ymmword ptr [rsp+60H]
482        vpaddd  ymm1, ymm1, ymmword ptr [rsp+140H]
483        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1A0H]
484        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0E0H]
485        vpaddd  ymm0, ymm0, ymm4
486        vpaddd  ymm1, ymm1, ymm5
487        vpaddd  ymm2, ymm2, ymm6
488        vpaddd  ymm3, ymm3, ymm7
489        vpxor   ymm12, ymm12, ymm0
490        vpxor   ymm13, ymm13, ymm1
491        vpxor   ymm14, ymm14, ymm2
492        vpxor   ymm15, ymm15, ymm3
493        vbroadcasti128 ymm8, xmmword ptr [ROT16]
494        vpshufb ymm12, ymm12, ymm8
495        vpshufb ymm13, ymm13, ymm8
496        vpshufb ymm14, ymm14, ymm8
497        vpshufb ymm15, ymm15, ymm8
498        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
499        vpaddd  ymm9, ymm9, ymm13
500        vpaddd  ymm10, ymm10, ymm14
501        vpaddd  ymm11, ymm11, ymm15
502        vpxor   ymm4, ymm4, ymm8
503        vpxor   ymm5, ymm5, ymm9
504        vpxor   ymm6, ymm6, ymm10
505        vpxor   ymm7, ymm7, ymm11
506        vmovdqa ymmword ptr [rsp+200H], ymm8
507        vpsrld  ymm8, ymm4, 12
508        vpslld  ymm4, ymm4, 20
509        vpor    ymm4, ymm4, ymm8
510        vpsrld  ymm8, ymm5, 12
511        vpslld  ymm5, ymm5, 20
512        vpor    ymm5, ymm5, ymm8
513        vpsrld  ymm8, ymm6, 12
514        vpslld  ymm6, ymm6, 20
515        vpor    ymm6, ymm6, ymm8
516        vpsrld  ymm8, ymm7, 12
517        vpslld  ymm7, ymm7, 20
518        vpor    ymm7, ymm7, ymm8
519        vpaddd  ymm0, ymm0, ymmword ptr [rsp+80H]
520        vpaddd  ymm1, ymm1, ymmword ptr [rsp+180H]
521        vpaddd  ymm2, ymm2, ymmword ptr [rsp+40H]
522        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1C0H]
523        vpaddd  ymm0, ymm0, ymm4
524        vpaddd  ymm1, ymm1, ymm5
525        vpaddd  ymm2, ymm2, ymm6
526        vpaddd  ymm3, ymm3, ymm7
527        vpxor   ymm12, ymm12, ymm0
528        vpxor   ymm13, ymm13, ymm1
529        vpxor   ymm14, ymm14, ymm2
530        vpxor   ymm15, ymm15, ymm3
531        vbroadcasti128 ymm8, xmmword ptr [ROT8]
532        vpshufb ymm12, ymm12, ymm8
533        vpshufb ymm13, ymm13, ymm8
534        vpshufb ymm14, ymm14, ymm8
535        vpshufb ymm15, ymm15, ymm8
536        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
537        vpaddd  ymm9, ymm9, ymm13
538        vpaddd  ymm10, ymm10, ymm14
539        vpaddd  ymm11, ymm11, ymm15
540        vpxor   ymm4, ymm4, ymm8
541        vpxor   ymm5, ymm5, ymm9
542        vpxor   ymm6, ymm6, ymm10
543        vpxor   ymm7, ymm7, ymm11
544        vmovdqa ymmword ptr [rsp+200H], ymm8
545        vpsrld  ymm8, ymm4, 7
546        vpslld  ymm4, ymm4, 25
547        vpor    ymm4, ymm4, ymm8
548        vpsrld  ymm8, ymm5, 7
549        vpslld  ymm5, ymm5, 25
550        vpor    ymm5, ymm5, ymm8
551        vpsrld  ymm8, ymm6, 7
552        vpslld  ymm6, ymm6, 25
553        vpor    ymm6, ymm6, ymm8
554        vpsrld  ymm8, ymm7, 7
555        vpslld  ymm7, ymm7, 25
556        vpor    ymm7, ymm7, ymm8
557        vpaddd  ymm0, ymm0, ymmword ptr [rsp+0C0H]
558        vpaddd  ymm1, ymm1, ymmword ptr [rsp+120H]
559        vpaddd  ymm2, ymm2, ymmword ptr [rsp+160H]
560        vpaddd  ymm3, ymm3, ymmword ptr [rsp+100H]
561        vpaddd  ymm0, ymm0, ymm5
562        vpaddd  ymm1, ymm1, ymm6
563        vpaddd  ymm2, ymm2, ymm7
564        vpaddd  ymm3, ymm3, ymm4
565        vpxor   ymm15, ymm15, ymm0
566        vpxor   ymm12, ymm12, ymm1
567        vpxor   ymm13, ymm13, ymm2
568        vpxor   ymm14, ymm14, ymm3
569        vbroadcasti128 ymm8, xmmword ptr [ROT16]
570        vpshufb ymm15, ymm15, ymm8
571        vpshufb ymm12, ymm12, ymm8
572        vpshufb ymm13, ymm13, ymm8
573        vpshufb ymm14, ymm14, ymm8
574        vpaddd  ymm10, ymm10, ymm15
575        vpaddd  ymm11, ymm11, ymm12
576        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
577        vpaddd  ymm9, ymm9, ymm14
578        vpxor   ymm5, ymm5, ymm10
579        vpxor   ymm6, ymm6, ymm11
580        vpxor   ymm7, ymm7, ymm8
581        vpxor   ymm4, ymm4, ymm9
582        vmovdqa ymmword ptr [rsp+200H], ymm8
583        vpsrld  ymm8, ymm5, 12
584        vpslld  ymm5, ymm5, 20
585        vpor    ymm5, ymm5, ymm8
586        vpsrld  ymm8, ymm6, 12
587        vpslld  ymm6, ymm6, 20
588        vpor    ymm6, ymm6, ymm8
589        vpsrld  ymm8, ymm7, 12
590        vpslld  ymm7, ymm7, 20
591        vpor    ymm7, ymm7, ymm8
592        vpsrld  ymm8, ymm4, 12
593        vpslld  ymm4, ymm4, 20
594        vpor    ymm4, ymm4, ymm8
595        vpaddd  ymm0, ymm0, ymmword ptr [rsp+0A0H]
596        vpaddd  ymm1, ymm1, ymmword ptr [rsp]
597        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1E0H]
598        vpaddd  ymm3, ymm3, ymmword ptr [rsp+20H]
599        vpaddd  ymm0, ymm0, ymm5
600        vpaddd  ymm1, ymm1, ymm6
601        vpaddd  ymm2, ymm2, ymm7
602        vpaddd  ymm3, ymm3, ymm4
603        vpxor   ymm15, ymm15, ymm0
604        vpxor   ymm12, ymm12, ymm1
605        vpxor   ymm13, ymm13, ymm2
606        vpxor   ymm14, ymm14, ymm3
607        vbroadcasti128 ymm8, xmmword ptr [ROT8]
608        vpshufb ymm15, ymm15, ymm8
609        vpshufb ymm12, ymm12, ymm8
610        vpshufb ymm13, ymm13, ymm8
611        vpshufb ymm14, ymm14, ymm8
612        vpaddd  ymm10, ymm10, ymm15
613        vpaddd  ymm11, ymm11, ymm12
614        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
615        vpaddd  ymm9, ymm9, ymm14
616        vpxor   ymm5, ymm5, ymm10
617        vpxor   ymm6, ymm6, ymm11
618        vpxor   ymm7, ymm7, ymm8
619        vpxor   ymm4, ymm4, ymm9
620        vmovdqa ymmword ptr [rsp+200H], ymm8
621        vpsrld  ymm8, ymm5, 7
622        vpslld  ymm5, ymm5, 25
623        vpor    ymm5, ymm5, ymm8
624        vpsrld  ymm8, ymm6, 7
625        vpslld  ymm6, ymm6, 25
626        vpor    ymm6, ymm6, ymm8
627        vpsrld  ymm8, ymm7, 7
628        vpslld  ymm7, ymm7, 25
629        vpor    ymm7, ymm7, ymm8
630        vpsrld  ymm8, ymm4, 7
631        vpslld  ymm4, ymm4, 25
632        vpor    ymm4, ymm4, ymm8
633        vpaddd  ymm0, ymm0, ymmword ptr [rsp+140H]
634        vpaddd  ymm1, ymm1, ymmword ptr [rsp+180H]
635        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1C0H]
636        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1A0H]
637        vpaddd  ymm0, ymm0, ymm4
638        vpaddd  ymm1, ymm1, ymm5
639        vpaddd  ymm2, ymm2, ymm6
640        vpaddd  ymm3, ymm3, ymm7
641        vpxor   ymm12, ymm12, ymm0
642        vpxor   ymm13, ymm13, ymm1
643        vpxor   ymm14, ymm14, ymm2
644        vpxor   ymm15, ymm15, ymm3
645        vbroadcasti128 ymm8, xmmword ptr [ROT16]
646        vpshufb ymm12, ymm12, ymm8
647        vpshufb ymm13, ymm13, ymm8
648        vpshufb ymm14, ymm14, ymm8
649        vpshufb ymm15, ymm15, ymm8
650        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
651        vpaddd  ymm9, ymm9, ymm13
652        vpaddd  ymm10, ymm10, ymm14
653        vpaddd  ymm11, ymm11, ymm15
654        vpxor   ymm4, ymm4, ymm8
655        vpxor   ymm5, ymm5, ymm9
656        vpxor   ymm6, ymm6, ymm10
657        vpxor   ymm7, ymm7, ymm11
658        vmovdqa ymmword ptr [rsp+200H], ymm8
659        vpsrld  ymm8, ymm4, 12
660        vpslld  ymm4, ymm4, 20
661        vpor    ymm4, ymm4, ymm8
662        vpsrld  ymm8, ymm5, 12
663        vpslld  ymm5, ymm5, 20
664        vpor    ymm5, ymm5, ymm8
665        vpsrld  ymm8, ymm6, 12
666        vpslld  ymm6, ymm6, 20
667        vpor    ymm6, ymm6, ymm8
668        vpsrld  ymm8, ymm7, 12
669        vpslld  ymm7, ymm7, 20
670        vpor    ymm7, ymm7, ymm8
671        vpaddd  ymm0, ymm0, ymmword ptr [rsp+0E0H]
672        vpaddd  ymm1, ymm1, ymmword ptr [rsp+120H]
673        vpaddd  ymm2, ymm2, ymmword ptr [rsp+60H]
674        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1E0H]
675        vpaddd  ymm0, ymm0, ymm4
676        vpaddd  ymm1, ymm1, ymm5
677        vpaddd  ymm2, ymm2, ymm6
678        vpaddd  ymm3, ymm3, ymm7
679        vpxor   ymm12, ymm12, ymm0
680        vpxor   ymm13, ymm13, ymm1
681        vpxor   ymm14, ymm14, ymm2
682        vpxor   ymm15, ymm15, ymm3
683        vbroadcasti128 ymm8, xmmword ptr [ROT8]
684        vpshufb ymm12, ymm12, ymm8
685        vpshufb ymm13, ymm13, ymm8
686        vpshufb ymm14, ymm14, ymm8
687        vpshufb ymm15, ymm15, ymm8
688        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
689        vpaddd  ymm9, ymm9, ymm13
690        vpaddd  ymm10, ymm10, ymm14
691        vpaddd  ymm11, ymm11, ymm15
692        vpxor   ymm4, ymm4, ymm8
693        vpxor   ymm5, ymm5, ymm9
694        vpxor   ymm6, ymm6, ymm10
695        vpxor   ymm7, ymm7, ymm11
696        vmovdqa ymmword ptr [rsp+200H], ymm8
697        vpsrld  ymm8, ymm4, 7
698        vpslld  ymm4, ymm4, 25
699        vpor    ymm4, ymm4, ymm8
700        vpsrld  ymm8, ymm5, 7
701        vpslld  ymm5, ymm5, 25
702        vpor    ymm5, ymm5, ymm8
703        vpsrld  ymm8, ymm6, 7
704        vpslld  ymm6, ymm6, 25
705        vpor    ymm6, ymm6, ymm8
706        vpsrld  ymm8, ymm7, 7
707        vpslld  ymm7, ymm7, 25
708        vpor    ymm7, ymm7, ymm8
709        vpaddd  ymm0, ymm0, ymmword ptr [rsp+80H]
710        vpaddd  ymm1, ymm1, ymmword ptr [rsp+160H]
711        vpaddd  ymm2, ymm2, ymmword ptr [rsp+0A0H]
712        vpaddd  ymm3, ymm3, ymmword ptr [rsp+20H]
713        vpaddd  ymm0, ymm0, ymm5
714        vpaddd  ymm1, ymm1, ymm6
715        vpaddd  ymm2, ymm2, ymm7
716        vpaddd  ymm3, ymm3, ymm4
717        vpxor   ymm15, ymm15, ymm0
718        vpxor   ymm12, ymm12, ymm1
719        vpxor   ymm13, ymm13, ymm2
720        vpxor   ymm14, ymm14, ymm3
721        vbroadcasti128 ymm8, xmmword ptr [ROT16]
722        vpshufb ymm15, ymm15, ymm8
723        vpshufb ymm12, ymm12, ymm8
724        vpshufb ymm13, ymm13, ymm8
725        vpshufb ymm14, ymm14, ymm8
726        vpaddd  ymm10, ymm10, ymm15
727        vpaddd  ymm11, ymm11, ymm12
728        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
729        vpaddd  ymm9, ymm9, ymm14
730        vpxor   ymm5, ymm5, ymm10
731        vpxor   ymm6, ymm6, ymm11
732        vpxor   ymm7, ymm7, ymm8
733        vpxor   ymm4, ymm4, ymm9
734        vmovdqa ymmword ptr [rsp+200H], ymm8
735        vpsrld  ymm8, ymm5, 12
736        vpslld  ymm5, ymm5, 20
737        vpor    ymm5, ymm5, ymm8
738        vpsrld  ymm8, ymm6, 12
739        vpslld  ymm6, ymm6, 20
740        vpor    ymm6, ymm6, ymm8
741        vpsrld  ymm8, ymm7, 12
742        vpslld  ymm7, ymm7, 20
743        vpor    ymm7, ymm7, ymm8
744        vpsrld  ymm8, ymm4, 12
745        vpslld  ymm4, ymm4, 20
746        vpor    ymm4, ymm4, ymm8
747        vpaddd  ymm0, ymm0, ymmword ptr [rsp]
748        vpaddd  ymm1, ymm1, ymmword ptr [rsp+40H]
749        vpaddd  ymm2, ymm2, ymmword ptr [rsp+100H]
750        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0C0H]
751        vpaddd  ymm0, ymm0, ymm5
752        vpaddd  ymm1, ymm1, ymm6
753        vpaddd  ymm2, ymm2, ymm7
754        vpaddd  ymm3, ymm3, ymm4
755        vpxor   ymm15, ymm15, ymm0
756        vpxor   ymm12, ymm12, ymm1
757        vpxor   ymm13, ymm13, ymm2
758        vpxor   ymm14, ymm14, ymm3
759        vbroadcasti128 ymm8, xmmword ptr [ROT8]
760        vpshufb ymm15, ymm15, ymm8
761        vpshufb ymm12, ymm12, ymm8
762        vpshufb ymm13, ymm13, ymm8
763        vpshufb ymm14, ymm14, ymm8
764        vpaddd  ymm10, ymm10, ymm15
765        vpaddd  ymm11, ymm11, ymm12
766        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
767        vpaddd  ymm9, ymm9, ymm14
768        vpxor   ymm5, ymm5, ymm10
769        vpxor   ymm6, ymm6, ymm11
770        vpxor   ymm7, ymm7, ymm8
771        vpxor   ymm4, ymm4, ymm9
772        vmovdqa ymmword ptr [rsp+200H], ymm8
773        vpsrld  ymm8, ymm5, 7
774        vpslld  ymm5, ymm5, 25
775        vpor    ymm5, ymm5, ymm8
776        vpsrld  ymm8, ymm6, 7
777        vpslld  ymm6, ymm6, 25
778        vpor    ymm6, ymm6, ymm8
779        vpsrld  ymm8, ymm7, 7
780        vpslld  ymm7, ymm7, 25
781        vpor    ymm7, ymm7, ymm8
782        vpsrld  ymm8, ymm4, 7
783        vpslld  ymm4, ymm4, 25
784        vpor    ymm4, ymm4, ymm8
785        vpaddd  ymm0, ymm0, ymmword ptr [rsp+180H]
786        vpaddd  ymm1, ymm1, ymmword ptr [rsp+120H]
787        vpaddd  ymm2, ymm2, ymmword ptr [rsp+1E0H]
788        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1C0H]
789        vpaddd  ymm0, ymm0, ymm4
790        vpaddd  ymm1, ymm1, ymm5
791        vpaddd  ymm2, ymm2, ymm6
792        vpaddd  ymm3, ymm3, ymm7
793        vpxor   ymm12, ymm12, ymm0
794        vpxor   ymm13, ymm13, ymm1
795        vpxor   ymm14, ymm14, ymm2
796        vpxor   ymm15, ymm15, ymm3
797        vbroadcasti128 ymm8, xmmword ptr [ROT16]
798        vpshufb ymm12, ymm12, ymm8
799        vpshufb ymm13, ymm13, ymm8
800        vpshufb ymm14, ymm14, ymm8
801        vpshufb ymm15, ymm15, ymm8
802        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
803        vpaddd  ymm9, ymm9, ymm13
804        vpaddd  ymm10, ymm10, ymm14
805        vpaddd  ymm11, ymm11, ymm15
806        vpxor   ymm4, ymm4, ymm8
807        vpxor   ymm5, ymm5, ymm9
808        vpxor   ymm6, ymm6, ymm10
809        vpxor   ymm7, ymm7, ymm11
810        vmovdqa ymmword ptr [rsp+200H], ymm8
811        vpsrld  ymm8, ymm4, 12
812        vpslld  ymm4, ymm4, 20
813        vpor    ymm4, ymm4, ymm8
814        vpsrld  ymm8, ymm5, 12
815        vpslld  ymm5, ymm5, 20
816        vpor    ymm5, ymm5, ymm8
817        vpsrld  ymm8, ymm6, 12
818        vpslld  ymm6, ymm6, 20
819        vpor    ymm6, ymm6, ymm8
820        vpsrld  ymm8, ymm7, 12
821        vpslld  ymm7, ymm7, 20
822        vpor    ymm7, ymm7, ymm8
823        vpaddd  ymm0, ymm0, ymmword ptr [rsp+1A0H]
824        vpaddd  ymm1, ymm1, ymmword ptr [rsp+160H]
825        vpaddd  ymm2, ymm2, ymmword ptr [rsp+140H]
826        vpaddd  ymm3, ymm3, ymmword ptr [rsp+100H]
827        vpaddd  ymm0, ymm0, ymm4
828        vpaddd  ymm1, ymm1, ymm5
829        vpaddd  ymm2, ymm2, ymm6
830        vpaddd  ymm3, ymm3, ymm7
831        vpxor   ymm12, ymm12, ymm0
832        vpxor   ymm13, ymm13, ymm1
833        vpxor   ymm14, ymm14, ymm2
834        vpxor   ymm15, ymm15, ymm3
835        vbroadcasti128 ymm8, xmmword ptr [ROT8]
836        vpshufb ymm12, ymm12, ymm8
837        vpshufb ymm13, ymm13, ymm8
838        vpshufb ymm14, ymm14, ymm8
839        vpshufb ymm15, ymm15, ymm8
840        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
841        vpaddd  ymm9, ymm9, ymm13
842        vpaddd  ymm10, ymm10, ymm14
843        vpaddd  ymm11, ymm11, ymm15
844        vpxor   ymm4, ymm4, ymm8
845        vpxor   ymm5, ymm5, ymm9
846        vpxor   ymm6, ymm6, ymm10
847        vpxor   ymm7, ymm7, ymm11
848        vmovdqa ymmword ptr [rsp+200H], ymm8
849        vpsrld  ymm8, ymm4, 7
850        vpslld  ymm4, ymm4, 25
851        vpor    ymm4, ymm4, ymm8
852        vpsrld  ymm8, ymm5, 7
853        vpslld  ymm5, ymm5, 25
854        vpor    ymm5, ymm5, ymm8
855        vpsrld  ymm8, ymm6, 7
856        vpslld  ymm6, ymm6, 25
857        vpor    ymm6, ymm6, ymm8
858        vpsrld  ymm8, ymm7, 7
859        vpslld  ymm7, ymm7, 25
860        vpor    ymm7, ymm7, ymm8
861        vpaddd  ymm0, ymm0, ymmword ptr [rsp+0E0H]
862        vpaddd  ymm1, ymm1, ymmword ptr [rsp+0A0H]
863        vpaddd  ymm2, ymm2, ymmword ptr [rsp]
864        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0C0H]
865        vpaddd  ymm0, ymm0, ymm5
866        vpaddd  ymm1, ymm1, ymm6
867        vpaddd  ymm2, ymm2, ymm7
868        vpaddd  ymm3, ymm3, ymm4
869        vpxor   ymm15, ymm15, ymm0
870        vpxor   ymm12, ymm12, ymm1
871        vpxor   ymm13, ymm13, ymm2
872        vpxor   ymm14, ymm14, ymm3
873        vbroadcasti128 ymm8, xmmword ptr [ROT16]
874        vpshufb ymm15, ymm15, ymm8
875        vpshufb ymm12, ymm12, ymm8
876        vpshufb ymm13, ymm13, ymm8
877        vpshufb ymm14, ymm14, ymm8
878        vpaddd  ymm10, ymm10, ymm15
879        vpaddd  ymm11, ymm11, ymm12
880        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
881        vpaddd  ymm9, ymm9, ymm14
882        vpxor   ymm5, ymm5, ymm10
883        vpxor   ymm6, ymm6, ymm11
884        vpxor   ymm7, ymm7, ymm8
885        vpxor   ymm4, ymm4, ymm9
886        vmovdqa ymmword ptr [rsp+200H], ymm8
887        vpsrld  ymm8, ymm5, 12
888        vpslld  ymm5, ymm5, 20
889        vpor    ymm5, ymm5, ymm8
890        vpsrld  ymm8, ymm6, 12
891        vpslld  ymm6, ymm6, 20
892        vpor    ymm6, ymm6, ymm8
893        vpsrld  ymm8, ymm7, 12
894        vpslld  ymm7, ymm7, 20
895        vpor    ymm7, ymm7, ymm8
896        vpsrld  ymm8, ymm4, 12
897        vpslld  ymm4, ymm4, 20
898        vpor    ymm4, ymm4, ymm8
899        vpaddd  ymm0, ymm0, ymmword ptr [rsp+40H]
900        vpaddd  ymm1, ymm1, ymmword ptr [rsp+60H]
901        vpaddd  ymm2, ymm2, ymmword ptr [rsp+20H]
902        vpaddd  ymm3, ymm3, ymmword ptr [rsp+80H]
903        vpaddd  ymm0, ymm0, ymm5
904        vpaddd  ymm1, ymm1, ymm6
905        vpaddd  ymm2, ymm2, ymm7
906        vpaddd  ymm3, ymm3, ymm4
907        vpxor   ymm15, ymm15, ymm0
908        vpxor   ymm12, ymm12, ymm1
909        vpxor   ymm13, ymm13, ymm2
910        vpxor   ymm14, ymm14, ymm3
911        vbroadcasti128 ymm8, xmmword ptr [ROT8]
912        vpshufb ymm15, ymm15, ymm8
913        vpshufb ymm12, ymm12, ymm8
914        vpshufb ymm13, ymm13, ymm8
915        vpshufb ymm14, ymm14, ymm8
916        vpaddd  ymm10, ymm10, ymm15
917        vpaddd  ymm11, ymm11, ymm12
918        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
919        vpaddd  ymm9, ymm9, ymm14
920        vpxor   ymm5, ymm5, ymm10
921        vpxor   ymm6, ymm6, ymm11
922        vpxor   ymm7, ymm7, ymm8
923        vpxor   ymm4, ymm4, ymm9
924        vmovdqa ymmword ptr [rsp+200H], ymm8
925        vpsrld  ymm8, ymm5, 7
926        vpslld  ymm5, ymm5, 25
927        vpor    ymm5, ymm5, ymm8
928        vpsrld  ymm8, ymm6, 7
929        vpslld  ymm6, ymm6, 25
930        vpor    ymm6, ymm6, ymm8
931        vpsrld  ymm8, ymm7, 7
932        vpslld  ymm7, ymm7, 25
933        vpor    ymm7, ymm7, ymm8
934        vpsrld  ymm8, ymm4, 7
935        vpslld  ymm4, ymm4, 25
936        vpor    ymm4, ymm4, ymm8
937        vpaddd  ymm0, ymm0, ymmword ptr [rsp+120H]
938        vpaddd  ymm1, ymm1, ymmword ptr [rsp+160H]
939        vpaddd  ymm2, ymm2, ymmword ptr [rsp+100H]
940        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1E0H]
941        vpaddd  ymm0, ymm0, ymm4
942        vpaddd  ymm1, ymm1, ymm5
943        vpaddd  ymm2, ymm2, ymm6
944        vpaddd  ymm3, ymm3, ymm7
945        vpxor   ymm12, ymm12, ymm0
946        vpxor   ymm13, ymm13, ymm1
947        vpxor   ymm14, ymm14, ymm2
948        vpxor   ymm15, ymm15, ymm3
949        vbroadcasti128 ymm8, xmmword ptr [ROT16]
950        vpshufb ymm12, ymm12, ymm8
951        vpshufb ymm13, ymm13, ymm8
952        vpshufb ymm14, ymm14, ymm8
953        vpshufb ymm15, ymm15, ymm8
954        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
955        vpaddd  ymm9, ymm9, ymm13
956        vpaddd  ymm10, ymm10, ymm14
957        vpaddd  ymm11, ymm11, ymm15
958        vpxor   ymm4, ymm4, ymm8
959        vpxor   ymm5, ymm5, ymm9
960        vpxor   ymm6, ymm6, ymm10
961        vpxor   ymm7, ymm7, ymm11
962        vmovdqa ymmword ptr [rsp+200H], ymm8
963        vpsrld  ymm8, ymm4, 12
964        vpslld  ymm4, ymm4, 20
965        vpor    ymm4, ymm4, ymm8
966        vpsrld  ymm8, ymm5, 12
967        vpslld  ymm5, ymm5, 20
968        vpor    ymm5, ymm5, ymm8
969        vpsrld  ymm8, ymm6, 12
970        vpslld  ymm6, ymm6, 20
971        vpor    ymm6, ymm6, ymm8
972        vpsrld  ymm8, ymm7, 12
973        vpslld  ymm7, ymm7, 20
974        vpor    ymm7, ymm7, ymm8
975        vpaddd  ymm0, ymm0, ymmword ptr [rsp+1C0H]
976        vpaddd  ymm1, ymm1, ymmword ptr [rsp+0A0H]
977        vpaddd  ymm2, ymm2, ymmword ptr [rsp+180H]
978        vpaddd  ymm3, ymm3, ymmword ptr [rsp+20H]
979        vpaddd  ymm0, ymm0, ymm4
980        vpaddd  ymm1, ymm1, ymm5
981        vpaddd  ymm2, ymm2, ymm6
982        vpaddd  ymm3, ymm3, ymm7
983        vpxor   ymm12, ymm12, ymm0
984        vpxor   ymm13, ymm13, ymm1
985        vpxor   ymm14, ymm14, ymm2
986        vpxor   ymm15, ymm15, ymm3
987        vbroadcasti128 ymm8, xmmword ptr [ROT8]
988        vpshufb ymm12, ymm12, ymm8
989        vpshufb ymm13, ymm13, ymm8
990        vpshufb ymm14, ymm14, ymm8
991        vpshufb ymm15, ymm15, ymm8
992        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
993        vpaddd  ymm9, ymm9, ymm13
994        vpaddd  ymm10, ymm10, ymm14
995        vpaddd  ymm11, ymm11, ymm15
996        vpxor   ymm4, ymm4, ymm8
997        vpxor   ymm5, ymm5, ymm9
998        vpxor   ymm6, ymm6, ymm10
999        vpxor   ymm7, ymm7, ymm11
1000        vmovdqa ymmword ptr [rsp+200H], ymm8
1001        vpsrld  ymm8, ymm4, 7
1002        vpslld  ymm4, ymm4, 25
1003        vpor    ymm4, ymm4, ymm8
1004        vpsrld  ymm8, ymm5, 7
1005        vpslld  ymm5, ymm5, 25
1006        vpor    ymm5, ymm5, ymm8
1007        vpsrld  ymm8, ymm6, 7
1008        vpslld  ymm6, ymm6, 25
1009        vpor    ymm6, ymm6, ymm8
1010        vpsrld  ymm8, ymm7, 7
1011        vpslld  ymm7, ymm7, 25
1012        vpor    ymm7, ymm7, ymm8
1013        vpaddd  ymm0, ymm0, ymmword ptr [rsp+1A0H]
1014        vpaddd  ymm1, ymm1, ymmword ptr [rsp]
1015        vpaddd  ymm2, ymm2, ymmword ptr [rsp+40H]
1016        vpaddd  ymm3, ymm3, ymmword ptr [rsp+80H]
1017        vpaddd  ymm0, ymm0, ymm5
1018        vpaddd  ymm1, ymm1, ymm6
1019        vpaddd  ymm2, ymm2, ymm7
1020        vpaddd  ymm3, ymm3, ymm4
1021        vpxor   ymm15, ymm15, ymm0
1022        vpxor   ymm12, ymm12, ymm1
1023        vpxor   ymm13, ymm13, ymm2
1024        vpxor   ymm14, ymm14, ymm3
1025        vbroadcasti128 ymm8, xmmword ptr [ROT16]
1026        vpshufb ymm15, ymm15, ymm8
1027        vpshufb ymm12, ymm12, ymm8
1028        vpshufb ymm13, ymm13, ymm8
1029        vpshufb ymm14, ymm14, ymm8
1030        vpaddd  ymm10, ymm10, ymm15
1031        vpaddd  ymm11, ymm11, ymm12
1032        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
1033        vpaddd  ymm9, ymm9, ymm14
1034        vpxor   ymm5, ymm5, ymm10
1035        vpxor   ymm6, ymm6, ymm11
1036        vpxor   ymm7, ymm7, ymm8
1037        vpxor   ymm4, ymm4, ymm9
1038        vmovdqa ymmword ptr [rsp+200H], ymm8
1039        vpsrld  ymm8, ymm5, 12
1040        vpslld  ymm5, ymm5, 20
1041        vpor    ymm5, ymm5, ymm8
1042        vpsrld  ymm8, ymm6, 12
1043        vpslld  ymm6, ymm6, 20
1044        vpor    ymm6, ymm6, ymm8
1045        vpsrld  ymm8, ymm7, 12
1046        vpslld  ymm7, ymm7, 20
1047        vpor    ymm7, ymm7, ymm8
1048        vpsrld  ymm8, ymm4, 12
1049        vpslld  ymm4, ymm4, 20
1050        vpor    ymm4, ymm4, ymm8
1051        vpaddd  ymm0, ymm0, ymmword ptr [rsp+60H]
1052        vpaddd  ymm1, ymm1, ymmword ptr [rsp+140H]
1053        vpaddd  ymm2, ymm2, ymmword ptr [rsp+0C0H]
1054        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0E0H]
1055        vpaddd  ymm0, ymm0, ymm5
1056        vpaddd  ymm1, ymm1, ymm6
1057        vpaddd  ymm2, ymm2, ymm7
1058        vpaddd  ymm3, ymm3, ymm4
1059        vpxor   ymm15, ymm15, ymm0
1060        vpxor   ymm12, ymm12, ymm1
1061        vpxor   ymm13, ymm13, ymm2
1062        vpxor   ymm14, ymm14, ymm3
1063        vbroadcasti128 ymm8, xmmword ptr [ROT8]
1064        vpshufb ymm15, ymm15, ymm8
1065        vpshufb ymm12, ymm12, ymm8
1066        vpshufb ymm13, ymm13, ymm8
1067        vpshufb ymm14, ymm14, ymm8
1068        vpaddd  ymm10, ymm10, ymm15
1069        vpaddd  ymm11, ymm11, ymm12
1070        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
1071        vpaddd  ymm9, ymm9, ymm14
1072        vpxor   ymm5, ymm5, ymm10
1073        vpxor   ymm6, ymm6, ymm11
1074        vpxor   ymm7, ymm7, ymm8
1075        vpxor   ymm4, ymm4, ymm9
1076        vmovdqa ymmword ptr [rsp+200H], ymm8
1077        vpsrld  ymm8, ymm5, 7
1078        vpslld  ymm5, ymm5, 25
1079        vpor    ymm5, ymm5, ymm8
1080        vpsrld  ymm8, ymm6, 7
1081        vpslld  ymm6, ymm6, 25
1082        vpor    ymm6, ymm6, ymm8
1083        vpsrld  ymm8, ymm7, 7
1084        vpslld  ymm7, ymm7, 25
1085        vpor    ymm7, ymm7, ymm8
1086        vpsrld  ymm8, ymm4, 7
1087        vpslld  ymm4, ymm4, 25
1088        vpor    ymm4, ymm4, ymm8
1089        vpaddd  ymm0, ymm0, ymmword ptr [rsp+160H]
1090        vpaddd  ymm1, ymm1, ymmword ptr [rsp+0A0H]
1091        vpaddd  ymm2, ymm2, ymmword ptr [rsp+20H]
1092        vpaddd  ymm3, ymm3, ymmword ptr [rsp+100H]
1093        vpaddd  ymm0, ymm0, ymm4
1094        vpaddd  ymm1, ymm1, ymm5
1095        vpaddd  ymm2, ymm2, ymm6
1096        vpaddd  ymm3, ymm3, ymm7
1097        vpxor   ymm12, ymm12, ymm0
1098        vpxor   ymm13, ymm13, ymm1
1099        vpxor   ymm14, ymm14, ymm2
1100        vpxor   ymm15, ymm15, ymm3
1101        vbroadcasti128 ymm8, xmmword ptr [ROT16]
1102        vpshufb ymm12, ymm12, ymm8
1103        vpshufb ymm13, ymm13, ymm8
1104        vpshufb ymm14, ymm14, ymm8
1105        vpshufb ymm15, ymm15, ymm8
1106        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
1107        vpaddd  ymm9, ymm9, ymm13
1108        vpaddd  ymm10, ymm10, ymm14
1109        vpaddd  ymm11, ymm11, ymm15
1110        vpxor   ymm4, ymm4, ymm8
1111        vpxor   ymm5, ymm5, ymm9
1112        vpxor   ymm6, ymm6, ymm10
1113        vpxor   ymm7, ymm7, ymm11
1114        vmovdqa ymmword ptr [rsp+200H], ymm8
1115        vpsrld  ymm8, ymm4, 12
1116        vpslld  ymm4, ymm4, 20
1117        vpor    ymm4, ymm4, ymm8
1118        vpsrld  ymm8, ymm5, 12
1119        vpslld  ymm5, ymm5, 20
1120        vpor    ymm5, ymm5, ymm8
1121        vpsrld  ymm8, ymm6, 12
1122        vpslld  ymm6, ymm6, 20
1123        vpor    ymm6, ymm6, ymm8
1124        vpsrld  ymm8, ymm7, 12
1125        vpslld  ymm7, ymm7, 20
1126        vpor    ymm7, ymm7, ymm8
1127        vpaddd  ymm0, ymm0, ymmword ptr [rsp+1E0H]
1128        vpaddd  ymm1, ymm1, ymmword ptr [rsp]
1129        vpaddd  ymm2, ymm2, ymmword ptr [rsp+120H]
1130        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0C0H]
1131        vpaddd  ymm0, ymm0, ymm4
1132        vpaddd  ymm1, ymm1, ymm5
1133        vpaddd  ymm2, ymm2, ymm6
1134        vpaddd  ymm3, ymm3, ymm7
1135        vpxor   ymm12, ymm12, ymm0
1136        vpxor   ymm13, ymm13, ymm1
1137        vpxor   ymm14, ymm14, ymm2
1138        vpxor   ymm15, ymm15, ymm3
1139        vbroadcasti128 ymm8, xmmword ptr [ROT8]
1140        vpshufb ymm12, ymm12, ymm8
1141        vpshufb ymm13, ymm13, ymm8
1142        vpshufb ymm14, ymm14, ymm8
1143        vpshufb ymm15, ymm15, ymm8
1144        vpaddd  ymm8, ymm12, ymmword ptr [rsp+200H]
1145        vpaddd  ymm9, ymm9, ymm13
1146        vpaddd  ymm10, ymm10, ymm14
1147        vpaddd  ymm11, ymm11, ymm15
1148        vpxor   ymm4, ymm4, ymm8
1149        vpxor   ymm5, ymm5, ymm9
1150        vpxor   ymm6, ymm6, ymm10
1151        vpxor   ymm7, ymm7, ymm11
1152        vmovdqa ymmword ptr [rsp+200H], ymm8
1153        vpsrld  ymm8, ymm4, 7
1154        vpslld  ymm4, ymm4, 25
1155        vpor    ymm4, ymm4, ymm8
1156        vpsrld  ymm8, ymm5, 7
1157        vpslld  ymm5, ymm5, 25
1158        vpor    ymm5, ymm5, ymm8
1159        vpsrld  ymm8, ymm6, 7
1160        vpslld  ymm6, ymm6, 25
1161        vpor    ymm6, ymm6, ymm8
1162        vpsrld  ymm8, ymm7, 7
1163        vpslld  ymm7, ymm7, 25
1164        vpor    ymm7, ymm7, ymm8
1165        vpaddd  ymm0, ymm0, ymmword ptr [rsp+1C0H]
1166        vpaddd  ymm1, ymm1, ymmword ptr [rsp+40H]
1167        vpaddd  ymm2, ymm2, ymmword ptr [rsp+60H]
1168        vpaddd  ymm3, ymm3, ymmword ptr [rsp+0E0H]
1169        vpaddd  ymm0, ymm0, ymm5
1170        vpaddd  ymm1, ymm1, ymm6
1171        vpaddd  ymm2, ymm2, ymm7
1172        vpaddd  ymm3, ymm3, ymm4
1173        vpxor   ymm15, ymm15, ymm0
1174        vpxor   ymm12, ymm12, ymm1
1175        vpxor   ymm13, ymm13, ymm2
1176        vpxor   ymm14, ymm14, ymm3
1177        vbroadcasti128 ymm8, xmmword ptr [ROT16]
1178        vpshufb ymm15, ymm15, ymm8
1179        vpshufb ymm12, ymm12, ymm8
1180        vpshufb ymm13, ymm13, ymm8
1181        vpshufb ymm14, ymm14, ymm8
1182        vpaddd  ymm10, ymm10, ymm15
1183        vpaddd  ymm11, ymm11, ymm12
1184        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
1185        vpaddd  ymm9, ymm9, ymm14
1186        vpxor   ymm5, ymm5, ymm10
1187        vpxor   ymm6, ymm6, ymm11
1188        vpxor   ymm7, ymm7, ymm8
1189        vpxor   ymm4, ymm4, ymm9
1190        vmovdqa ymmword ptr [rsp+200H], ymm8
1191        vpsrld  ymm8, ymm5, 12
1192        vpslld  ymm5, ymm5, 20
1193        vpor    ymm5, ymm5, ymm8
1194        vpsrld  ymm8, ymm6, 12
1195        vpslld  ymm6, ymm6, 20
1196        vpor    ymm6, ymm6, ymm8
1197        vpsrld  ymm8, ymm7, 12
1198        vpslld  ymm7, ymm7, 20
1199        vpor    ymm7, ymm7, ymm8
1200        vpsrld  ymm8, ymm4, 12
1201        vpslld  ymm4, ymm4, 20
1202        vpor    ymm4, ymm4, ymm8
1203        vpaddd  ymm0, ymm0, ymmword ptr [rsp+140H]
1204        vpaddd  ymm1, ymm1, ymmword ptr [rsp+180H]
1205        vpaddd  ymm2, ymm2, ymmword ptr [rsp+80H]
1206        vpaddd  ymm3, ymm3, ymmword ptr [rsp+1A0H]
1207        vpaddd  ymm0, ymm0, ymm5
1208        vpaddd  ymm1, ymm1, ymm6
1209        vpaddd  ymm2, ymm2, ymm7
1210        vpaddd  ymm3, ymm3, ymm4
1211        vpxor   ymm15, ymm15, ymm0
1212        vpxor   ymm12, ymm12, ymm1
1213        vpxor   ymm13, ymm13, ymm2
1214        vpxor   ymm14, ymm14, ymm3
1215        vbroadcasti128 ymm8, xmmword ptr [ROT8]
1216        vpshufb ymm15, ymm15, ymm8
1217        vpshufb ymm12, ymm12, ymm8
1218        vpshufb ymm13, ymm13, ymm8
1219        vpshufb ymm14, ymm14, ymm8
1220        vpaddd  ymm10, ymm10, ymm15
1221        vpaddd  ymm11, ymm11, ymm12
1222        vpaddd  ymm8, ymm13, ymmword ptr [rsp+200H]
1223        vpaddd  ymm9, ymm9, ymm14
1224        vpxor   ymm5, ymm5, ymm10
1225        vpxor   ymm6, ymm6, ymm11
1226        vpxor   ymm7, ymm7, ymm8
1227        vpxor   ymm4, ymm4, ymm9
1228        vpxor   ymm0, ymm0, ymm8
1229        vpxor   ymm1, ymm1, ymm9
1230        vpxor   ymm2, ymm2, ymm10
1231        vpxor   ymm3, ymm3, ymm11
1232        vpsrld  ymm8, ymm5, 7
1233        vpslld  ymm5, ymm5, 25
1234        vpor    ymm5, ymm5, ymm8
1235        vpsrld  ymm8, ymm6, 7
1236        vpslld  ymm6, ymm6, 25
1237        vpor    ymm6, ymm6, ymm8
1238        vpsrld  ymm8, ymm7, 7
1239        vpslld  ymm7, ymm7, 25
1240        vpor    ymm7, ymm7, ymm8
1241        vpsrld  ymm8, ymm4, 7
1242        vpslld  ymm4, ymm4, 25
1243        vpor    ymm4, ymm4, ymm8
1244        vpxor   ymm4, ymm4, ymm12
1245        vpxor   ymm5, ymm5, ymm13
1246        vpxor   ymm6, ymm6, ymm14
1247        vpxor   ymm7, ymm7, ymm15
1248        movzx   eax, byte ptr [rbp+78H]
1249        jne     innerloop8
1250        mov     rbx, qword ptr [rbp+90H]
1251        vunpcklps ymm8, ymm0, ymm1
1252        vunpcklps ymm9, ymm2, ymm3
1253        vunpckhps ymm10, ymm0, ymm1
1254        vunpcklps ymm11, ymm4, ymm5
1255        vunpcklps ymm0, ymm6, ymm7
1256        vshufps ymm12, ymm8, ymm9, 78
1257        vblendps ymm1, ymm8, ymm12, 0CCH
1258        vshufps ymm8, ymm11, ymm0, 78
1259        vunpckhps ymm13, ymm2, ymm3
1260        vblendps ymm2, ymm11, ymm8, 0CCH
1261        vblendps ymm3, ymm12, ymm9, 0CCH
1262        vperm2f128 ymm12, ymm1, ymm2, 20H
1263        vmovups ymmword ptr [rbx], ymm12
1264        vunpckhps ymm14, ymm4, ymm5
1265        vblendps ymm4, ymm8, ymm0, 0CCH
1266        vunpckhps ymm15, ymm6, ymm7
1267        vperm2f128 ymm7, ymm3, ymm4, 20H
1268        vmovups ymmword ptr [rbx+20H], ymm7
1269        vshufps ymm5, ymm10, ymm13, 78
1270        vblendps ymm6, ymm5, ymm13, 0CCH
1271        vshufps ymm13, ymm14, ymm15, 78
1272        vblendps ymm10, ymm10, ymm5, 0CCH
1273        vblendps ymm14, ymm14, ymm13, 0CCH
1274        vperm2f128 ymm8, ymm10, ymm14, 20H
1275        vmovups ymmword ptr [rbx+40H], ymm8
1276        vblendps ymm15, ymm13, ymm15, 0CCH
1277        vperm2f128 ymm13, ymm6, ymm15, 20H
1278        vmovups ymmword ptr [rbx+60H], ymm13
1279        vperm2f128 ymm9, ymm1, ymm2, 31H
1280        vperm2f128 ymm11, ymm3, ymm4, 31H
1281        vmovups ymmword ptr [rbx+80H], ymm9
1282        vperm2f128 ymm14, ymm10, ymm14, 31H
1283        vperm2f128 ymm15, ymm6, ymm15, 31H
1284        vmovups ymmword ptr [rbx+0A0H], ymm11
1285        vmovups ymmword ptr [rbx+0C0H], ymm14
1286        vmovups ymmword ptr [rbx+0E0H], ymm15
1287        vmovdqa ymm0, ymmword ptr [rsp+2A0H]
1288        vpaddd  ymm1, ymm0, ymmword ptr [rsp+220H]
1289        vmovdqa ymmword ptr [rsp+220H], ymm1
1290        vpxor   ymm0, ymm0, ymmword ptr [CMP_MSB_MASK]
1291        vpxor   ymm2, ymm1, ymmword ptr [CMP_MSB_MASK]
1292        vpcmpgtd ymm2, ymm0, ymm2
1293        vmovdqa ymm0, ymmword ptr [rsp+240H]
1294        vpsubd  ymm2, ymm0, ymm2
1295        vmovdqa ymmword ptr [rsp+240H], ymm2
1296        add     rdi, 64
1297        add     rbx, 256
1298        mov     qword ptr [rbp+90H], rbx
1299        sub     rsi, 8
1300        cmp     rsi, 8
1301        jnc     outerloop8
1302        test    rsi, rsi
1303        jnz     final7blocks
1304unwind:
1305        vzeroupper
1306        vmovdqa xmm6, xmmword ptr [rsp+2D0H]
1307        vmovdqa xmm7, xmmword ptr [rsp+2E0H]
1308        vmovdqa xmm8, xmmword ptr [rsp+2F0H]
1309        vmovdqa xmm9, xmmword ptr [rsp+300H]
1310        vmovdqa xmm10, xmmword ptr [rsp+310H]
1311        vmovdqa xmm11, xmmword ptr [rsp+320H]
1312        vmovdqa xmm12, xmmword ptr [rsp+330H]
1313        vmovdqa xmm13, xmmword ptr [rsp+340H]
1314        vmovdqa xmm14, xmmword ptr [rsp+350H]
1315        vmovdqa xmm15, xmmword ptr [rsp+360H]
1316        mov     rsp, rbp
1317        pop     rbp
1318        pop     rbx
1319        pop     rdi
1320        pop     rsi
1321        pop     r12
1322        pop     r13
1323        pop     r14
1324        pop     r15
1325        ret
1326ALIGN   16
1327final7blocks:
1328        mov     rbx, qword ptr [rbp+90H]
1329        mov     r15, qword ptr [rsp+2C0H]
1330        movzx   r13d, byte ptr [rbp+78H]
1331        movzx   r12d, byte ptr [rbp+88H]
1332        test    rsi, 4H
1333        je      final3blocks
1334        vbroadcasti128 ymm0, xmmword ptr [rcx]
1335        vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
1336        vmovdqa ymm8, ymm0
1337        vmovdqa ymm9, ymm1
1338        vbroadcasti128 ymm12, xmmword ptr [rsp+220H]
1339        vbroadcasti128 ymm13, xmmword ptr [rsp+240H]
1340        vpunpckldq ymm14, ymm12, ymm13
1341        vpunpckhdq ymm15, ymm12, ymm13
1342        vpermq  ymm14, ymm14, 50H
1343        vpermq  ymm15, ymm15, 50H
1344        vbroadcasti128 ymm12, xmmword ptr [BLAKE3_BLOCK_LEN]
1345        vpblendd ymm14, ymm14, ymm12, 44H
1346        vpblendd ymm15, ymm15, ymm12, 44H
1347        vmovdqa ymmword ptr [rsp], ymm14
1348        vmovdqa ymmword ptr [rsp+20H], ymm15
1349        mov     r8, qword ptr [rdi]
1350        mov     r9, qword ptr [rdi+8H]
1351        mov     r10, qword ptr [rdi+10H]
1352        mov     r11, qword ptr [rdi+18H]
1353        movzx   eax, byte ptr [rbp+80H]
1354        or      eax, r13d
1355        xor     edx, edx
1356ALIGN   16
1357innerloop4:
1358        mov     r14d, eax
1359        or      eax, r12d
1360        add     rdx, 64
1361        cmp     rdx, r15
1362        cmovne  eax, r14d
1363        mov     dword ptr [rsp+200H], eax
1364        vmovups ymm2, ymmword ptr [r8+rdx-40H]
1365        vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-40H], 01H
1366        vmovups ymm3, ymmword ptr [r8+rdx-30H]
1367        vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-30H], 01H
1368        vshufps ymm4, ymm2, ymm3, 136
1369        vshufps ymm5, ymm2, ymm3, 221
1370        vmovups ymm2, ymmword ptr [r8+rdx-20H]
1371        vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-20H], 01H
1372        vmovups ymm3, ymmword ptr [r8+rdx-10H]
1373        vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-10H], 01H
1374        vshufps ymm6, ymm2, ymm3, 136
1375        vshufps ymm7, ymm2, ymm3, 221
1376        vpshufd ymm6, ymm6, 93H
1377        vpshufd ymm7, ymm7, 93H
1378        vmovups ymm10, ymmword ptr [r10+rdx-40H]
1379        vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-40H], 01H
1380        vmovups ymm11, ymmword ptr [r10+rdx-30H]
1381        vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-30H], 01H
1382        vshufps ymm12, ymm10, ymm11, 136
1383        vshufps ymm13, ymm10, ymm11, 221
1384        vmovups ymm10, ymmword ptr [r10+rdx-20H]
1385        vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-20H], 01H
1386        vmovups ymm11, ymmword ptr [r10+rdx-10H]
1387        vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-10H], 01H
1388        vshufps ymm14, ymm10, ymm11, 136
1389        vshufps ymm15, ymm10, ymm11, 221
1390        vpshufd ymm14, ymm14, 93H
1391        vpshufd ymm15, ymm15, 93H
1392        vpbroadcastd ymm2, dword ptr [rsp+200H]
1393        vmovdqa ymm3, ymmword ptr [rsp]
1394        vmovdqa ymm11, ymmword ptr [rsp+20H]
1395        vpblendd ymm3, ymm3, ymm2, 88H
1396        vpblendd ymm11, ymm11, ymm2, 88H
1397        vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
1398        vmovdqa ymm10, ymm2
1399        mov     al, 7
1400roundloop4:
1401        vpaddd  ymm0, ymm0, ymm4
1402        vpaddd  ymm8, ymm8, ymm12
1403        vmovdqa ymmword ptr [rsp+40H], ymm4
1404        nop
1405        vmovdqa ymmword ptr [rsp+60H], ymm12
1406        nop
1407        vpaddd  ymm0, ymm0, ymm1
1408        vpaddd  ymm8, ymm8, ymm9
1409        vpxor   ymm3, ymm3, ymm0
1410        vpxor   ymm11, ymm11, ymm8
1411        vbroadcasti128 ymm4, xmmword ptr [ROT16]
1412        vpshufb ymm3, ymm3, ymm4
1413        vpshufb ymm11, ymm11, ymm4
1414        vpaddd  ymm2, ymm2, ymm3
1415        vpaddd  ymm10, ymm10, ymm11
1416        vpxor   ymm1, ymm1, ymm2
1417        vpxor   ymm9, ymm9, ymm10
1418        vpsrld  ymm4, ymm1, 12
1419        vpslld  ymm1, ymm1, 20
1420        vpor    ymm1, ymm1, ymm4
1421        vpsrld  ymm4, ymm9, 12
1422        vpslld  ymm9, ymm9, 20
1423        vpor    ymm9, ymm9, ymm4
1424        vpaddd  ymm0, ymm0, ymm5
1425        vpaddd  ymm8, ymm8, ymm13
1426        vpaddd  ymm0, ymm0, ymm1
1427        vpaddd  ymm8, ymm8, ymm9
1428        vmovdqa ymmword ptr [rsp+80H], ymm5
1429        vmovdqa ymmword ptr [rsp+0A0H], ymm13
1430        vpxor   ymm3, ymm3, ymm0
1431        vpxor   ymm11, ymm11, ymm8
1432        vbroadcasti128 ymm4, xmmword ptr [ROT8]
1433        vpshufb ymm3, ymm3, ymm4
1434        vpshufb ymm11, ymm11, ymm4
1435        vpaddd  ymm2, ymm2, ymm3
1436        vpaddd  ymm10, ymm10, ymm11
1437        vpxor   ymm1, ymm1, ymm2
1438        vpxor   ymm9, ymm9, ymm10
1439        vpsrld  ymm4, ymm1, 7
1440        vpslld  ymm1, ymm1, 25
1441        vpor    ymm1, ymm1, ymm4
1442        vpsrld  ymm4, ymm9, 7
1443        vpslld  ymm9, ymm9, 25
1444        vpor    ymm9, ymm9, ymm4
1445        vpshufd ymm0, ymm0, 93H
1446        vpshufd ymm8, ymm8, 93H
1447        vpshufd ymm3, ymm3, 4EH
1448        vpshufd ymm11, ymm11, 4EH
1449        vpshufd ymm2, ymm2, 39H
1450        vpshufd ymm10, ymm10, 39H
1451        vpaddd  ymm0, ymm0, ymm6
1452        vpaddd  ymm8, ymm8, ymm14
1453        vpaddd  ymm0, ymm0, ymm1
1454        vpaddd  ymm8, ymm8, ymm9
1455        vpxor   ymm3, ymm3, ymm0
1456        vpxor   ymm11, ymm11, ymm8
1457        vbroadcasti128 ymm4, xmmword ptr [ROT16]
1458        vpshufb ymm3, ymm3, ymm4
1459        vpshufb ymm11, ymm11, ymm4
1460        vpaddd  ymm2, ymm2, ymm3
1461        vpaddd  ymm10, ymm10, ymm11
1462        vpxor   ymm1, ymm1, ymm2
1463        vpxor   ymm9, ymm9, ymm10
1464        vpsrld  ymm4, ymm1, 12
1465        vpslld  ymm1, ymm1, 20
1466        vpor    ymm1, ymm1, ymm4
1467        vpsrld  ymm4, ymm9, 12
1468        vpslld  ymm9, ymm9, 20
1469        vpor    ymm9, ymm9, ymm4
1470        vpaddd  ymm0, ymm0, ymm7
1471        vpaddd  ymm8, ymm8, ymm15
1472        vpaddd  ymm0, ymm0, ymm1
1473        vpaddd  ymm8, ymm8, ymm9
1474        vpxor   ymm3, ymm3, ymm0
1475        vpxor   ymm11, ymm11, ymm8
1476        vbroadcasti128 ymm4, xmmword ptr [ROT8]
1477        vpshufb ymm3, ymm3, ymm4
1478        vpshufb ymm11, ymm11, ymm4
1479        vpaddd  ymm2, ymm2, ymm3
1480        vpaddd  ymm10, ymm10, ymm11
1481        vpxor   ymm1, ymm1, ymm2
1482        vpxor   ymm9, ymm9, ymm10
1483        vpsrld  ymm4, ymm1, 7
1484        vpslld  ymm1, ymm1, 25
1485        vpor    ymm1, ymm1, ymm4
1486        vpsrld  ymm4, ymm9, 7
1487        vpslld  ymm9, ymm9, 25
1488        vpor    ymm9, ymm9, ymm4
1489        vpshufd ymm0, ymm0, 39H
1490        vpshufd ymm8, ymm8, 39H
1491        vpshufd ymm3, ymm3, 4EH
1492        vpshufd ymm11, ymm11, 4EH
1493        vpshufd ymm2, ymm2, 93H
1494        vpshufd ymm10, ymm10, 93H
1495        dec     al
1496        je      endroundloop4
1497        vmovdqa ymm4, ymmword ptr [rsp+40H]
1498        vmovdqa ymm5, ymmword ptr [rsp+80H]
1499        vshufps ymm12, ymm4, ymm5, 214
1500        vpshufd ymm13, ymm4, 0FH
1501        vpshufd ymm4, ymm12, 39H
1502        vshufps ymm12, ymm6, ymm7, 250
1503        vpblendd ymm13, ymm13, ymm12, 0AAH
1504        vpunpcklqdq ymm12, ymm7, ymm5
1505        vpblendd ymm12, ymm12, ymm6, 88H
1506        vpshufd ymm12, ymm12, 78H
1507        vpunpckhdq ymm5, ymm5, ymm7
1508        vpunpckldq ymm6, ymm6, ymm5
1509        vpshufd ymm7, ymm6, 1EH
1510        vmovdqa ymmword ptr [rsp+40H], ymm13
1511        vmovdqa ymmword ptr [rsp+80H], ymm12
1512        vmovdqa ymm12, ymmword ptr [rsp+60H]
1513        vmovdqa ymm13, ymmword ptr [rsp+0A0H]
1514        vshufps ymm5, ymm12, ymm13, 214
1515        vpshufd ymm6, ymm12, 0FH
1516        vpshufd ymm12, ymm5, 39H
1517        vshufps ymm5, ymm14, ymm15, 250
1518        vpblendd ymm6, ymm6, ymm5, 0AAH
1519        vpunpcklqdq ymm5, ymm15, ymm13
1520        vpblendd ymm5, ymm5, ymm14, 88H
1521        vpshufd ymm5, ymm5, 78H
1522        vpunpckhdq ymm13, ymm13, ymm15
1523        vpunpckldq ymm14, ymm14, ymm13
1524        vpshufd ymm15, ymm14, 1EH
1525        vmovdqa ymm13, ymm6
1526        vmovdqa ymm14, ymm5
1527        vmovdqa ymm5, ymmword ptr [rsp+40H]
1528        vmovdqa ymm6, ymmword ptr [rsp+80H]
1529        jmp     roundloop4
1530endroundloop4:
1531        vpxor   ymm0, ymm0, ymm2
1532        vpxor   ymm1, ymm1, ymm3
1533        vpxor   ymm8, ymm8, ymm10
1534        vpxor   ymm9, ymm9, ymm11
1535        mov     eax, r13d
1536        cmp     rdx, r15
1537        jne     innerloop4
1538        vmovdqu xmmword ptr [rbx], xmm0
1539        vmovdqu xmmword ptr [rbx+10H], xmm1
1540        vextracti128 xmmword ptr [rbx+20H], ymm0, 01H
1541        vextracti128 xmmword ptr [rbx+30H], ymm1, 01H
1542        vmovdqu xmmword ptr [rbx+40H], xmm8
1543        vmovdqu xmmword ptr [rbx+50H], xmm9
1544        vextracti128 xmmword ptr [rbx+60H], ymm8, 01H
1545        vextracti128 xmmword ptr [rbx+70H], ymm9, 01H
1546        vmovaps xmm8, xmmword ptr [rsp+260H]
1547        vmovaps xmm0, xmmword ptr [rsp+220H]
1548        vmovaps xmm1, xmmword ptr [rsp+230H]
1549        vmovaps xmm2, xmmword ptr [rsp+240H]
1550        vmovaps xmm3, xmmword ptr [rsp+250H]
1551        vblendvps xmm0, xmm0, xmm1, xmm8
1552        vblendvps xmm2, xmm2, xmm3, xmm8
1553        vmovaps xmmword ptr [rsp+220H], xmm0
1554        vmovaps xmmword ptr [rsp+240H], xmm2
1555        add     rbx, 128
1556        add     rdi, 32
1557        sub     rsi, 4
1558final3blocks:
1559        test    rsi, 2H
1560        je      final1blocks
1561        vbroadcasti128 ymm0, xmmword ptr [rcx]
1562        vbroadcasti128 ymm1, xmmword ptr [rcx+10H]
1563        vmovd   xmm13, dword ptr [rsp+220H]
1564        vpinsrd xmm13, xmm13, dword ptr [rsp+240H], 1
1565        vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN], 2
1566        vmovd   xmm14, dword ptr [rsp+224H]
1567        vpinsrd xmm14, xmm14, dword ptr [rsp+244H], 1
1568        vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN], 2
1569        vinserti128 ymm13, ymm13, xmm14, 01H
1570        vbroadcasti128 ymm14, xmmword ptr [ROT16]
1571        vbroadcasti128 ymm15, xmmword ptr [ROT8]
1572        mov     r8, qword ptr [rdi]
1573        mov     r9, qword ptr [rdi+8H]
1574        movzx   eax, byte ptr [rbp+80H]
1575        or      eax, r13d
1576        xor     edx, edx
1577ALIGN   16
1578innerloop2:
1579        mov     r14d, eax
1580        or      eax, r12d
1581        add     rdx, 64
1582        cmp     rdx, r15
1583        cmovne  eax, r14d
1584        mov     dword ptr [rsp+200H], eax
1585        vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV]
1586        vpbroadcastd ymm8, dword ptr [rsp+200H]
1587        vpblendd ymm3, ymm13, ymm8, 88H
1588        vmovups ymm8, ymmword ptr [r8+rdx-40H]
1589        vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-40H], 01H
1590        vmovups ymm9, ymmword ptr [r8+rdx-30H]
1591        vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-30H], 01H
1592        vshufps ymm4, ymm8, ymm9, 136
1593        vshufps ymm5, ymm8, ymm9, 221
1594        vmovups ymm8, ymmword ptr [r8+rdx-20H]
1595        vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-20H], 01H
1596        vmovups ymm9, ymmword ptr [r8+rdx-10H]
1597        vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-10H], 01H
1598        vshufps ymm6, ymm8, ymm9, 136
1599        vshufps ymm7, ymm8, ymm9, 221
1600        vpshufd ymm6, ymm6, 93H
1601        vpshufd ymm7, ymm7, 93H
1602        mov     al, 7
1603roundloop2:
1604        vpaddd  ymm0, ymm0, ymm4
1605        vpaddd  ymm0, ymm0, ymm1
1606        vpxor   ymm3, ymm3, ymm0
1607        vpshufb ymm3, ymm3, ymm14
1608        vpaddd  ymm2, ymm2, ymm3
1609        vpxor   ymm1, ymm1, ymm2
1610        vpsrld  ymm8, ymm1, 12
1611        vpslld  ymm1, ymm1, 20
1612        vpor    ymm1, ymm1, ymm8
1613        vpaddd  ymm0, ymm0, ymm5
1614        vpaddd  ymm0, ymm0, ymm1
1615        vpxor   ymm3, ymm3, ymm0
1616        vpshufb ymm3, ymm3, ymm15
1617        vpaddd  ymm2, ymm2, ymm3
1618        vpxor   ymm1, ymm1, ymm2
1619        vpsrld  ymm8, ymm1, 7
1620        vpslld  ymm1, ymm1, 25
1621        vpor    ymm1, ymm1, ymm8
1622        vpshufd ymm0, ymm0, 93H
1623        vpshufd ymm3, ymm3, 4EH
1624        vpshufd ymm2, ymm2, 39H
1625        vpaddd  ymm0, ymm0, ymm6
1626        vpaddd  ymm0, ymm0, ymm1
1627        vpxor   ymm3, ymm3, ymm0
1628        vpshufb ymm3, ymm3, ymm14
1629        vpaddd  ymm2, ymm2, ymm3
1630        vpxor   ymm1, ymm1, ymm2
1631        vpsrld  ymm8, ymm1, 12
1632        vpslld  ymm1, ymm1, 20
1633        vpor    ymm1, ymm1, ymm8
1634        vpaddd  ymm0, ymm0, ymm7
1635        vpaddd  ymm0, ymm0, ymm1
1636        vpxor   ymm3, ymm3, ymm0
1637        vpshufb ymm3, ymm3, ymm15
1638        vpaddd  ymm2, ymm2, ymm3
1639        vpxor   ymm1, ymm1, ymm2
1640        vpsrld  ymm8, ymm1, 7
1641        vpslld  ymm1, ymm1, 25
1642        vpor    ymm1, ymm1, ymm8
1643        vpshufd ymm0, ymm0, 39H
1644        vpshufd ymm3, ymm3, 4EH
1645        vpshufd ymm2, ymm2, 93H
1646        dec     al
1647        jz      endroundloop2
1648        vshufps ymm8, ymm4, ymm5, 214
1649        vpshufd ymm9, ymm4, 0FH
1650        vpshufd ymm4, ymm8, 39H
1651        vshufps ymm8, ymm6, ymm7, 250
1652        vpblendd ymm9, ymm9, ymm8, 0AAH
1653        vpunpcklqdq ymm8, ymm7, ymm5
1654        vpblendd ymm8, ymm8, ymm6, 88H
1655        vpshufd ymm8, ymm8, 78H
1656        vpunpckhdq ymm5, ymm5, ymm7
1657        vpunpckldq ymm6, ymm6, ymm5
1658        vpshufd ymm7, ymm6, 1EH
1659        vmovdqa ymm5, ymm9
1660        vmovdqa ymm6, ymm8
1661        jmp     roundloop2
1662endroundloop2:
1663        vpxor   ymm0, ymm0, ymm2
1664        vpxor   ymm1, ymm1, ymm3
1665        mov     eax, r13d
1666        cmp     rdx, r15
1667        jne     innerloop2
1668        vmovdqu xmmword ptr [rbx], xmm0
1669        vmovdqu xmmword ptr [rbx+10H], xmm1
1670        vextracti128 xmmword ptr [rbx+20H], ymm0, 01H
1671        vextracti128 xmmword ptr [rbx+30H], ymm1, 01H
1672        vmovaps ymm8, ymmword ptr [rsp+260H]
1673        vmovaps ymm0, ymmword ptr [rsp+220H]
1674        vmovups ymm1, ymmword ptr [rsp+228H]
1675        vmovaps ymm2, ymmword ptr [rsp+240H]
1676        vmovups ymm3, ymmword ptr [rsp+248H]
1677        vblendvps ymm0, ymm0, ymm1, ymm8
1678        vblendvps ymm2, ymm2, ymm3, ymm8
1679        vmovaps ymmword ptr [rsp+220H], ymm0
1680        vmovaps ymmword ptr [rsp+240H], ymm2
1681        add     rbx, 64
1682        add     rdi, 16
1683        sub     rsi, 2
1684final1blocks:
1685        test    rsi, 1H
1686        je      unwind
1687        vmovdqu xmm0, xmmword ptr [rcx]
1688        vmovdqu xmm1, xmmword ptr [rcx+10H]
1689        vmovd   xmm3, dword ptr [rsp+220H]
1690        vpinsrd xmm3, xmm3, dword ptr [rsp+240H], 1
1691        vpinsrd xmm13, xmm3, dword ptr [BLAKE3_BLOCK_LEN], 2
1692        vmovdqa xmm14, xmmword ptr [ROT16]
1693        vmovdqa xmm15, xmmword ptr [ROT8]
1694        mov     r8, qword ptr [rdi]
1695        movzx   eax, byte ptr [rbp+80H]
1696        or      eax, r13d
1697        xor     edx, edx
1698ALIGN   16
1699innerloop1:
1700        mov     r14d, eax
1701        or      eax, r12d
1702        add     rdx, 64
1703        cmp     rdx, r15
1704        cmovne  eax, r14d
1705        vmovdqa xmm2, xmmword ptr [BLAKE3_IV]
1706        vmovdqa xmm3, xmm13
1707        vpinsrd xmm3, xmm3, eax, 3
1708        vmovups xmm8, xmmword ptr [r8+rdx-40H]
1709        vmovups xmm9, xmmword ptr [r8+rdx-30H]
1710        vshufps xmm4, xmm8, xmm9, 136
1711        vshufps xmm5, xmm8, xmm9, 221
1712        vmovups xmm8, xmmword ptr [r8+rdx-20H]
1713        vmovups xmm9, xmmword ptr [r8+rdx-10H]
1714        vshufps xmm6, xmm8, xmm9, 136
1715        vshufps xmm7, xmm8, xmm9, 221
1716        vpshufd xmm6, xmm6, 93H
1717        vpshufd xmm7, xmm7, 93H
1718        mov     al, 7
1719roundloop1:
1720        vpaddd  xmm0, xmm0, xmm4
1721        vpaddd  xmm0, xmm0, xmm1
1722        vpxor   xmm3, xmm3, xmm0
1723        vpshufb xmm3, xmm3, xmm14
1724        vpaddd  xmm2, xmm2, xmm3
1725        vpxor   xmm1, xmm1, xmm2
1726        vpsrld  xmm8, xmm1, 12
1727        vpslld  xmm1, xmm1, 20
1728        vpor    xmm1, xmm1, xmm8
1729        vpaddd  xmm0, xmm0, xmm5
1730        vpaddd  xmm0, xmm0, xmm1
1731        vpxor   xmm3, xmm3, xmm0
1732        vpshufb xmm3, xmm3, xmm15
1733        vpaddd  xmm2, xmm2, xmm3
1734        vpxor   xmm1, xmm1, xmm2
1735        vpsrld  xmm8, xmm1, 7
1736        vpslld  xmm1, xmm1, 25
1737        vpor    xmm1, xmm1, xmm8
1738        vpshufd xmm0, xmm0, 93H
1739        vpshufd xmm3, xmm3, 4EH
1740        vpshufd xmm2, xmm2, 39H
1741        vpaddd  xmm0, xmm0, xmm6
1742        vpaddd  xmm0, xmm0, xmm1
1743        vpxor   xmm3, xmm3, xmm0
1744        vpshufb xmm3, xmm3, xmm14
1745        vpaddd  xmm2, xmm2, xmm3
1746        vpxor   xmm1, xmm1, xmm2
1747        vpsrld  xmm8, xmm1, 12
1748        vpslld  xmm1, xmm1, 20
1749        vpor    xmm1, xmm1, xmm8
1750        vpaddd  xmm0, xmm0, xmm7
1751        vpaddd  xmm0, xmm0, xmm1
1752        vpxor   xmm3, xmm3, xmm0
1753        vpshufb xmm3, xmm3, xmm15
1754        vpaddd  xmm2, xmm2, xmm3
1755        vpxor   xmm1, xmm1, xmm2
1756        vpsrld  xmm8, xmm1, 7
1757        vpslld  xmm1, xmm1, 25
1758        vpor    xmm1, xmm1, xmm8
1759        vpshufd xmm0, xmm0, 39H
1760        vpshufd xmm3, xmm3, 4EH
1761        vpshufd xmm2, xmm2, 93H
1762        dec     al
1763        jz      endroundloop1
1764        vshufps xmm8, xmm4, xmm5, 214
1765        vpshufd xmm9, xmm4, 0FH
1766        vpshufd xmm4, xmm8, 39H
1767        vshufps xmm8, xmm6, xmm7, 250
1768        vpblendd xmm9, xmm9, xmm8, 0AAH
1769        vpunpcklqdq xmm8, xmm7, xmm5
1770        vpblendd xmm8, xmm8, xmm6, 88H
1771        vpshufd xmm8, xmm8, 78H
1772        vpunpckhdq xmm5, xmm5, xmm7
1773        vpunpckldq xmm6, xmm6, xmm5
1774        vpshufd xmm7, xmm6, 1EH
1775        vmovdqa xmm5, xmm9
1776        vmovdqa xmm6, xmm8
1777        jmp     roundloop1
1778endroundloop1:
1779        vpxor   xmm0, xmm0, xmm2
1780        vpxor   xmm1, xmm1, xmm3
1781        mov     eax, r13d
1782        cmp     rdx, r15
1783        jne     innerloop1
1784        vmovdqu xmmword ptr [rbx], xmm0
1785        vmovdqu xmmword ptr [rbx+10H], xmm1
1786        jmp     unwind
1787
1788_blake3_hash_many_avx2 ENDP
1789blake3_hash_many_avx2 ENDP
1790_TEXT ENDS
1791
1792_RDATA SEGMENT READONLY PAGE ALIAS(".rdata") 'CONST'
1793ALIGN   64
1794ADD0:
1795        dd 0, 1, 2, 3, 4, 5, 6, 7
1796
1797ADD1:
1798        dd 8 dup (8)
1799
1800BLAKE3_IV_0:
1801        dd 8 dup (6A09E667H)
1802
1803BLAKE3_IV_1:
1804        dd 8 dup (0BB67AE85H)
1805
1806BLAKE3_IV_2:
1807        dd 8 dup (3C6EF372H)
1808
1809BLAKE3_IV_3:
1810        dd 8 dup (0A54FF53AH)
1811
1812BLAKE3_BLOCK_LEN:
1813        dd 8 dup (64)
1814
1815ROT16:
1816        db 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
1817
1818ROT8:
1819        db 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
1820
1821CMP_MSB_MASK:
1822        dd 8 dup(80000000H)
1823
1824BLAKE3_IV:
1825        dd 6A09E667H, 0BB67AE85H, 3C6EF372H, 0A54FF53AH
1826
1827_RDATA ENDS
1828END
1829