chibipub

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

blake3_avx512_x86-64_windows_msvc.asm (91605B)


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