chibipub

experimental activitypub node in C
git clone git://jb55.com/chibipub
Log | Files | Refs | README | LICENSE

blake3_avx2_x86-64_windows_msvc.asm (65948B)


      1 public _blake3_hash_many_avx2
      2 public blake3_hash_many_avx2
      3 
      4 _TEXT   SEGMENT ALIGN(16) 'CODE'
      5 
      6 ALIGN   16
      7 blake3_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
     59 outerloop8:
     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
     80 ALIGN   16
     81 innerloop8:
     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
   1304 unwind:
   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
   1326 ALIGN   16
   1327 final7blocks:
   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
   1356 ALIGN   16
   1357 innerloop4:
   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
   1400 roundloop4:
   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
   1530 endroundloop4:
   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
   1558 final3blocks:
   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
   1577 ALIGN   16
   1578 innerloop2:
   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
   1603 roundloop2:
   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
   1662 endroundloop2:
   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
   1684 final1blocks:
   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
   1698 ALIGN   16
   1699 innerloop1:
   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
   1719 roundloop1:
   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
   1778 endroundloop1:
   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
   1789 blake3_hash_many_avx2 ENDP
   1790 _TEXT ENDS
   1791 
   1792 _RDATA SEGMENT READONLY PAGE ALIAS(".rdata") 'CONST'
   1793 ALIGN   64
   1794 ADD0:
   1795         dd 0, 1, 2, 3, 4, 5, 6, 7
   1796 
   1797 ADD1:
   1798         dd 8 dup (8)
   1799 
   1800 BLAKE3_IV_0:
   1801         dd 8 dup (6A09E667H)
   1802 
   1803 BLAKE3_IV_1:
   1804         dd 8 dup (0BB67AE85H)
   1805 
   1806 BLAKE3_IV_2:
   1807         dd 8 dup (3C6EF372H)
   1808 
   1809 BLAKE3_IV_3:
   1810         dd 8 dup (0A54FF53AH)
   1811 
   1812 BLAKE3_BLOCK_LEN:
   1813         dd 8 dup (64)
   1814 
   1815 ROT16:
   1816         db 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
   1817 
   1818 ROT8:
   1819         db 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
   1820 
   1821 CMP_MSB_MASK:
   1822         dd 8 dup(80000000H)
   1823 
   1824 BLAKE3_IV:
   1825         dd 6A09E667H, 0BB67AE85H, 3C6EF372H, 0A54FF53AH
   1826 
   1827 _RDATA ENDS
   1828 END